正規表現 - みる会図書館


検索対象: UNIX MAGAZINE 1991年3月号
111件見つかりました。

1. UNIX MAGAZINE 1991年3月号

emacs 入門 C—s str C-w 移ります。ます、 基本的な使い方が分かったところで、細かい技の習得に です。 M—x isearch- backward で、逆向き検索の本名は、 M- x isearch- forward たとえば、 C-s str を入力した時点で図 9 の 1 行目の です。 しだした単語の残りの文字を検索文字に追加するコマンド を実行してみてください。最後のヾ C ー w 〃は C-s str で捜 1 行目 / * C strinC]1ibrary. 工コー領域 i—search: string この状態で C-w を入力すると、 1 行目 / * C str@ng library. 工コー領域 i—search: str 、、 string" を見つけたとします。 と入力してみてください。、、 C-s str C ー w 〃では見つけた c—s Str C—y これをさらに極端にしたコマンドもあります。 くてもよいという利点があります。 ドには、検索文字列が長い場合でもわざわざ全部入力しな ば次からは、、 string" が検索対象になります。このコマン となります。もちろん、このあと続けて℃ー s 〃を入力すれ の残りの文字をすべて検索文字列に追加します。さきほど 単語の残りの文字を検索文字に追加しましたが、今回は行 の状態で C-y を入力すれば、 1 行目 / * C str@ng 1ib て矼 y. . 工 . コーー令頁士或 i—search: str と同し例を使うと、 正規表現・基礎の基礎 本文の例にでてくる簡単な正規表現の説明をしておき ましよう。 文字 文字 く CR 〉以外の任意の 1 文字にマッチします。 正規表現式の直前の文字や記号の任意個の繰り 返しにマッチします。 行の先頭が文字で始まる行に一致します。 文字そのものに一致します。 工コー領域 i-search: string library . / * C string lib て矼 y. * / ロ 1 行目 となるのです。たしかに便利そうな機能ですが、 114 いった し、 したがって、 c. * 〃という正規表現は行の先頭が文字 c 〃である任意の長さの任意の文字列に一致します。また、 c. * s" という正規表現は行の先頭が、、 c 〃で、最後が、、 s 〃 である文字列に一致します。 こでいう、、文字列〃とはいわゆるスペースで ただし、 区切られた文字列のことではなく、スペース文字も含めた 任意の文字の連なりのことをいいます。たとえば、正規表 現、、 c. ドは、、、 ch ドにも、、 c r" にも一致します。ま た、正規表現、、 c. * r 〃は、、、 c r"f 、、、 character のすべてに一致します。 どういう状態で使うのでしようね。しつのところ、私自身 は使ったことがありません。 さて、最後にご登場願うのは、、なんでも検索〃さんです。 、、いけいけ検との違いは、 いけいけ検索 : 単純な文字列を検索 なんでも検索 : 正規表現を使って検索 です。正規表現をご存しない方は、別掲の「正規表現・基 礎の基礎」を参考にしてください。 もう 1 度、図 9 のファイルを使って実験しましよう。 C-M-s regexp i—search: i—search¯regexp: C. * と入力すると、 1 行目の、、 char *strcat(s1,s2) 〃全体に マッチします。続けて検索文字列を追加入力すると、その ときどきにマッチした位置へカーソルを移動します。 工コー領域の表示 ( 入力した検索文字列 ) とカーソルの 位置の対応を以下に示しておきます。 1 文字入力するたび にダイナミックにカーソルが移動する様子はなかなかの 感動ものです。 UNIX MAGAZINE 1991.3

2. UNIX MAGAZINE 1991年3月号

emacs 入門 M M M M M M M M M M—X M M M x k 土 11- て eg 土 0 Ⅱ (C-W) x set—mark-command ()- く SPC>) —x copy-region-as—kill -x yank (C-y) -x yank-pop (M-Y) —x search-forvard (C—S く ESC>) (M-v) x search-backvard (C-r く ESC>) x isearch—forvard (C—S) x isearch—backward (C-r) —x isearch—forward—regexp (C-M- x c-indent-command ( く TAB>) —x query—replace-regexp —x replace—regexp -x query-replace (M-%) replace—string —x isearch—backward-regexp s) x newline—and—indent x indent-region (C—M—\) の indent ー土 0 て一 C omment indent—new—comment— x kill—comment set—comment—column x find-tag ()- . ) visit—tags—table tags—sesarch tags-query-replace tags—loop—continue ( く LF>) line ()- く LF>) (C-x ; ) X eval—expression x tags-aprops list—tags M-x kill—compiler M—X next—error (C—X M—X compile M-x gdb ISP et ags c-indent-level c-argdecl-indent echO- keystrokes (M-x く ESC>) c-continued-statement-offset c-brace-offset c-label-offset c-brace-imaginary-offset c-tab-always-indent c-auto—newline comment-start comment-end comment-column 128 領域を削除 マークを設定 領域をキルリングに保存 直前に削除した文字列をャンクする 現在ャンクしている文字列とその直前に削除された文字列との入替え 単純な文字列検索 ( 前方検索 ) 単純な文字列検索 ( 後方検索 ) インクリメンタル検索 ( 前方検索 ) インクリメンタル検索 ( 後方検索 ) 正規表現を使った検索 ( 前方検索 ) 正規表現を使った検索 ( 前方検索 ) 単純な文字列置換 問合せつき文字列置換 正規表現を使った文字列置換 正規表現を使った問合せつき文字列置換 C 言語に合わせてカレント行をインデント 改行とインデント 範囲を指定してインデント コメントを挿入 コメント行の継続 コメントを削除 コメントを書き始めるカラム位置を指定 タグ定義の検索 タグファイルの読込み 正規表現を使ったタグの検索 タグの置換 前回のタグコマンドの繰返し タグの一覧 正規表現にマッチするタグの表示 Lisp 式の評価 コンパイルの実行 ェラー行へ移動 コンパイルの中止 gdb の起動 タグファイルの作成 キー入力をエコーするまでの待ち時間 C の関数引数のインデント量 C のプロックのインデント量 C の if 文、 for 文などに続く文のインデント量 C の { が行頭にあった場合のインデント量 C のラベルのインデント量 C のプロックのインデント量 く TAB > キーで自動インデントするか否かのフラグ 自動改行するかのフラグ コメントの始まりの文字列 コメントの終りの文字列 コメントのインデント量 UNIX MAGAZINE 1991.3

3. UNIX MAGAZINE 1991年3月号

図 27 タグファイルの内容例 main . c , 11 mai Ⅱい ? 5 , 55 func . c , 11 funcC?5,57 func . h,24 #define OutMessage( ? 1 , 0 を実行してください ( ただし、 etags コマンドがパスに入っ ていることを確認してください ) 。これで、タグファイルが できました。ちょっと、 ls してみましよう。 % ls TAGS main . C func . C func . 新しく増えた、、 TAGS 〃がタグファイルで、図 27 はその 内容の一例です。通常、タグファイルには一般の関数とマ クロ関数が登録されますが、 etags コマンドにオプション -t を指定すると、、 typedef" で定義した型も登録されます。 デフォルト ( TAGS ) 以外のタグファイル名を指定したけ れは、一 f オプションを使って、、一 f タグファイル名〃と指定 して下さい。 MakefiIe を使ってタグファイルを作るのも 1 つの手でしよう。 第 2 段階ではこのタグファイルを使ってタグ機能を利用 しますが、以降の処理は Nemacs を起動してからおこな ってください。 、、 OutMessage" 関数を定義している場所 ( タグ定義 ) を捜 すには、 M—x find-tag find tag: OutMessage く CR> とします。このコマンドを使うとき、最初の 1 回だけはタ グファイル名を訊かれるので素直に答えてください。 Visit tags table : (default TAGS) ~/ く CR> こでは、デフォルトのタグファイル ( ホームディレクト リの下の、、 TAGS 〃 ) を使うのでく CR > だけを入力しました。 これで、タグファイルを読み込んだ後、タグの定義を捜し ます。続けて同しタグを検索するには、 UNIX MAGAZINE 1991.3 emacs 入門ー/▽ N C-u M-x find-tag としてください。ただし、タグファイルが旧いとうまく見 つけられないこともあります。その際には、作り直してか らもう 1 度タグファイルを読み込んでください。 M-x visit-tags-table Visit tags table : (default TAGS) -/<CR> とすれば、タグファイルか読み込めます。 こまで書いたら、これまでの類推で、 「正規表現は使えるの ? 」 とか 「置換はできないの ? 」 などの疑問が思い浮かぶでしよう。ご安心ください。 M—x tags-loop-continue ・ tags-search や tags-query- replace の繰返し M-x tags-query-replace ・タグの置換 M-x tags-search ・正規表現 ントやエコーの時間を変史する方法などはまだ説明してい プログラムを書くための準備は整ったのですが、インデ カスタマイズ グを見つけだして表示します ( 図 29 ) 。 のように正規表現を入力すれば、正規表現にマッチするタ Tag apropos (regexp) : M-x tags-apropos されます ( 図 28 ) 。また、 tags-apropos コマンドは、 とすれば、、 main. c 〃のなかで定義されたタグがすべて表小 List tags ()n file) : main. c M-x list-tags を使ってみましよう。 M—x tags-apropos M—x list-tags が用意されています。タグに関する情報を知りたいときは、 123

4. UNIX MAGAZINE 1991年3月号

emacs 入門 図 replace-regexp コマンドの実彳デ列 ( オリジナル・ファイル ) char *strcat()l , s2) strcmp()l , s2) int char *strdup(sl) 図ロ replace-regexp コマンドの実彳デ列 その一 図絽 c har int char 図円 char i nt char replace-regexp コマンドの実彳デ列 *strcat(s1,s2) my—strcmp(s1,s2) *my-strdup(sl) replace-regexp コマンドの実彳デ列 *strcat(srcl ,dstl) strcmp(src2,dst2) *strdup(sl) その 2 その 3 1nt 土 nt int strcat()l ,s2) strcmp()l ,s2) strdup(sl) などを選択してください。く SPC 〉やく DEL 〉を入力すると 次の文字列へ移動するので、同し要領でどんどん指定して ください。ファイルの最後まで移動すれば、置換コマンド は終了します。 そうそう、いちはん重要な操作を忘れていました。置換 処理中にどんな操作を選べるかを知りたければ、 その場でヘルプメニューを表示 C-h を入力してください。 以 - ヒで、置換コマンドはおしまいです。ん ? まだなにか 忘れてるよーな・・ そうそう、説明した 2 種類の置換コマンドのバリエーシ ョンとして、正規表現が使える置換コマンドもありました。 あえて名づけるなら、、、おてがるなんでも置換〃と、、おたす ねなんでも置換〃となるでしようか。、、おてがるなんでも置 換〃は、 M-x replace-regexp Rep1ace regexp: 正規表現 Rep1ace regexp 正規表現 vith: 置換後の文字列 とすれは、正規表現に一致した文字列を置換後の文字列に とすると、図 16 が図 17 のように変更されます。ただし、 この例では置換後の文字列が固定されてしまいます。次の 例を見てください。 M—x replace-regexp Rep1ace regexp: str. *P く CR> Rep1ace regexp str. *p く CR> vith : my_\& 置換後の文字列に、、 \ & 〃が含まれています。この 2 文字 の組合せには未な意味があり、 \ & の部分は検索で一致し た文字列本に置き換えられます。したがって、図 16 に対 して上に示した置換を実行すると図 18 のように変更され ます。 でも、これだけしやまだ十分に使いやすいとはいえませ んよねえ。というのも \ & だけでは、 ・もとの文字列よりも短い文字列の指定 一致した文字列の一部分だけを変更 ができないのですから・・ ルに対して、 ・。そこで、今度は図 19 のファイ 変更します。 たとえは、 M—x replace-regexp Rep1ace regexp: . *str く CR> RepIace regexp -c . *Str with: int M—x replace-regexp 116 str く CR> strcat(srcl,dstl) を strcat(dstl,srcl) に strcmp(src2,dst2) を strcat(dst2,src2) に strdup(sl) は変更しない という置換をしてみましよう ( ちょっと複雑ですが頑張っ て追ってください ) 。 UNIX MAGAZINE 1991.3

5. UNIX MAGAZINE 1991年3月号

図 20 replace-regexp コマンドの正夫見表王見の / ヾート分け ↓ ↓ ↓ 置換対象となる文字列 ( 正規表現 ) は、、、 \ ( 〃と、、 \ ) 〃で囲 まれた 3 つのパートとその他の部分に分かれています ( 図 20 ) 。また、、、置換後の文字列〃に出てくる、、 \ 数字という のように指定してください。 Query replace regexp 正規表現臂土 t 五 : Query replace regexp : 正規表現 M—x query-replace-regexp は何番目のパートかを指定しています。つまり、 / 置換後の文字列 UNIX MAGAZINE 1991.3 いれは、おいソースの内容に触れなくてすみますものわ。 4 読む側は第読みにくい″と叫び、書いた側も“これが美しいんや″と反論して C のインデントにはいろいろなスタイルがありますが、 インデント についてお話します。 ・タグ機能 見つけだすための仕組み、 そして、最後にファイル中で関数を定義している場所を です。 ・コメント と向上します。そこで、 2 番目のテーマは、 コメントさえあれば、ソースの可読性 ( 読みやすさ ) はぐっ 忘れてはいけないのがコメントです。適切な場所に適切な について話します。また、ソースの読みやすさという点で ・インデント そこで、ます、 か 4 に文句をつけやすいのも、インデントではないでしよう インデントの方法です。また、人のプログラムを読むとき きました。プログラムを書いていて、とかく気になるのが やっと、 C 言語用のコマンドについての説明にたどり着 敵を知り、己を知れば emacs 入門 こまでくれば、、、おたすねなんでも置換〃の動き方も推 されます。 にそれぞれ置き換えられ、最初に示したような置換が実行 \ 3 は 3 番目の \ (. * \ ) と一致した文字列 \ 2 は 2 番目の \ (. * \ ) と一致した文字列 \ 1 は最初の \ (. * \ ) と一致した文字列 測できますね。これも、 れるかクということで、 C の場合には、 インデントの対象とは、、どのような場所でインデントさ に分けて説明してゆきましよう。 ・インデント・コマンド ・インデントの対象 などです。もっと具体的に知るために ・ if 文に続く文はインデント { } の中身は適宜インデント します。たとえは、 と、インデントの対象として必要に応して特殊な処理を施 Nemacs ではによろ括弧 ( { と } ) やラベル、 if 文などがある ・・ヒミコロン および、特殊な場合の、 ・関数の引数 ・ if 文、 for 文、 while 文、 do 文 ・ case 文とラベノレ { } の前後 方法については「カスタマイズ」の項に譲るとして、 変更することもできます。 Lisp 変数の値を設定・変更する ーが Lisp 変数の値を変史してインデント量を自分好みに 数のデフォルト値に従ってインデントされますが、ユーザ ようになっています。つまり、何も指定しなければ Lisp 変 は、対応する変数の値を指定することによって制御できる がインデント処理の対象になります。実際のインデント量 117

6. UNIX MAGAZINE 1991年3月号

ennacs 入門 図 9 検索コマンドの実彳デ列 ( オリジナル・ファイル ) 図 * C string library. * / char *strcat(s1,s2) strcmp(s1,s2) i nt char *strdup(sl) 検索コマンドの実彳デ列 (search-backward) 図Ⅱ string @lbrary. * / *strcat(s1,s2) char strcmp(s1,s2) xnt *strdup(sl) char 図田検索コマンドの実彳デ列 (search-forward) 図に検索コマンドの実行例 (isearch-forward) 図 * C stri g library. * / / * C string library. * / char *strcat(s1,s2) char *strca (s1,s2) strcmÅOs1 ,s2) int int strc P (s1,s2) char *strdup(sl) char *strdup(sl) 文字へカーソルが移動します。 1 ) 単純な文字列検索 今度は逆向き「検索してみましよう。 図 10 のカーソル 2 ) インクリメンタル検索 位置で、、 library を捜すには、 3 ) 正規表現を使った文字列検索 M-x search- backward となります。 Search backvard : library く CR> 1 ) は人間も計算機も何も考えなくてすむという意味で 、、ほいほい検索〃と名づけましたが、 ex やⅵにもある普通 と入力します。図 11 のように、、 library" の最初の文字に の文字列検索です。 カーソルが移動しましたか ? 2 ) の、、いけいけ検は Nemacs の標準的な検索コマン これらのコマンドは、 ドですが、なかなか使いやすくなっています。 C-s く ESC> 文字列く CR> 3 ) は、正規表現を利用して検索できるようにしたコマン C-r く ESC> 文字列く CR> ドです。機能としては、 ex やⅵの正規表現を使った検索 コマンドと、、いけいけ検索〃をドッキングさせたようなも で実行することもできます。 のと思ってください。 2 番目は、、、いけいけ検索〃の実験です。これを使って文 さっそく、それぞれの検索コマンドを紹介しましよう。 字列を捜すには、 検索コマンドの動きを知るには、実際に試してみるのがい 1 ) 検索コマンド ( C ー s ) を入力 ちばんです。そこで、まず Nemacs を起動して図 9 のよう 2 ) 続いて検索したい文字列を入力 なファイルを用意してください。これからしばらくは、 のファイルを使って検索コマンドの実験をします。 します。このように書くと、 最初は、、、ほいほい検索〃から。このコマンドの使い方は 「なんだ、さっきと同ししゃないか」 ごくオーソドックスで、 って思ったんしゃありませんか ? いえいえ、とんでもな 1 ) search-forward コマンドを実行し、 、、ほいはい検索〃と同しだなんて、、、いけいけ検索〃さ 2 ) 検索したい文字列を入力して、 んに対して失礼です。、、いけいけ検索〃では検索中にカーソ 3 ) 最後にく CR 〉を入力すると検索を開始 ルがダイナミックに移動し、とても使いやすくなっていま です。図 9 のファイルの先頭にカーソルがあった場合、文 す。 字列、、 strcmp" を捜すには、 これ以上は文章では説明か難しいので、図 9 を使って実 例を見てみましよう。ます、 C-s と入力すると、エコー行 M ー x search- forward Search: strcmp く CR> とします。これで図 10 のように文字列、、 strcmp" の次の search- forward search-backward し】 l-search: 112 UNIX MAGAZINE 1991.3

7. UNIX MAGAZINE 1991年3月号

FreeSoftware の世界 done PMake では、変数の取扱いがいろいろと拡張されてい を使うときには注意が必要です。 ェルが実行されることを前提に作られている Makefile すると次のコマンドにも影響するので、 1 行ごとに別のシ に書くことができます。ただし、ディレクトリを変えたり のシェルに渡されるため、こんな面倒なことはせすに普通 した。これに対し、 PMake ではすべてのコマンド行が 1 つ というふうに 1 行にまとめなけれはならす、非常に面倒で VARIABLE ? = value 列が代入されます。また、 と書けは、 VARIABLE という変数に value という文字 VARI ABLE = value ます。ますは普通に、 が含まれていても展開されすにそのままのかたちで代入さ 有益です。通常は、代入される文字列のなかに変数の参照 ます。これは、システムのデフォルトに追加したいときに と書けは、それまでの値に value という文字列が追加され VARIABLE + = value 義する際に便利です。また、 で、共通に使用するファイルのなかでデフォルトの値を定 が、 PMake は別の MakefiIe をインクルードできるの ていないときにかぎって代入が起こります。後で述べます と書くと、 VARIABLE という変数がそれまでに定義され VARIABLE : = $ ( F00 ) れます。これを、 変数に C のソースプログラムのファイルがあるとしましょ 変数の参照にも技があります。たとえは、 SRCS という と書くと、代入時に変数の展開がおこなわれます。 これに対応するオプジェクトファイルは a. 0 、 b. 0 、 c. 0 ですが、これをもう 1 度定義するのは面倒です。この場合 は、 OBJS = $(SRCS :S/. c$/. o/g) のようにすれは、 $ ( SRCS ) のなかの全部の . c を . 0 に変換 できます。変数名の次に、、・〃があるとき、それに続く 1 文字はどのような処理をするかを表します。上の例の S は 置換を意味します。あるパターンにマッチする要素だけを 取り出したいときには M を使って、 HEADERS = $(SRCS:M*\. h) のように指定します。ここでは正規表現も使えます。マッ チしなかった要素だけを取り出したいときには、 M の代わ りに N を使います。 Csh の変数と同様に T 、 H 、 E 、 R な ども使えて、まとめると次のようになります。 $ ( 〇 BJS) $ ( 〇 BJS:T) $( 〇 BJS:H) $( 〇 BJS:E) $ ( 〇 BJS:R) .. /lib/a. 0 b /usr/lib/libm. a a . 0 b lim . a .. /lib/usr/lib .. /lib/a b /usr/lib/libm . 0 . a SRCS = a. C b . C C . C UNIX MAGAZINE 1991.3 Make と異なり、 PMake は変換できない変数があると それをそのままにしておきます。ですから、シェルの変数 が Make に解釈されないようにエスケープする必要はな いわけです。 Make と同しように、知らない変数は空文字 列に変換するように指定することもできます。 ローカル変数 各ターゲットごとに定義されるローカル変数があります。 すべてのソースです。 ALLSRC( 〉 ) ットよりも新しいソースが入ります。 ターゲットを out-of-date にするソース、つまりターゲ OODATE ( ? ) 作られるターゲットの名前です。 TARGET(@ ) 57

8. UNIX MAGAZINE 1991年3月号

1 2 4 5 7 8 9 10 11 12 Daemons and Dragons while ( くエ N > ) $fieldcount = 0 ; die "Can' t open master. spec't if (open(IN, "master. spec") ! = 1 ) { $fieldcount + = $ ー [ 0 ] ; $start{$- [ 2 ] } = $fieldcount ; split (/\t/) ; chop ; if (substr($-, 0 , 1 ) eq " ) { next; } 13 } 1 sub field { 除く。 9 行目では、標準的な awk の機能を使って読み込ん / 込まれる ) 。 7 行目でコメントを、 8 行目で改行文字を取り を行単位で処理している ( 処理の対象となる行は $ ーに読み 文字目にあるか ) を示す。次の while ループでは、ファイル 列の行全体からみたオフセット ( その文字列が行頭から何 初期化をおこなっている。この変数は、各行に現れる文字 法で ) オープンしている。 4 行目では、変数 $fieldcount の 最初の 4 行で、入力のためのファイルを ( かなり安全な方 連想配列にれもフィールド名で参照 ) である。 名で参照 ) 、 @ start はあるフィールドの始まる場所を示す る。 @ len はフィールド長についての連想配列 ( フィールド この 14 行からなるルーチンは、 2 つの配列を用いてい 14 close (IN) ; 、ゝだ行をタブを目印にしてフィールドごとに分けている ( こ の部分については次号で解説する ) 。デフォルトでは、 split 関数は各要素を配列@ ーに格納する。次の 3 行は、各フィー ルドの位置を見失わないように番号の割当てをおこなって いる。 こまでくれば、ある行の任意フィールドにアクセスす るのは簡単である。この処理をおこなう関数は、ある入力 行にのルーチンではつねに $ ーで示される ) から文字列を 返す。この関数に莎える引数は 1 つで、フィールド名 ( 前述 の master. spec 中の〃の ) である。引数は、関数 field この関数 field は、次のようになっている。 で配列@ ーの最初の要素として格納される。 2 3 4 5 6 1 。 c 訌 ($out) ; die "lnvalid field request $ ー [ 0 ] " if ($start{$- [ 0 ] } eq " " ) ; return $out ; 2 行目では、ローカル変数 $ out のセットアップをおこな っている。型の情報については記述されていないが、これ は変数宣言の一種である。 3 行目ではフィールド名が有効 か ( 定義されているか ) どうかをチェックしており、 でに紹介した方法とは異なる形式で書かれている。 示した方法では、実行時には 1 つの master. spec ファイ ルしか読み込んでいないという点に注思してほしい。そし て、 5 行目で関数の結果を返す。 今回は、 perl のさわりの部分をざっとみてきた。次号で は正規表現やシステムコール、ディレクトリのアクセス、 サプルーチン、関数、 dbm データベースおよびいくっかの UNIX MAGAZINE 1991.3 例について解説する。 PerI を学び、簡単な例をいくつか試してみるとよい。き っと病みつきになるであろう。 ■ Rob Kolstad ーマや管理者としての体験などがあれば、 kolstad@ sun. com または システム管理のさまざまな側面について調査している。扱ってほしいテ UNIX REVIEW 1990 年 5 月号より 「 Perl: The Super-Language 」 uunet!sun!kolstad まで送ってはしい。 73

9. UNIX MAGAZINE 1991年3月号

度 128M バイト / SPARC station 330 用 Mr. Phil Schwartz 開発技術者 SNME-330 SNME-330 CIearpoint SNME-330 最新の 4M ビット DRAM 使用の シングル・ポードデザインによる 卓越した高信頼性 SNME-3E SNME-350 SNXSM/S4 SNXSM/SI 目 第 」・ SNXRAM CPSM-36A Sun コンパチカレ製品トーダレラインアッフ / SNME ー 330 はクリアホイントが最新技 術によって開発した S 以 RC station 及び SPARC server 用の Sun コンパチプルの メモリーです。メモリー容量はシング ルポードで 8 、 16 、 32 、 64 、 128MB の 5 種類用意されております。 8 、 16 、 32MB ポードは表面実装の IM ビ ット DRAM を使用しローコストを実現 64 、 128MB ホードは最先端の 4M ビット DRAM を使用し、最高密度のシングル ポード設計です SUN コンパチプルメモリー ■ SNXSM シリーズ 1 又は 4M ビット SIMM0 3 / 60 , 3 / 80 , 4 / 110 , SPARC station 1 , 1 十 , 330 , 370 , 390 ; SPARC engine 1 十 , 330 用 •CPSM-36A 4MB SIMM0 SUN SPARC SLC 用 ÄSNXRAM 4MB-28MBOSUN 3 / 75 , 3 / 110 , 3 / 140 , 3 / 150 , 3 / 160 , 3 / 180 用 ■日本正規代理店ー DEC , SUN , HP, 旧 M,APOLLO メモリー コンビュータタイナミックス株式会社 〒 160 東京都新宿区西新宿 7-5-10 第ニミゾタピル TEL. 03-3366-9741 FAX. 03-3366-9800 ※ SLJN. SPARC, SLC はサンマイクロシステムズ社の登録商標てす。 USNX2RAM 8 , 16 , 32MB0 SUN 3 / 200 , 3 / 400 , 4 / 200 用 ZSNME-350 4 , 8MB0 SUN 3 / 50 用 ESNME-370 24 , 48 , 96 , 192MB 。 SUN 4 / 370 用 ÆNXSM/S4 SPARC stationIPC 用 SPARC station 2 用 CLEARmlNT AUTHORIZED DISTRIBUTOR

10. UNIX MAGAZINE 1991年3月号

DAEM 〇 NS & DRAG 〇 NS の スーノヾ一言語 Pe 「旧 ) •Rob Kolstad システム管理者は、 UNIX のすべてのツール ( awk 、 sed 、シェルスクリプトなど。そして、もちろん C ) に そのサイトでもっとも通している場合が多い。これらのツ ールはそれぞれ個性的で、長所と听をあわせもっている。 patch の作者として有名な Larry Wall 氏が、素晴らし いツールを開発した Perl と呼ばれるインタープリタ型の 言語である。この名称は、、、 Practical Extraction and Report Language" の略で、 C や sed 、 awk 、シェル・プ ログラム、データベース・アクセス、テキスト操作などの 優れた機能をなんでもこなせる巨大な言語にまとめあげた ようなものである。 今号から 3 回にわたり、 PerI の概要をみていくことにす こでは、現時点で私がもっとも有益だと考える PerI る。 のサプセットについて解説する。 PerI の曖昧な構造が気に ならないわけではないが、今回はその点には触れない。こ の言語のパワーを大まかに擱むために、リファレンス・マ Perl 業にうってつけの機能を数多く備えている。 perl は、管理につきものの臨機応変なプログラミング作 ニュアルにも目をとおしておいてほしい。 UNIX MAGAZINE 1991.3 ・インタープリタ型なので、多くのアーキテクチャに対応 な技を使わなくてもよい。 ・はかのツールに比べて多機能であり、ハックしたり巧妙 ・ sed や awk に比べ、プログラム実行が容易である。 素早くおこなえる。 ・インタープリタ型なので、プログラムを書き足す作業が きる。 ・はかの UN Ⅸのツールとよく似ており、簡単に習得で from UNIX REVIEW できる。 ・はとんど制約がない ( たとえば、文字列の長さは無限長が 許される ) 。 ・ UNIX の、、ツールとフィルタ〃の考え方によくマッチし ている。 ・料である。 PerI は簡単に入手できる。 ニュースグループ comp. sources. unix でひろく配布されているほか、アーカイプ での入手も可能である。アーカイプ・サーバーには、 uunet. uu. net [ 192.48.96. 幻および tut.cis.ohio-state.edu PerI には、下記のように 3 つの基本的なスカラのデータ Perl で級うデータ [ 128.148.8.60 ] の 2 つがある 1 。 3 ) 文字列型 0 は false 、 1 は true を表す。 2 ) 論理型 ー 7.5 、 1 . 8e9 など ) 。 整数表現と浮動小数点表現が可能である ( 0 、 3.14159 、 1 ) 数値型 型がある。 67 ftp.ics.osaka-u.ac.jp [ 133.1.12.30 ] でアーカイプされている。 ーを捜してみてはしい。すくなくとも、 comp ・ souces. unix で配布されたものは ている。ここに示したサイトに直接 ftp をする前に、国内のアーカイプ・サーバ 1 [ 訳注 ] 国内の anonymousftp サイトの多くで Perl の最新版をアーカイプし ない ('Red House')0 なかの変数を展開し、単一引用符で囲んだ場合は展開し 二重引用符で囲むと ("There are $count pigs. " ) その