diff options
author | Kazuo Horikawa <horikawa@FreeBSD.org> | 2002-12-08 21:36:05 +0000 |
---|---|---|
committer | Kazuo Horikawa <horikawa@FreeBSD.org> | 2002-12-08 21:36:05 +0000 |
commit | a03a6632006f20d92d1a69114e06c110db1f2dad (patch) | |
tree | 4d8ab41fa94d5b58bb46768f33abc74d504d418a | |
parent | cd110df402fdc4ccb08e1ac64c218290878e135d (diff) |
Notes
-rw-r--r-- | ja_JP.eucJP/man/man1/Makefile | 38 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/a2p.1 | 218 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/cpp.1 (renamed from ja_JP.eucJP/man/man1/cccp.1) | 2 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/cu.1 | 324 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/gawk.1 | 2571 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/h2ph.1 | 44 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/ipnat.1 | 53 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/key.1 | 52 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/keyinfo.1 | 64 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/keyinit.1 | 95 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/mcon.1 | 171 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/perl.1 | 5936 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/pkg_update.1 | 84 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/rdist.1 | 449 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/skey.1 | 88 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/uuconv.1 | 55 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/uucp.1 | 218 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/uulog.1 | 87 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/uuname.1 | 48 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/uupick.1 | 73 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/uustat.1 | 555 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/uuto.1 | 41 | ||||
-rw-r--r-- | ja_JP.eucJP/man/man1/uux.1 | 265 |
23 files changed, 65 insertions, 11466 deletions
diff --git a/ja_JP.eucJP/man/man1/Makefile b/ja_JP.eucJP/man/man1/Makefile index 1146519654..b066b8d10b 100644 --- a/ja_JP.eucJP/man/man1/Makefile +++ b/ja_JP.eucJP/man/man1/Makefile @@ -1,6 +1,5 @@ # $FreeBSD$ -MAN1 = a2p.1\ - addftinfo.1\ +MAN1 = addftinfo.1\ addr2line.1\ afmtodit.1\ apply.1\ @@ -20,7 +19,6 @@ MAN1 = a2p.1\ cap_mkdb.1\ cat.1\ catman.1\ - cccp.1\ cdcontrol.1\ checknr.1\ chflags.1\ @@ -44,13 +42,13 @@ MAN1 = a2p.1\ compress.1\ cp.1\ cpio.1\ + cpp.1\ crontab.1\ crunchgen.1\ crunchide.1\ ctags.1\ ctm.1\ ctm_rmail.1\ - cu.1\ cursor.1\ cut.1\ cvs.1\ @@ -93,7 +91,6 @@ MAN1 = a2p.1\ ftp.1\ g711conv.1\ gasp.1\ - gawk.1\ gcc.1\ gcore.1\ gdb.1\ @@ -115,7 +112,6 @@ MAN1 = a2p.1\ groups.1\ gzexe.1\ gzip.1\ - h2ph.1\ head.1\ hexdump.1\ host.1\ @@ -132,6 +128,7 @@ MAN1 = a2p.1\ ipcrm.1\ ipcs.1\ ipftest.1\ + ipnat.1\ ipresend.1\ ipsend.1\ iptest.1\ @@ -142,9 +139,6 @@ MAN1 = a2p.1\ kcon.1\ kdump.1\ kenv.1\ - key.1\ - keyinfo.1\ - keyinit.1\ keylogin.1\ keylogout.1\ kill.1\ @@ -188,7 +182,6 @@ MAN1 = a2p.1\ makewhatis.1\ man.1\ manpath.1\ - mcon.1\ md5.1\ merge.1\ mesg.1\ @@ -230,7 +223,6 @@ MAN1 = a2p.1\ patch.1\ pawd.1\ pax.1\ - perl.1\ pfbtops.1\ pic.1\ pkg_add.1\ @@ -238,7 +230,6 @@ MAN1 = a2p.1\ pkg_delete.1\ pkg_info.1\ pkg_sign.1\ - pkg_update.1\ pkg_version.1\ pr.1\ printenv.1\ @@ -255,7 +246,6 @@ MAN1 = a2p.1\ rcsfreeze.1\ rcsintro.1\ rcsmerge.1\ - rdist.1\ readelf.1\ realpath.1\ refer.1\ @@ -274,7 +264,6 @@ MAN1 = a2p.1\ rusers.1\ rwall.1\ rwho.1\ - s2p.1\ sasc.1\ scon.1\ scp.1\ @@ -287,7 +276,6 @@ MAN1 = a2p.1\ sh.1\ shar.1\ size.1\ - skey.1\ sleep.1\ smbutil.1\ sockstat.1\ @@ -342,15 +330,7 @@ MAN1 = a2p.1\ uptime.1\ usbhidctl.1\ users.1\ - uuconv.1\ - uucp.1\ uuencode.1\ - uulog.1\ - uuname.1\ - uupick.1\ - uustat.1\ - uuto.1\ - uux.1\ vacation.1\ vgrind.1\ vi.1\ @@ -383,7 +363,8 @@ MAN1 = a2p.1\ zmore.1\ znew.1 -MLINKS= builtin.1 alias.1 builtin.1 alloc.1 builtin.1 bg.1 builtin.1 bindkey.1 \ +MLINKS= builtin.1 alias.1 builtin.1 alloc.1 builtin.1 bg.1 builtin.1 bindkey.1 \ + builtin.1 bind.1 \ builtin.1 break.1 builtin.1 breaksw.1 builtin.1 builtins.1 \ builtin.1 case.1 builtin.1 cd.1 builtin.1 chdir.1 builtin.1 command.1 \ builtin.1 complete.1 \ @@ -415,17 +396,16 @@ MLINKS= builtin.1 alias.1 builtin.1 alloc.1 builtin.1 bg.1 builtin.1 bindkey.1 \ builtin.1 while.1 MLINKS+=ed.1 red.1 MLINKS+=test.1 '[.1' -MLINKS+=gawk.1 awk.1 MLINKS+=gcc.1 cc.1 MLINKS+=gcc.1 c++.1 MLINKS+=gcc.1 g++.1 MLINKS+=gcc.1 CC.1 -MLINKS+=cccp.1 cpp.1 MLINKS+=grep.1 egrep.1 MLINKS+=grep.1 fgrep.1 MLINKS+=grep.1 zgrep.1 MLINKS+=grep.1 zegrep.1 MLINKS+=grep.1 zfgrep.1 +MLINKS+=grep.1 bzgrep.1 grep.1 bzegrep.1 grep.1 bzfgrep.1 MLINKS+=gzip.1 gunzip.1 MLINKS+=gzip.1 zcat.1 MLINKS+=gzip.1 gzcat.1 @@ -454,9 +434,11 @@ MLINKS+=lex.1 flex++.1 MLINKS+=lex.1 lex++.1 MLINKS+=mail.1 Mail.1 MLINKS+=mail.1 mailx.1 +MLINKS+=nawk.1 awk.1 MLINKS+=passwd.1 yppasswd.1 MLINKS+=printenv.1 env.1 MLINKS+=rtld.1 ld-elf.so.1.1 +MLINKS+=tip.1 cu.1 MLINKS+=tput.1 clear.1 MLINKS+=tset.1 reset.1 MLINKS+=vi.1 ex.1 @@ -471,7 +453,9 @@ MLINKS+=kbdmap.1 vidfont.1 MLINKS+=rtprio.1 idprio.1 MLINKS+=cksum.1 sum.1 MLINKS+=ktrace.1 trace.1 -MLINKS+=uuencode.1 uudecode.1 +MLINKS+=uuencode.1 uudecode.1 \ + uuencode.1 b64encode.1 \ + b64encode.1 b64decode.1 MLINKS+=ncal.1 cal.1 MLINKS+=enigma.1 crypt.1 MLINKS+=ln.1 link.1 diff --git a/ja_JP.eucJP/man/man1/a2p.1 b/ja_JP.eucJP/man/man1/a2p.1 deleted file mode 100644 index 4ab0d0c7de..0000000000 --- a/ja_JP.eucJP/man/man1/a2p.1 +++ /dev/null @@ -1,218 +0,0 @@ -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/a2p.1,v 1.5 2001/05/14 01:07:20 horikawa Exp $ -.rn '' }` -''' %Header: /home/ncvs/src/gnu/usr.bin/perl/x2p/a2p.1,v 1.1.1.1 1994/09/10 06:27:55 gclarkii Exp % -''' -''' %Log: a2p.1,v % -''' Revision 1.1.1.1 1994/09/10 06:27:55 gclarkii -''' Initial import of Perl 4.046 bmaked -''' -''' -.\" Revision 1.1.1.1 1993/08/23 21:30:10 nate -.\" PERL! -.\" -''' Revision 4.0 91/03/20 01:57:11 lwall -''' 4.0 baseline. -''' -''' Revision 3.0 89/10/18 15:34:22 lwall -''' 3.0 baseline -''' -''' Revision 2.0.1.1 88/07/11 23:16:25 root -''' patch2: changes related to 1985 awk -''' -''' Revision 2.0 88/06/05 00:15:36 root -''' Baseline version 2.0. -''' -''' -.de Sh -.br -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp -.if t .sp .5v -.if n .sp -.. -.de Ip -.br -.ie \\n.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -''' -''' Set up \*(-- to give an unbreakable dash; -''' string Tr holds user defined translation string. -''' Bell System Logo is used as a dummy character. -''' -.tr \(*W-|\(bv\*(Tr -.ie n \{\ -.ds -- \(*W- -.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -.ds L" "" -.ds R" "" -.ds L' ' -.ds R' ' -'br\} -.el\{\ -.ds -- \(em\| -.tr \*(Tr -.ds L" `` -.ds R" '' -.ds L' ` -.ds R' ' -'br\} -.TH A2P 1 LOCAL -.SH 名称 -a2p - Awk から Perl へのトランスレータ -.SH 書式 -.B a2p [options] filename -.SH 解説 -.I a2p -はコマンドラインで指定された (あるいは標準入力からの) awk スクリプトを -とり、同等の働きをする -.I perl -スクリプトを標準出力に出力します。 -.Sh オプション -オプションには以下のものがあります: -.TP 5 -.B \-D<number> -デバッグフラグをセットします。 -.TP 5 -.B \-F<character> -awk スクリプトが常にこの -F スイッチ付きで実行されることを指定します。 -.TP 5 -.B \-n<fieldlist> -入力を分割して配列に格納する必要がない場合、 -入力フィールドの名前を指定します。 -例えば、パスワードファイルを処理する awk スクリプトを変換する場合、 -このように指定します: -.sp - a2p -7 -nlogin.password.uid.gid.gcos.shell.home -.sp -フィールド名の区切りには任意のデリミタが使用できます。 -.TP 5 -.B \-<number> -a2p は、入力が常に指定した数のフィールドから成っていることを仮定します。 -.Sh 考察 -a2p は人間と同じぐらいうまい変換はできませんが、 -大抵の場合はそこそこうまく処理します。 -場合によっては、 -生成された perl スクリプトを吟味し、少し手を加えたいと思うことも -あるでしょう。 -以下にいくつかの場合を、順不同で説明します。 -.PP -文字列を表す式のまわりに int() を付け、 -数値として解釈されるようにする awk イディオムが -あります (その引数は常に整数型なのですが)。 -これは一般に perl では不要ですが、 -a2p は引数が常に整数となるかどうか判断できないので、 -このイディオムはそのまま残します。 -ユーザはこれを取り除くことができます。 -.PP -perl では数値比較と文字列比較は区別されています。 -awk ではどちらにも同じ演算子が用いられ、 -実行時にどちらの比較を行うかが決定されます。 -この点で a2p は awk エミュレーションを完全には行おうとしません。 -その代わり、a2p はどちらの種類の比較を行おうとしているのか推測します。 -これはほとんどの場合正しいものですが、だまされることもあります。 -推測を行った部分には \*(L"#???\*(R" というコメントが付与されますので、 -それらの部分を調べ、中身をチェックすべきです。 -ユーザは、少なくとも一度は \-w スイッチ付きで perl を走らせるとよいでしょう。 -こうすると、eq を使うべきところで == を使っている場合に警告を受けます。 -.PP -存在しない配列要素でも、単にそれを参照しただけで存在するようになるか、 -という点で、perl は awk の動作をエミュレートしようとしません。 -何らかの理由で、このメカニズムに依存して後続の for...in のために -ヌルエントリを作成しようとする場合、 -perl ではヌルエントリは作成されません。 -.PP -a2p が、(Fld1, Fld2, Fld3...) のような、変数のリストへの代入を行う行を -分割する場合、 -上に述べた \-n オプションを用いて再度 a2p を走らせた方がいいかもしれません。 -これにより、スクリプト内のフィールドに名前を付けます。 -そうではなく、分割して配列に格納する場合、 -その分割はおそらくどこかでフィールド数を参照しているでしょう。 -.PP -awk の exit ステートメントは必ずしも exit せず、 -END ブロックがあればそこへ処理が移ります。 -ある条件下で END ブロックをバイパスするような細工を END ブロックに -仕掛けてある awk スクリプトは、 -END ブロック内の条件文を取り除き、perl スクリプトから直接 exit するように -修正することで簡単化できます。 -.PP -perl には 2 種類の配列、すなわち数値でインデックスされる配列と連想配列とが -あります。 -通常、awk の配列は連想配列に変換されますが、 -もしそのインデックスが常に数値であるとわかったら、 -配列添字の {...} を [...] に変更できます。 -連想配列に対する繰り返し処理は関数 keys() を用いて行われますが、 -数値配列に対してはそうではありません。 -問題となっている配列の繰り返し操作を行うあらゆるループ構造を -修正する必要があるかもしれません。 -.PP -awk は起動時、OFMT の値が %.6g であると仮定しています。 -perl でこれに相当する変数 $# は、初期値として %.20g を持っています。 -OFMT のデフォルト値を用いる場合は $# を明示的に設定して下さい。 -.PP -awk スクリプトでは、行の先頭付近で行分割 (split) 操作が暗黙的に -繰り返されます。 -場合によっては、全体レコードをテストする何らかの条件文より下に -これを移動させることができます。 -そうすることで無用な行分割処理を避けることができます。 -.PP -美的理由から配列の基底 $[ を元々の 1 から perl でのデフォルトである 0 に -変更したいこともあるでしょう。 -しかし、全ての配列添字式だけでなく、全ての substr() および index() 関数も -適合するように修正しなければならないことを忘れないで下さい。 -.PP -"# awk は馬鹿だからこうやって工夫しています" といった気の利いたコメントは、 -そのまま修正されずに渡されます。 -.PP -awk スクリプトはしばしばシェルスクリプトに埋め込まれ、 -awk の入出力がパイプで接続されます。 -こういったシェルスクリプトのラッパも perl スクリプトに取り込める場合が -かなりあります。 -perl なら入出力パイプを開始でき、 -awk が自分ではできなかった他の処理も行うことができるからです。 -.PP -特殊変数 RSTART および RLENGTH を参照するスクリプトは、 -これらの変数を定義するパターン照合のスコープの中で参照されている限り、 -変数 $`, $&, $' を参照することで簡単化できる場合がかなりあります。 -.PP -生成された perl スクリプトには、 -getline および print に関する awk の意味規則に対処するための -サブルーチンが定義されている場合があります。 -a2p は通常、効率よりも正確さを選ぶからです。 -ほとんどの場合、ご丁寧に意味規則に対処してくれるサブルーチンを捨てて、 -もっと効率的なコードに書き換えることができます。 -.PP -効率を上げるために、 -サブルーチンで最後に実行される return ステートメントから -キーワード return を取り除くことができる場合があります。 -a2p は最も一般的な場合は見つけますが、 -稀にある埋め込まれたブロックを解析したりしません。 -.PP -ARGV[0] は $ARGV0 に変換されますが、ARGV[n] は $ARGV[$n] に変換されます。 -ARGV[0] を含めて繰り返し処理を行おうとするループは、 -うまくいきません。 -.SH 環境変数 -a2p は環境変数を参照しません。 -.SH 作者 -Larry Wall <lwall@jpl-devvax.Jpl.Nasa.Gov> -.SH 関連ファイル -.SH 関連項目 -perl perl コンパイラ/インタプリタ -.br -s2p sed から perl へのトランスレータ -.SH 診断 -.SH バグ -実行時にオペランドを調べることで、文字列演算か数値演算かの選択で awk の -エミュレーションを行うことは可能でしょうが、 -プログラムは肥大し、非効率的になるでしょう。 -なお、a2p の推測はほとんど常に正しく行われます。 -.PP -awk 文法ツリー用の領域は現在のところ静的に確保しており、 -不足する可能性があります。 -.rn }` '' diff --git a/ja_JP.eucJP/man/man1/cccp.1 b/ja_JP.eucJP/man/man1/cpp.1 index 7ab3cd9b35..03605f664c 100644 --- a/ja_JP.eucJP/man/man1/cccp.1 +++ b/ja_JP.eucJP/man/man1/cpp.1 @@ -2,7 +2,7 @@ .\" Copyright (c) 1991, 1992, 1993 Free Software Foundation -*- nroff -*- .\" See section COPYING for conditions for redistribution .\" -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/cccp.1,v 1.8 2001/05/14 01:07:21 horikawa Exp $ +.\" $FreeBSD$ .\" .TH cpp 1 "April 30, 1993" "FreeBSD" "GNU Tools" .SH 名称 diff --git a/ja_JP.eucJP/man/man1/cu.1 b/ja_JP.eucJP/man/man1/cu.1 deleted file mode 100644 index 614e9ab71d..0000000000 --- a/ja_JP.eucJP/man/man1/cu.1 +++ /dev/null @@ -1,324 +0,0 @@ -.\" %FreeBSD: src/usr.bin/tip/tip/tip.1,v 1.18 2002/07/19 14:10:35 markm Exp % -.\" $FreeBSD$ -.TH cu 1 "Taylor UUCP 1.06" -.SH 名称 -cu \- 別のマシンと接続する -.SH 書式 -.B cu -[ options ] [ system | phone | "dir" ] -.SH 解説 -.I cu -コマンドは、他のシステムを呼び出し、ダイヤルイン端末として働きます。 -本コマンドは、 -エラーチェックを行わない、 -簡単なファイル転送プログラムとしても使用できます。 - -.I cu -は、1 つの引数を、オプションとともに指定可能です。引数として指定する -文字列が "dir" の場合には、cu はポートとの直接接続を行ないます。 -本オプションは、ユーザがポートへのライトアクセスを行なう場合にのみ -使用され、通常はモデム等の設定のために用いられます。 - -引数が数字の場合には、その引数は電話番号として解釈されます。そうで -ない場合には、その引数は呼びだすシステム名として解釈されます。 -.B \-z -または -.B \-\-system -オプションは、数字で始まるシステム名を引数で指定する場合に指定しなけ -ればならないものであり、 -.B \-c -または -.B \-\-phone -オプションは、数字以外の記号で始まる電話番号を引数で指定する場合に指 -定しなければなりません。 - -.I cu -は、UUCP設定ファイルに記述されたポートを用います。もし単にシステム名 -だけが引数で与えられた場合、そのシステムへの発呼に最も適したポートが -選ばれます。 -.B \-p,\-\-port,\-l,\-\-line,\-s -や -.B \-\-speed -オプションが指定された場合、ポート選択を制御することが可能です。 - -リモートシステムとの間でコネクションが設定された場合、 -.I cu -は 2 プロセスを fork します。1 プロセスは、ポートからのデータ読みだしと -端末へのデータ書き込みを行ない、もう 1 プロセスは、端末からのデータ読み -出しとポートへのデータ書き込みを受け持ちます。 - -.I cu -は、通信中に使用可能なコマンドがあります。 -それらのコマンドはすべて、エスケープ文字から始まります。 -エスケープ文字は、デフォルトでは -.B ~ -(チルダ)です。エスケープ文字は、行頭において入力された場合にのみ認識 -されます。エスケープ文字を行頭に含むデータをリモートホストに送り -たい場合には、当該エスケープ文字を 2 回入力しなければなりません。全 -てのコマンドは、1 文字か、もしくは -.B % -文字(パーセント記号)に続く複数文字です。 - -.I cu -では、以下のコマンドを使用できます。 - -.TP 5 -.B ~. -通信を終了します。 -.TP 5 -.B ~! command -シェル経由でコマンドを実行します。コマンドが指定されない場合には、 -シェルが起動されます。 -.TP 5 -.B ~$ command -コマンドを起動します。その結果、標準出力に出力されたデータを、リ -モートシステムに送ります。 -.TP 5 -.B ~| command -コマンドを起動します。リモートシステムからの出力 -データをこのコマンドの標準入力とします。 -.TP 5 -.B ~+ command -コマンドを起動します。リモートシステムからの出力 -データをこのコマンドの標準入力とします。そして、コマンドから標準出力に出力さ -れたデータを、リモートシステムに送ります。 -.TP 5 -.B ~#, ~%break -可能であればブレーク信号を送ります。 -.TP 5 -.B ~c directory, ~%cd directory -ローカルディレクトリを変更します。 -.TP 5 -.B ~> file -ファイルをリモートシステムに送ります。本コマンドは、ファイルを通信路を -経由して、ファイルをダンプするのに用いられます。この場合、リモートシス -テムがこの動作を想定して動作しているものとみなして動作しますので、注意 -して下さい。 -.TP 5 -.B ~< -リモートシステムからファイルを受信します。このコマンドを実行すると、 -.I cu -コマンドは、ローカルファイル名と、ファイル転送のためにリモート側で実 -行すべきコマンドの入力を促します。本コマンドは、 -.B eofread -変数で指定される文字を受信するまでデータ受信を継続します。 -.TP 5 -.B ~p from to, ~%put from to -ファイルをリモート Unix システムに送信します。本コマンドは、リモート -システムがファイルを受信するために必要なコマンドを自動的に起動します。 -.TP 5 -.B ~t from to, ~%take from to -リモート Unix システムから、ファイルを取得します。本コマンドは、リモート -システムからファイルを送信するために必要なコマンドを自動的に起動します。 -.TP 5 -.B ~s variable value -.I cu -の変数を、指定した値に設定します。値が指定されなかった場合、変数は -.B true -に設定されます。 -.TP 5 -.B ~! variable -.I cu -の変数を -.B false -に設定します。 -.TP 5 -.B ~z -cu セッションをサスペンドします。この機能は、そんなに多くのシステムで -サポートされているわけではありません。 -^Z によってジョブをサスペンドできるシステムでは、 -.B ~^Z -も、セッションをサスペンドします。 -.TP 5 -.B ~%nostop -XON/XOFF 制御を無効にします。 -.TP 5 -.B ~%stop -XON/XOFF 制御を有効にします。 -.TP 5 -.B ~v -全ての変数と、その変数に設定された値を表示します。 -.TP 5 -.B ~? -使用可能なすべてのコマンドを表示します。 - -.I cu -は、いろんな変数を備えています。これらの環境変数一覧は、 -.B ~v -コマンドを用いて表示することができ、 -.B ~s -もしくは -.B ~! -コマンドを用いて設定することが可能です。 - -.TP 5 -.B escape -エスケープ文字。初期値は -.B ~ -(チルダ)です。 -.TP 5 -.B delay -この変数が true の場合には、 -.I cu -はエスケープ文字を受信してからローカルシステム名を出力するまでに -1 秒のウェイトが入ります。デフォルトでは true です。 -.TP 5 -.B eol -行末文字として認識される文字の一覧を表示します。エスケープ文字は -以下のいずれかが現れた後にしか認識されません。デフォルトでは、 -復帰 -および、^U, ^C, ^O, ^D, ^S, ^Q, ^R の各文字です。 -.TP 5 -.B binary -ファイルを送信する時に、バイナリデータを転送するかしないかを設定します。 -本変数が false の場合には、ファイル中のニューライン記号はすべて、キャリッ -ジリターンに変換されます。 -デフォルトでは false です。 -.TP 5 -.B binary-prefix -.B binary -変数が true の状態でファイル転送を行う時に、 -バイナリ文字を送る前に使われる文字列の設定を決めます。 -デフォルトでは ^V に設定されます。 -.TP 5 -.B echo-check -リモートシステムのエコーバックをチェックすることで、ファイル転送のチェ -ックをするかどうか決めます。しかし、あまりちゃんと動かないでしょう。 -デフォルトでは false です。 -.TP 5 -.B echonl -ファイル中の1行を送信した後に検出しようとする文字を設定します。 -デフォルトでは、復帰文字です。 -.TP 5 -.B timeout -エコーバックもしくは -.B echonl -文字の検出をタイムアウトとする時間を秒単位で設定します。 -デフォルトでは 30 です。 -.TP 5 -.B kill -エコーチェックが失敗した場合に、1 行削除に使う文字を設定します。 -デフォルトでは ^U です。 -.TP 5 -.B resend -エコーチェックが失敗しつづけた場合に、1 行を再送する回数を設定します。 -デフォルトでは 10 です。 -.TP 5 -.B eofwrite -.B ~> -コマンドを用いてファイルを送信し終った場合に、最後に送信する文字列を -設定します。デフォルトでは、^D です。 -.TP 5 -.B eofread -.B ~< -コマンドを用いてファイルを受信する場合に、検出する文字列を設定します。 -デフォルトでは $ です。この文字列は、典型的なシェルプロンプトです。 -.TP 5 -.B verbose -ファイル転送時に、転送情報を表示するかどうか設定します。デフォルトで -は true です。 -.SH オプション -.I cu -コマンドでは、以下のオプションが指定可能です。 -.TP 5 -.B \-e, \-\-parity=even -偶数パリティを用います。 -.TP 5 -.B \-o, \-\-parity=odd -奇数パリティを用います。 -.TP 5 -.B \-\-parity=none -パリティは用いません。 -.B \-e -と -.B \-o -が同時に指定された場合もパリティなしになります。 -.TP 5 -.B \-h, \-\-halfduplex -文字のローカルエコーを許可します(半二重モード)。 -.TP 5 -.B \-\-nostop -XON/XOFF 制御を無効にします。デフォルトでは有効です。 -.TP 5 -.B \-E char, \-\-escape char -エスケープ文字を指定します。初期値は -.B ~ -(チルダ)です。 -.B \-E '' -とすることにより、エスケープ文字を無視できます。 -.TP 5 -.B \-z system, \-\-system system -発呼先のシステムを指定します。 -.TP 5 -.B \-c phone-number, \-\-phone phone-number -発呼先の電話番号を指定します。 -.TP 5 -.B \-p port, \-\-port port -使用するポートを指定します。 -.TP 5 -.B \-a port -.B \-\-port port -と同じです。 -.TP 5 -.B \-l line, \-\-line line -使用する回線を、デバイス名で指定します。本オプションは、UUCP 設定ファイル -に記述されていないポートを用いて通信を行なう場合に使用されます。当該デバ -イスには、write パーミッションが許可されていることが必要になります。 -.TP 5 -.B \-s speed, \-\-speed speed -通信速度(ボーレート)を設定します。 -.TP 5 -.B \-# -# に位置するのは数字です。 -.B \-\-speed # -と同じです。 -.TP 5 -.B \-n, \-\-prompt -使用する電話番号の問い合わせプロンプトを出力します。 -.TP 5 -.B \-d -デバッグモードに入ります。これは -.B \-\-debug all -と同様です。 -.TP 5 -.B \-x type, \-\-debug type -特定のデバッグタイプを有効にします。タイプとしては、abnormal, chat, -handshake, uucp-proto, proto, port, config, spooldir, execute, incoming, -outgoing があります。 -.I cu -では、abnormal, chat, handshake, port, config, incoming, outgoing -が意味を持ちます。 - -本オプションでは、コンマで区切ることで複数のデバッグタイプが指定可能です。そして、 -.B \-\-debug -オプションは、1回のコマンド起動で複数回指定可能です。 -また、タイプとして数字を指定することも可能です。例えば、 -.B \-\-debug 2 -という指定は、 -.B \-\-debug abnormal,chat -と同じ意味です。 -.B \-\-debug all -は、すべてのデバッグオプションが指定されたのと同じです。 -.TP 5 -.B \-I file, \-\-config file -使用する設定ファイルの指定を行ないます。ただし、本オプションは、 -.I cu -のコンパイル条件によっては使用できないことがあります。 -.TP 5 -.B \-v, \-\-version -バージョンを表示し、終了します. -.TP 5 -.B \-\-help -ヘルプメッセージを表示し、終了します。 -.SH バグ -本プログラムは、あまり良好に動作しません。 -.SH 関連ファイル -ファイル名は、コンパイル環境や設定ファイルの内容によって変わることが -あります。ここに挙げるのは、一例でしかありません。 - -.br -/etc/uucp/config - 設定ファイル -.SH 作者 -Ian Lance Taylor -<ian@airs.com> - diff --git a/ja_JP.eucJP/man/man1/gawk.1 b/ja_JP.eucJP/man/man1/gawk.1 deleted file mode 100644 index 8219d2de15..0000000000 --- a/ja_JP.eucJP/man/man1/gawk.1 +++ /dev/null @@ -1,2571 +0,0 @@ -.\" WORD: interval exptession インターバル表現 -.\" $FreeBSD$ -.ds PX \s-1POSIX\s+1 -.ds UX \s-1UNIX\s+1 -.ds AN \s-1ANSI\s+1 -.ds GN \s-1GNU\s+1 -.ds AK \s-1AWK\s+1 -.if !\n(.g \{\ -. if !\w|\*(lq| \{\ -. ds lq `` -. if \w'\(lq' .ds lq "\(lq -. \} -. if !\w|\*(rq| \{\ -. ds rq '' -. if \w'\(rq' .ds rq "\(rq -. \} -.\} -.TH GAWK 1 "May 17 2000" "Free Software Foundation" "Utility Commands" -.SH 名称 -gawk \- パターン検索・処理言語 -.SH 書式 -.B awk -[ \*(PX or \*(GN style options ] -.B \-f -.I program-file -[ -.B \-\^\- -] file .\|.\|. -.br -.B gawk -[ \*(PX or \*(GN style options ] -[ -.B \-\^\- -] -.I program-text -file .\|.\|. -.SH 解説 -.I gawk -は \*(GN プロジェクトが実装した プログラミング言語 \*(AK の処理系です。 -本処理系は \*(PX 1003.2 コマンド言語とユーティリティ規約に定められた -言語の定義に適合しています。 -本バージョンはまた、Aho, Kernighan, Weinberger の著書 -.I "The AWK Programming Language" -の記述にもとづいており、 -System V Release 4 \*(UX の -.I awk -の付加機能も含んでいます。 -.I gawk -はまた、Bell Labs の新機能および \*(GN 独自の拡張も提供します。 -.PP -コマンドラインは、 -.I gawk -へのオプション、(もし -.B \-f -または -.B \-\^\-file -オプションにより指定されていなければ)\*(AK のプログラムテキスト、そして -残りの引数列からなります。 -この残りの引数列は、定義済み \*(AK 変数 -.BR ARGC , -.B ARGV -を用いることで参照できます。 -.SH オプションフォーマット -.PP -.I gawk -へのオプションは、伝統的な \*(PX 形式の 1 文字オプションと、\*(GN 形式の -ロングオプションがあります。 -\*(PX 形式のオプションは単一の \*(lq\-\*(rq で始まり、一方 \*(GN 形式のもの -は \*(lq\-\^\-\*(rq で始まります。ロングオプションは \*(GN の独自仕様と -\*(PX の必須仕様の両方について用意されています。 -.PP -\*(PX 標準に従い、 -.I gawk -独自仕様のオプションは -.B \-W -オプションへの引数で与えます。 -複数の -.B \-W -オプションを指定することもできます。 -後述の -ように、各 -.B \-W -オプションには、それに対応するロングオプション -が存在します。ロングオプションへの引数は、空白を入れずに -.B = -でつないで指定するか、その次のコマンドライン引数として渡すことができます。 -ロングオプションは、短縮形が一意である限り、短縮することができます。 -.SH オプション -.I gawk -は以下のオプションを受け付けます。 -.TP -.PD 0 -.BI \-F " fs" -.TP -.PD -.BI \-\^\-field-separator " fs" -入力フィールドセパレータ (変数 -.B FS -の値)を -.I fs -とします。 -.TP -.PD 0 -\fB\-v\fI var\fB\^=\^\fIval\fR -.TP -.PD -\fB\-\^\-assign \fIvar\fB\^=\^\fIval\fR -プログラムを実行する前に、変数 -.I var -に値 -.I val -を設定します。このようにして設定 -した変数は、 \*(AK プログラムの -.B BEGIN -ブロック内でも参照できます。 -.TP -.PD 0 -.BI \-f " program-file" -.TP -.PD -.BI \-\^\-file " program-file" -.B awk -への第 1 引数を用いるかわりに、\*(AK プログラムをファイル -.I program-file -から読み込みます。 -.B \-f -(または -.B \-\^\-file -) オプションは複数回使 -用することができます。 -.TP -.PD 0 -.BI \-mf " NNN" -.TP -.PD -.BI \-mr " NNN" -さまざまなメモリの制限値を -.I NNN -に設定します。フラグ -.B f -は最大フィールド数、フラグ -.B r -は最大レコードサイズを設定します。この 2 つのフラグと -.B \-m -オプションは、Bell Labs バージョンの \*(UX -.I awk -に由来しています。しかし、 -.I gawk -にはこのような制限はありませんので、 -.I gawk -では本オプションは無視されます。 -.TP -.PD 0 -.B "-W traditional" -.TP -.PD 0 -.B "\-W compat" -.TP -.PD 0 -.B \-\^\-traditional -.TP -.PD -.B \-\^\-compat -.I 互換 -モードで動作します。互換モードでは、 -.I gawk -は \*(UX -.I awk -と等価な動作を行い、\*(GN 独自拡張は解釈できません。 -このオプションの他の形式よりも、 -.B \-\^\-traditional -を使用することが好まれます。 -詳しくは後述の -.B "GNU 拡張" -を参照してください。 -.TP -.PD 0 -.B "\-W copyleft" -.TP -.PD 0 -.B "\-W copyright" -.TP -.PD 0 -.B \-\^\-copyleft -.TP -.PD -.B \-\^\-copyright -\*(GN の著作権表示の短いバージョンを標準出力へ書き出し、 -成功状態で終了します。 -.TP -.PD 0 -.B "\-W help" -.TP -.PD 0 -.B "\-W usage" -.TP -.PD 0 -.B \-\^\-help -.TP -.PD -.B \-\^\-usage -短めのオプション一覧を標準出力へ書き出します。 -( -.I "GNU コーディング規約" -に従い、本オプションを指定すると -.I awk -はただちに終了し、成功を意味する終了ステータスを返します。) -.TP -.PD -.B "\-W lint" -.TP -.PD 0 -.B \-\^\-lint -他の \*(AK での処理が疑わしい、あるいは他の \*(AK との互換性がない構造が -ある場合に警告を行います。 -.TP -.PD 0 -.B "\-W lint\-old" -.TP -.PD -.B \-\^\-lint\-old -オリジナルの Unix -.I awk -へ移植できない構造に関して警告を行います。 -.ig -.\" This option is left undocumented, on purpose. -.TP -.PD 0 -.B "\-W nostalgia" -.TP -.PD -.B \-\^\-nostalgia -長い間 -.I awk -を使ってきたユーザのために郷愁の瞬間を提供します。 -.. -.TP -.PD 0 -.B "\-W posix" -.TP -.PD -.B \-\^\-posix -.I 互換 -モードをオンにし、更に以下の制約が課せられます。 -.RS -.TP \w'\(bu'u+1n -\(bu -.B \ex -エスケープシーケンスを解釈しません。 -.TP -\(bu -.B FS -が単一の空白に設定された場合、空白とタブのみがフィールドを区切り、 -改行はフィールドを区切りません。 -.TP -\(bu -キーワード -.B function -に対応する別名 -.B func -を解釈しません。 -.TP -\(bu -演算子 -.B ^ -や -.B ^= -のかわりに -.B ** -や -.B **= -を用いることができません。 -.TP -\(bu -.B fflush() -関数は利用できません。 -.RE -.TP -.PD 0 -.B "\-W re\-interval" -.TP -.PD -.B \-\^\-re\-interval -正規表現のマッチングで -.I "インターバル表現 (interval expressions)" -を有効にします -(後述の -.BR "正規表現" -を参照してください)。 -インターバル表現は伝統的な \*(AK 言語では利用できませんでした。 -.I awk -と -.I egrep -が一貫性を持つように、\*(PX 標準がこれらを追加しました。 -しかし、これらを使用すると古い \*(AK プログラムを動かなくしてしまうでしょうから、 -このオプションによって要求されたときと、 -.B \-\^\-posix -が指定されたときに、 -.I gawk -はこれらの機能を提供します。 -.TP -.PD 0 -.BI "\-W source " program-text -.TP -.PD -.BI \-\^\-source " program-text" -.I program-text -を \*(AK プログラムとして用います。本オプションにより、ライブラリ化された関数 ( -.B \-f -または -.B \-\^\-file -オプションを用いて読み込む) とコマンドラインから入力されたプログラムを -簡単に合成することができます。 -これは、主にシェルスクリプトで用いられる中規模から大規模な \*(AK プログラム -のために用意されました。 -.TP -.PD 0 -.B "\-W version" -.TP -.PD -.B \-\^\-version -実行された -.I gawk -プログラムのバージョン情報を標準出力へ書き出します。これは主に、 -あなたが使用している -.I gawk -プログラムが Free Software Foundation が配布してい -るプログラムのうち、最新のものであるかどうかを知る場合に便利です。 -またバグレポートのときにも有用です。 -(本オプションを指定すると、 -.I "GNU コーディング規約" -に従い、 -.I awk -はただちに終了し、成功を意味する終了ステータスを返します。) -.TP -.B \-\^\- -オプションの終了を意味します。\*(AK プログラムに -\*(lq\-\*(rq から始まるオプションではない -引数を与える場合に便利です。 -これは、主に他の \*(PX プログラムの多くが引数に対して行う解釈と -一貫性を保つためにあります。 -.PP -互換モードでは、他のオプションは不正であるとされるか、無視されます。 -通常の実行において、プログラムテキストがコマンドラインに指定されていれば、 -不明なオプションは、\*(AK プログラムに -.B ARGV -配列を通して渡されます。これ -は、\*(AK プログラムを \*(lq#!\*(rq 機構を用いて実行する場合に特に便利です。 -.SH AWK プログラムの実行 -.PP -\*(AK プログラムは、パターンとアクションの組の列と、(もし必要なら) 関数定義か -らなります。 -.RS -.PP -\fIpattern\fB { \fIaction statements\fB }\fR -.br -\fBfunction \fIname\fB(\fIparameter list\fB) { \fIstatements\fB }\fR -.RE -.PP -.I gawk -はまず、 -.I program-file -(複数可) が指定されていればそれから、 -.B \-\^\-source -の引数から、あるいは、最初のオプションではない引数から -プログラムを読み込みます。 -.B \-f -と -.B \-\^\-source -オプションは、コマンドラインで複数回指定できます。 -.I gawk -は、すべての -.I program-file -とコマンドラインで指定したプログラムを結 -合して使用します。新しく作った \*(AK プログラムひとつひとつに -\*(AK 関数のライブラリを埋め込む必要が無いので、この機能はライブラリの構築に -便利です。 -また、ライブラリ関数とコマンドラインで指定したプログラムとを混合して使 -うことも可能にしています。 -.PP -環境変数 -.B AWKPATH -により、 -.B \-f -オプションで指定されたファイルを検索するパスを指定できます。 -.B AWKPATH -が設定されていない場合のデフォルトパスは -\fB".:/usr/local/share/awk"\fR です。 -(実際のディレクトリは -.I gawk -がどのように構築/インストールされたかに依存して、さまざまなものとなります。) -.B \-f -オプションで指定したファイル名が \*(lq/\*(rq を含んでいる場合は、 -パス検索は行われません。 -.PP -.I gawk -は、 \*(AK プログラムを次の順序で実行します。 -まず、 -.B \-v -オプションで指定された変数への代入をすべて行います。 -次に、プログラムを内部形式にコンパイルします。 -そして、(もし存在すれば) -.B BEGIN -ブロック (複数存在可) を実行します。 -配列 -.B ARGV -で指定されたファイルを順に読み、処理を行います (コマンドラインでファイル名が -指定されていなければ、標準入力に対して処理を行います)。 -.PP -コマンドラインで指定されたファイル名が -.IB var = val -という形式ならば、それ -は変数への代入であると解釈されます。変数 -.I var -は値 -.I val -に設定されます -(これは、すべての -.B BEGIN -ブロックを実行したあとに行われます)。コマンドライン -での変数の代入は、\*(AK が入力をフィールドやレコードに分割するためのセパレータ -を実行時に変更するのに便利です。また、1 つのデータファイルに -対し数回処理を行う必要がある場合、状態をコントロールするのにも便利です。 -.PP -配列 -.B ARGV -の要素に空 (\fB""\fR) がある場合、 -.I gawk -はその要素を無視します。 -.PP -.I gawk -は、入力された各レコードに対してマッチする -.I パターン -が \*(AK プログラム内にあるかどうかを -検索します。そのレコードにマッチしたパターンすべてについて、それぞれ対応する -.I アクション -が実行されます。 -パターンは、プログラムテキストに出現した順序で検索されます。 -.PP -入力が尽きると、 -.I gawk -は (もしあれば) -.B END -ブロック (複数存在可) を実行します。 -.SH 変数、レコード、フィールド -\*(AK における変数は動的、すなわち、最初に使用されたときに生成されます。 -変数の値は、浮動小数点数か、文字列か、あるいは両方です。変数の用い -られ方により変化します。\*(AK ではまた、1 次元配列を利用することができます。 -多次元配列 -も、擬似的にではありますが、利用可能です。プログラム実行開始時に、 -いくつかの定義済み変数が設定されます。 -これらを必要に応じて説明し、以下でまとめます。 -.SS レコード -通常、レコードは改行文字により区切られます。 -レコードの区切りは、組み込み変数 -.B RS -へ値を代入することにより、制御できます。 -.B RS -が単一文字の場合、その文字がレコードを区切ります。 -そうでない場合は、 -.B RS -は正規表現となります。 -入力中のテキストで、この正規表現にマッチするものがレコードを区切ります。 -しかし互換モードでは、 -文字列値の最初の文字だけが、レコードセパレータに使用されます。 -.B RS -が空文字列に設定されているときには、レコードは空行で区切られます。 -.B RS -が空文字列に設定されたときには、 -.B FS -の値にかかわらず、改行文字は常にフィールドセパレータとなります。 -.SS フィールド -.PP -入力レコードを読み込むごとに、 -.I gawk -はそのレコードを -.I フィールド -に分割しま -す。分割する際には、変数 -.B FS -の値がフィールドセパレータとして参照されます。 -.B FS -の値が1文字なら、その -文字を境にフィールドが分割されます。 -.B FS -が空文字列の場合、個々の文字がフィールドセパレータとなります。 -いずれでもない場合、 -.B FS -は完全な正規表現である -と解釈されます。特殊な場合として -.B FS -が単一の空白のときには、フィールドは -連続した空白・タブ・改行により分割されます。 -(後述の -.BR \-\^\-posix -の議論を参照してください)。 -変数 -.B IGNORECASE -(下記参照) の -値は、 -.B FS -が正規表現の場合フィールド分割にも影響を与えることと、 -.B RS -が正規表現の場合レコード分割にも影響を与えることに注意してください。 -.PP -変数 -.B FIELDWIDTHS -の値が空白で区切られた数字の列である場合、各フィールドは -固定長であると解釈され、 -.I gawk -は指定された幅ごとにフィールドの -分割を行います。この場合、 -.B FS -の値は無視されます。 -.B FS -に新たに値を設定 -することにより、この -.B FIELDWIDTHS -の効果を打ち消し、標準の動作に戻すことができます。 -.PP -入力レコード中の各フィールドの値は、左から -.BR $1 , -.B $2 -等という名前で参照できます。 -.B $0 -は -レコード全体です。フィールドに値を代入することもできます。フィールドは定数だ -けでなく、変数によって参照することもできます。以下の例では、入力レコードの 5 -番目のフィールドの値を出力します。 -.RS -.PP -.ft B -n = 5 -.br -print $n -.ft R -.RE -.PP -変数 NF は、自動的に入力レコードのフィールドの数に設定されます。 -.PP -存在しないフィールド (すなわち、 -.B $NF -より右のフィールド) を参照した結果は -空文字列になります。しかしながら、存在しないフィールドへの代入(たとえ -ば、 -.BR $(NF+2) = 5 -) は -.B NF -の値を増加させ、間のフィールドには空文字が設定されます。 -さらに -.B $0 -の値は、フィールドの値を変数 -.B OFS -の値でフィールドを区切ったものとして再計算されます。 -負のフィールド番号への参照は致命的エラーとなります。 -.B NF -を減少させると、新しい値を越えるフィールドの値は失われます。 -.B $0 -の値は、フィールドの値を変数 -.B OFS -の値でフィールドを区切ったものとして再計算されます。 -.SS 組み込み変数 -.PP -.I gawk -の組み込み変数は以下のとおりです。 -.PP -.TP \w'\fBFIELDWIDTHS\fR'u+1n -.B ARGC -コマンドライン引数の個数 ( -.I gawk -へのオプションと、プログラム指定は含みま -せん)。 -.TP -.B ARGIND -現在処理中のファイル名が格納されている配列 -.B ARGV -のインデックス。 -.TP -.B ARGV -コマンドライン引数の配列。配列は、 0 から -.B ARGC -\- 1 までのインデックスを -持ちます。 -.B ARGV -の内容を変更することで、入力に用いるファイル名を変 -更することができます。 -.TP -.B CONVFMT -数値の変換フォーマット。デフォルト値は \fB"%.6g"\fR です。 -.TP -.B ENVIRON -現在の環境変数の値からなる配列。配列は、環境変数名によりインデックスされ -、各要素の値はその環境変数の値です (例えば -\fBENVIRON["HOME"]\fP は -.B /home/arnold -となるでしょう)。本配列に -代入を行っても、 -.I gawk -からリダイレクトや -.B system() -関数により実行される -プログラムの環境には影響を与えません(これは、将来の -.I gawk -では変更される可能性があります)。 -.\" but don't hold your breath... -.TP -.B ERRNO -.B getline -のリダイレクト、 -.B getline -による読み込み、 -.B close() -関数の実行時のいずれかにシステムエラーが発生した場合、変数 -.B ERRNO -にはエラーの内容を示した文字列が設定されます。 -.TP -.B FIELDWIDTHS -空白で区切られたフィールド長のリスト。もしこの値が設定されていれば、 -.I gawk -は -.B FS -の値を用いてフィールド分割するかわりに、固定長のフィールド分割を行 -います。固定長のフィールド分割機能はまだ実験的なもので、 -.I gawk -が改良されるに従って意味が変化する可能性があります。 -.TP -.B FILENAME -現在の入力ファイル名。もし、コマンドラインで入力ファイルが指定されてい -なければ、 -.B FILENAME -の値は \*(lq\-\*(rq です。しかしながら、 -.B BEGIN -ブロック内では -.B FILENAME -は未定義です。 -.TP -.B FNR -現在の入力ファイルにおける入力レコード番号。 -.TP -.B FS -入力フィールドセパレータ。デフォルトでは単一の空白です。 -上述の -.B フィールド -を参照してください。 -.TP -.B IGNORECASE -すべての正規表現と文字列操作において大文字小文字の区別を制御します。もし、 -.B IGNORECASE -が 0 でない値に設定されていれば、文字列比較、ルールのパターンマッチ、 -.B FS -によるフィールド分割、 -.B RS -によるレコード分割、 -.B ~ -と -.B !~ -による正規表現マッチ、定義済み関数 -.BR gensub() , -.BR gsub() , -.BR index() , -.BR match() , -.BR split() , -.B sub() -において大文字と小文字の違いは無視されます。このため、 -.B IGNORECASE -が 0 以外の値なら、 -.B /aB/ -は \fB"ab"\fP, \fB"aB"\fP, \fB"Ab"\fP, \fB"AB"\fP -のいずれにもマッチすることになります。 -他の\*(AK 変数と同様に -.B IGNORECASE -の初期値は 0 なので、通常は -正規表現と文字列操作において大文字と小文字は区別されます。 -Unix では、大文字小文字を無視する場合、 -ISO 8859-1 Latin-1 文字集合全てを使用できます。 -.B 注: -3.0 以前の -.I gawk -では -.B IGNORECASE -は正規表現操作のみに影響しました。現在は文字列比較にも影響します。 -.TP -.B NF -現在の入力レコードのフィールド数。 -.TP -.B NR -現在までに読み込んだ入力レコード数の合計。 -.TP -.B OFMT -数字の出力フォーマット。デフォルト値は \fB"%.6g"\fR です。 -.TP -.B OFS -出力フィールドセパレータ。デフォルトは空白です。 -.TP -.B ORS -出力レコードセパレータ。デフォルトは改行です。 -.TP -.B RS -入力レコードセパレータ。デフォルトは改行です。 -.TP -.B RT -レコードターミネータ。 -.I gawk -は、 -.B RS -で指定される文字または正規表現にマッチする入力テキストを、 -.B RT -に設定します。 -.TP -.B RSTART -.B match() -によりマッチした最初の文字の位置。0 はマッチしなかったことを示します。 -.TP -.B RLENGTH -.B match() -によりマッチした文字列の長さ。\-1 はマッチしなかったことを示します。 -.TP -.B SUBSEP -多次元配列を実現する際に用いられる、配列のインデックスを結合する文字。 -デフォルト値は \fB"\e034"\fR です。 -.SS 配列 -.PP -配列は、ブラケット -.RB ( [ -と -.BR ] ) -の間の式によってインデックスを指定します。もし式が式 -のリスト(式, 式 .\|.\|.) なら、式の値を変数 -.B SUBSEP -の値を区切りとして -結合した文字列をインデックスとして用います。これにより、多次元配列を -シミュレートしています。例えば、 -.PP -.RS -.ft B -i = "A";\^ j = "B";\^ k = "C" -.br -x[i, j, k] = "hello, world\en" -.ft R -.RE -.PP -は、文字列 \fB"hello, world\en"\fR を、文字列 \fB"A\e034B\e034C"\fR で -インデックスした配列 x の要素に代入しています。 -\*(AK の配列はすべて、文字列によりインデックスを行う連想配列です。 -.PP -特殊な演算子 -.B in -を -.B if -または -.B while -ステートメントで用いることによって、あるインデックス値に -おける配列の値が定義されているかを調べることができます。 -.PP -.RS -.ft B -.nf -if (val in array) - print array[val] -.fi -.ft -.RE -.PP -もし、配列が多次元インデックスを持つなら、 -.B "(i, j) in array" -を用います。 -.PP -.B in -はまた、 -.B for -ループ中で、配列のすべてのインデックス値について繰り返すために -用いることができます。 -.PP -配列の要素は、 -.B delete -ステートメントを用いて削除することができます。 -.B delete -ステートメントはまた、 -添字を指定せずに配列名のみを指定することにより、 -配列全体を削除するためにも使えます。 -.SS 変数の型と変換 -.PP -変数とフィールドは、(浮動小数点数の) 数値または文字列、あるいは両方として -扱われます。 -変数の値がどのように解釈されるかは、変数の使われ方によって変化します。 -数式中で用いられれば変数は数値として解釈され、文字列として用いられれ -ば文字列として解釈されます。 -.PP -変数の値を強制的に数値であると解釈させたい場合は、変数に 0 を加えます。 -文字列と解釈させたい場合は空文字列を結合します。 -.PP -文字列を数値に変換する必要がある場合、変換は -.IR atof (3) -によって行われます。 -数値を文字列に変換する場合は、変数 -.B CONVFMT -の値をフォーマット文字列として用いて、 -.IR sprintf (3) -により行われます。\*(AK ではすべての数値は浮動小数点数ですが、整数値は常に整数 -として変換が行われます。 -よって、以下の場合、 -.PP -.RS -.ft B -.nf -CONVFMT = "%2.2f" -a = 12 -b = a "" -.fi -.ft R -.RE -.PP -変数 -.B b -は文字列値 \fB"12"\fR となり、\fB"12.00"\fR とはなりません。 -.PP -.I gawk -は、以下のようにして比較を行います: -2 つの変数が数値なら数値として比 -較します。もし片方が数値で片方が`数値'文字列なら、数値として比較されます。 -片方が数値でない文字列なら、数値のほうが文字列に変換され、文字列として -比較されます。両方とも文字列なら、文字列として比較されます。\*(PX 標準に従う -なら、両方とも数値文字列の場合は数値として比較しますが、これは明ら -かに間違いです。 -.I gawk -はそのような動作をしません。 -.PP -\fB"57"\fP のような文字列定数は数値文字列では -.I なく -、文字列定数です。「数値文字列」の概念は、フィールド、 -.B getline -の入力、 -.B FILENAME -、 -.B ARGV -の要素、 -.B ENVIRON -の要素、数値文字列から -.B split() -によって作成された配列の要素に対してのみ適用されます。 -基本的な考え方では、 -.I ユーザ入力 -、それも数値に見えるユーザ入力のみが数値として扱われます。 -.PP -初期化されていない変数は、数値としては 0 を、文字列としては "" (空文字列) を -持ちます。 -.SH パターンとアクション -awk は行指向の言語です。まずパターン、次にアクションが続きます。 -アクションは -.B { -と -.B } -で囲みます。パターンまたはアクションは省略することもできます。 -もちろん、両方とも -省略してしまっては意味がありません。 -パターンがない場合、アクションはすべての入力レコードに -対して適用されます。省略されたアクションは以下と等価です。 -.RS -.PP -.B "{ print }" -.RE -.PP -これはレコード全体を出力します。 -.PP -コメントは文字 \*(lq#\*(rq で始まり、行末まで続きます。空行は、複数ステートメントの -間をあけるのに使うことができます。 -通常、ステートメントは改行で終わります。ただし、 -次の記号で行が終わる場合にはこの限りではありません: \*(lq,\*(rq, -.BR { , -.BR ? , -.BR : , -.BR && , -.B || -。 -.B do -または -.B else -で終わる行は、ステートメントが自動的に以降 -の行へ継続されます。また、改行の直前に \*(lq\e\*(rq を置くことで、 -行を継続することができます。この場合、その改行は無視されます。 -.PP -\*(lq;\*(rq で区切ることにより、1行に複数のステートメントを記述することができます。 -(通常のように) -パターン-アクション対中のアクション部におけるステートメントだけではなく、 -パターン-アクション対ステートメント自身も、 \*(lq;\*(rq -で区切って複数置くことができます。 -.SS パターン -\*(AK のパターンは、以下のうちのいずれかです。 -.PP -.RS -.nf -.B BEGIN -.B END -.BI / "regular expression" / -.I "relational expression" -.IB pattern " && " pattern -.IB pattern " || " pattern -.IB pattern " ? " pattern " : " pattern -.BI ( pattern ) -.BI ! " pattern" -.IB pattern1 ", " pattern2 -.fi -.RE -.PP -.B BEGIN -と -.B END -は特殊なパターンであり、入力と比較されることはありません。すべての -.B BEGIN -パターンに対応したアクション部は結合され、 -そのようなすべてのアクション部が単一の -.B BEGIN -ブロック中にあるかのように扱われます。 -結合されたアクションは、 -すべての入力ファイルの読み込みに先立って実行されます。同様にすべての -.B END -ブロックは結合され、すべての入力ファイルの処理後 (あるいは、exit ステートメント -が実行されたとき) に実行されます。 -.B BEGIN -と -.B END -はパターン式内で他のパターンと混ぜて使うことはできません。また、 -.B BEGIN -と -.B END -パターンはアクション部を省略することができません。 -.PP -.BI / "regular expression" / -パターンでは、正規表現 (regular expression) -にマッチした入力レコードに対してアクション -が実行されます。正規表現は -.IR egrep (1) -と同じものが使えます。あとに要約を示します。 -.PP -.I 関係式(relational expression) -では、後述のアクションについての節で示す演算子を用いることが -できます。 -これらは概して、特定のフィールドが正規表現にマッチするかどうかを -調べるために用いられます。 -.PP -演算子 -.BR && , -.BR || , -.B ! -は、それぞれ C 言語での論理AND、論理OR、論理NOT と等価です。 -C 言語と同様に、評価値が確定した時点で以降の評価を打ち切ります。 -これらは複数のパターン式を結合するために使用されます。 -他のプログラミング言語と同様、括弧によって評価順序を変更することができます。 -.PP -.B ?\^: -演算子は C 言語のものと同様です。もし、最初のパターンが真なら、 -テストのために 2 番目のパターンが用いられ、そうでなければ 3 番目のパターンが -用いられます。2 番目と 3 番目のパターンのどちらかだけが評価されます。 -.PP -.IB pattern1 ", " pattern2 -形式は -.I 範囲パターン -と呼ばれます。範囲パターンは、 -.I pattern1 -にマッチするレコードから、 -.I pattern2 -にマッチするレコードまでのすべてにマッチします。 -この形式は、他のパターン式と混合して用いることはできません。 -.SS 正規表現 -awk の正規表現は -.I egrep -のものと同様に、拡張された正規表現です。 -以下の構成要素から成り立っています。 -.TP \w'\fB[^\fIabc.\|.\|.\fB]\fR'u+2n -.I c -メタ文字ではない -.I c -にマッチします。 -.TP -.I \ec -リテラル文字 -.I c -にマッチします。 -.TP -.B . -改行を -.I 含む -任意の 1 文字にマッチします。 -.TP -.B ^ -文字列の先頭にマッチします。 -.TP -.B $ -文字列の終端にマッチします。 -.TP -.BI [ abc.\|.\|. ] -文字リストであり、 -.I abc.\|.\|. -のいずれか 1 文字にマッチします。 -.TP -.BI [^ abc.\|.\|. ] -文字リストの逆であり、 -.I abc.\|.\|. -以外の 1 文字にマッチします。 -.TP -.IB r1 | r2 -選言: -.I r1 -または -.I r2 -にマッチします。 -.TP -.I r1r2 -結合: -.I r1 -の直後に -.I r2 -が続くものにマッチします。 -.TP -.IB r + -.I r -の 1 回以上の繰り返しにマッチします。 -.TP -.IB r * -.I r -の 0 回以上の繰り返しにマッチします。 -.TP -.IB r ? -.I r -の 0 回または 1 回の繰り返しにマッチします。 -.TP -.BI ( r ) -グループ化: -.I r -にマッチします。 -.TP -.PD 0 -.IB r { n } -.TP -.PD 0 -.IB r { n ,} -.TP -.PD -.IB r { n , m } -ブレース中に 1 つか 2 つの数値を記述することにより、 -.I "インターバル表現" -を表します。ブレース中に数値が 1 つある場合、直前の正規表現 -.I r -が -.I n -回繰り返されます。2 つの数値がコンマで区切られている場合、 -.I r -は -.I n -回から -.I m -回繰り返されます。1 つの数値に続いてコンマがある場合、 -.I r -は少なくとも -.I n -回繰り返されます。 -.sp .5 -インターバル表現は -.B \-\^\-posix -または -.B \-\^\-re\-interval -がコマンドラインにて指定されているときのみ利用可能です。 -.TP -.B \ey -語の先頭または末尾の空文字列にマッチします。 -.TP -.B \eB -語の中の空文字列にマッチします。 -.TP -.B \e< -語の先頭の空文字列にマッチします。 -.TP -.B \e> -語の末尾の空文字列にマッチします。 -.TP -.B \ew -語を構成する文字 (レター、数値、アンダスコア) にマッチします。 -.TP -.B \eW -語を構成する文字以外の文字にマッチします。 -.TP -.B \e` -バッファ (文字列) の先頭の空文字列にマッチします。 -.TP -.B \e' -バッファの末尾の空文字列にマッチします。 -.PP -文字列定数中で用いることができるエスケープシーケンス (後述参照) は、 -正規表現中でも使用することができます。 -.PP -.I 文字クラス -は \*(PX 標準で導入された新機能です。 -文字クラスは特定の属性を持つ文字列リストの特殊表現ですが、 -実際の文字集合自身は国や文字集合によって様々なものとなります。 -例えば、アルファベット文字はアメリカ合州国とフランスとでは異なります。 -.PP -文字クラスが有効なのは、 -文字リストのブラケットの中の正規表現だけです。 -文字クラスは、 -.B [: -と、クラスを表現するキーワードと、 -.B :] -で構成されます。 -以下に \*(PX 表現で定義される文字クラスを示します。 -.TP -.B [:alnum:] -アルファベットと数値文字。 -.TP -.B [:alpha:] -アルファベット文字。 -.TP -.B [:blank:] -空白とタブ文字。 -.TP -.B [:cntrl:] -制御文字。 -.TP -.B [:digit:] -数値文字。 -.TP -.B [:graph:] -印字可能で可視な文字。 -(空白は印字可能ですが見えません。一方 -.B a -は印字可能かつ可視です。) -.TP -.B [:lower:] -アルファベット文字の小文字。 -.TP -.B [:print:] -印字可能な文字 (制御文字以外)。 -.TP -.B [:punct:] -句読点文字 (レター、数値、制御文字、空白文字のいずれでもない文字)。 -.TP -.B [:space:] -空白文字 (空白、タブ、フォームフィード等の少数の文字を指す)。 -.TP -.B [:upper:] -アルファベット文字の大文字。 -.TP -.B [:xdigit:] -16 進数の数値。 -.PP -例えば、\*(PX 標準以前では、アルファベットと数値の文字にマッチするためには、 -.B /[A\-Za\-z0\-9]/ -と書きました。しかし、別のアルファベット文字が文字集合に含まれる場合、 -それらにはマッチしません。 -\*(PX 文字クラスでは、 -.BR /[[:alnum:]]/ -と記述することができ、文字集合の -.I すべて -のアルファベットと数値にマッチします。 -.PP -文字リスト中には、更に 2 つの特殊シーケンスを使用できます。 -これらは、 -複数の文字によって表現される単一シンボル ( -.I 照合文字 -と呼ばれます) を持ち、 -複数の文字が -.I 参照 -やソートにおいては等価であるとされる、非 ASCII 文字集合に適用されます。 -(例えば、フランス語では単なる \*(lqe\*(rq とグレーブアクセント付きの e\` とでは -等価です。) -.TP -照合シンボル -参照シンボルは複数文字の参照要素であり、 -.B [. -と -.B .] -で括ります。 -例えば、 -.B ch -が参照要素の場合、 -.B [[.ch.]] -は正規表現となり、この参照要素にマッチします。 -一方、 -.B [ch] -は -.B c -か -.B h -にマッチする正規表現です。 -.TP -等価クラス -等価クラスは -等価な文字リストを指すロケール固有の名前です。名前は -.B [= -と -.B =] -で括ります。 -例えば、名前 -.B e -は \*(lqe,\*(rq \*(lqe\`,\*(rq, \*(lqe\`.\*(rq のすべてを表現するために使用されるかもしれません。 -この場合、 -.B [[=e=]] -は -.BR e , -.BR e\' , -.BR e\` -のいずれかにマッチする正規表現となります。 -.PP -これらの機能は英語以外のロケールにて非常に有用です。 -.I gawk -が正規表現のマッチングに使用するライブラリ関数は、 -現在 \*(PX 文字クラスのみを理解し、 -参照シンボルと等価クラスは理解しません。 -.PP -.BR \ey , -.BR \eB , -.BR \e< , -.BR \e> , -.BR \ew , -.BR \eW , -.BR \e` , -.B \e' -の演算子は -.IR gawk -固有であり、\*(GN 正規表現ライブラリの機能を元にした拡張です。 -.PP -様々なコマンドラインオプションによって、正規表現中の文字を -.I gawk -がどのように解釈するのかを制御できます。 -.TP -オプション無し -デフォルトでは、 -.I gawk -は上述の \*(PX 正規表現および \*(GN 正規表現のすべての機能を提供します。 -しかしながら、インターバル表現はサポートされません。 -.TP -.B \-\^\-posix -\*(PX 正規表現のみがサポートされ、\*(GN 演算子はサポートされません -(例えば、 -.B \ew -はリテラル -.B w -にマッチします)。 -インターバル表現は許されます。 -.TP -.B \-\^\-traditional -伝統的な Unix -.I awk -の正規表現がサポートされます。\*(GN 演算子、インターバル表現、 -\*(PX 文字クラス ( -.B [[:alnum:]] -など) はサポートされません。 -8 進または 16 進のエスケープシーケンスで表現される文字は、 -正規表現のメタ文字を表現するとしても、 -リテラルとして扱われます。 -.TP -.B \-\^\-re\-interval -.B \-\^\-traditional -が指定されていたとしても、正規表現中でインターバル表現をサポートします。 -.SS アクション -アクションは、ブレース -.B { -と -.B } -で囲みます。アクションは通常の代入、条件文、 -ループ文等からなります。演算子、制御文、入出力文は C 言語とほぼ同様です。 -.SS 演算子 -.PP -\*(AK での演算子を、優先順位の高いものから順に示します。 -.PP -.TP "\w'\fB*= /= %= ^=\fR'u+1n" -.BR ( \&.\|.\|. ) -グループ化。 -.TP -.B $ -フィールド参照。 -.TP -.B "++ \-\^\-" -インクリメント、デクリメント。前置も後置も可能。 -.TP -.B ^ -べき乗 -(\fB**\fR も同様の意味で使用できる。また \fB**=\fR 代入演算子も存在する)。 -.TP -.B "+ \- !" -単項のプラス、マイナス、論理否定。 -.TP -.B "* / %" -乗算、除算、剰余。 -.TP -.B "+ \-" -加算と減算。 -.TP -.I space -文字列結合。 -.TP -.PD 0 -.B "< >" -.TP -.PD 0 -.B "<= >=" -.TP -.PD -.B "!= ==" -通常の関係演算子。 -.TP -.B "~ !~" -正規表現マッチ、否定のマッチ。 -.B 注意: -.B ~ -と -.B !~ -の左辺に正規表現定数 -.RB ( /foo/ 等) -を用いてはいけません。正規表現定数は右辺にのみ置くことができます。式 -.BI "/foo/ ~ " exp -は -\fB(($0 ~ /foo/) ~ \fIexp\fB)\fR と等価であり、 -これは通常意図するものとは異なります。 -.TP -.B in -配列のメンバ。 -.TP -.B && -論理 AND。 -.TP -.B || -論理 OR。 -.TP -.B ?: -C 言語の条件式と同様です。 -.IB expr1 " ? " expr2 " : " expr3\c -の形式で使います。もし -.I expr1 -が真なら式の値は -.I expr2 -になり、そうでなければ -.I expr3 -になります。 -.I expr2 -か -.I expr3 -のうち片方のみが評価されます。 -.TP -.PD 0 -.B "= += \-=" -.TP -.B "*= /= %= ^=" -代入。絶対代入 -.BI ( var " = " value ) -と演算子代入 (他の形式) がサポートされています。 -.SS 制御ステートメント -.PP -制御ステートメントは以下のとおりです。 -.PP -.RS -.nf -\fBif (\fIcondition\fB) \fIstatement\fR [ \fBelse\fI statement \fR] -\fBwhile (\fIcondition\fB) \fIstatement \fR -\fBdo \fIstatement \fBwhile (\fIcondition\fB)\fR -\fBfor (\fIexpr1\fB; \fIexpr2\fB; \fIexpr3\fB) \fIstatement\fR -\fBfor (\fIvar \fBin\fI array\fB) \fIstatement\fR -\fBbreak\fR -\fBcontinue\fR -\fBdelete \fIarray\|\fB[\|\fIindex\|\fB]\fR -\fBdelete \fIarray\|\fR -\fBexit\fR [ \fIexpression\fR ] -\fB{ \fIstatements \fB} -.fi -.RE -.SS 入出力ステートメント -.PP -入出力ステートメントは以下のとおりです。 -.PP -.TP "\w'\fBprintf \fI書式, 式の列\fR'u+1n" -.BI close( file ) -ファイル (またはパイプ、下記参照) をクローズします。 -.TP -.B getline -次のレコードを -.B $0 -に読み込みます。 -.BR NF , -.BR NR , -.B FNR -が設定されます。 -.TP -.BI "getline <" file -ファイル -.I file -から次のレコードを -.B $0 -に読み込みます。 -.B NF -が設定されます。 -.TP -.BI getline " var" -次のレコードを変数 -.I var -に読み込みます。 -.BR NR , -.B FNR -が設定されます。 -.TP -.BI getline " var" " <" file -ファイル -.I file -から次のレコードを変数 -.I var -に読み込みます。 -.TP -.B next -現在のレコードに対する処理を終了し、次のレコードを読み込み、\*(AK プログ -ラムの最初のパターンから処理を開始します。 -C 言語の continue と類似した意味を持ちます。 -もし、入力データの終端に達した場合、 -.B END -ブロックが存在すれば実行されます。 -.TP -.B "nextfile" -現在の入力ファイルに対する処理を終了し、次の入力ファイルからレコードを -読み込みます。 -.B FILENAME -と -.B ARGIND -が更新され、 -.B FNR -が 1 にリセットされ、\*(AK プログラムの -最初のパターンから処理が開始されます。入力データの終端に達したときは、 -もし存在すれば、 -.B END -ブロックが実行されます。 -.B 注: -以前のバージョンの gawk では -.BR "next file" -と 2 語で使用されていました。この用法はまだ認識されますが、 -警告メッセージを生じさせますし、最終的には無くなる表現です。 -.TP -.B print -現在のレコードを出力します。 -出力レコードは -.B ORS -変数の値にて終端されます。 -.TP -.BI print " expr-list" -式を出力します。各式は -.B OFS -の値で区切られます。出力されるレコードの最後に -は -.B ORS -の値が付加されます。 -.TP -.BI print " expr-list" " >" file -式をファイル -.I file -に出力します。各式は -.B OFS -の値で区切られます。出力されるレコードの -最後には -.B ORS -の値が付加されます。 -.TP -.BI printf " fmt, expr-list" -書式付き出力です。 -.TP -.BI printf " fmt, expr-list" " >" file -ファイル -.I file -への書式付き出力です。 -.TP -.BI system( cmd-line ) -コマンド -.I cmd-line -を実行し、終了ステータスを返します (\*(PX に対応しない -システムでは使用できない場合があります)。 -.TP -\&\fBfflush(\fR[\fIfile\|\fR]\fB)\fR -オープンされている出力ファイルまたはパイプ -.I file -に関連づけられているバッファをフラッシュします。 -.I file -を指定しないと、標準出力がフラッシュされます。 -.I file -が空文字列の場合、オープンされているすべてのファイルとパイプのバッファを -フラッシュします。 -.PP -その他の形式のリダイレクトとして以下のものが利用可能です。 -.B print -と -.B printf -に対して、 -.BI >> " file" -を指定すると出力はファイル -.I file -に追加され、 -.BI | " command" -は出力をパイプに対して行います。同様に、 -.IB command "| getline" -はコマンドの出力から -.B getline -を行ないます。 -.B getline -はファイル終端では 0 を、エラー時には \-1 を返します。 -.PP -注: ループ中で -.BR getline -へパイプ書き込みする場合または -.B print -か -.B printf -からパイプ読み取りする場合、 -コマンドの新インスタンスを作成するために -.B close() -を使用することが必要です。 -パイプが EOF を返すときでも、AWK は自動的にはパイプを閉じません。 -.SS \fIprintf\fP\| ステートメント -.PP -\*(AK での -.B printf -ステートメントと -.B sprintf() -関数 (後述参照) は、以下の変換指定書式を受け付けます。 -.TP -.B %c -1 つの \s-1ASCII\s+1 文字。 -.B %c -に対応する引数が数値なら、その値を \s-1ASCII\s+1 コードとみなし -て文字に変換します。そうでなければ、引数は文字列であると解釈され、その 1 -文字目が出力されます。 -.TP -.B %d -.PD 0 -.TP -.B %i -10 進数 (整数部分)。 -.TP -.PD 0 -.B %e -.TP -.PD -.B %E -.B [-]d.dddddde[+-]dd -という形式の浮動小数点数。 -.B %E -形式では -.B e -の代りに -.B E -が使用されます。 -.TP -.B %f -.B [-]ddd.dddddd -という形式の浮動小数点数。 -.TP -.PD 0 -.B %g -.TP -.PD -.B %G -.B %e -と -.B %f -の短い方の形式の浮動小数点数。余計な 0 は省略されます。 -.B %G -形式では -.B %e -の代りに -.B %E -を使用します。 -.TP -.B %o -符号なしの 8 進数 (整数)。 -.TP -.B %u -符号なしの 10 進数 (整数)。 -.TP -.B %s -文字列。 -.TP -.PD 0 -.B %x -.TP -.PD -.B %X -符号なしの 16 進数 (整数)。 -.B %X -形式では、 -.B abcdef -の代りに -.B ABCDEF -を用います。 -.TP -.B %% -単一の文字 -.B % -。引数は使用しません。 -.PP -.B % -と上記の制御文字との間にオプショナルな追加のパラメータを置く -ことができます。以下にそれらを示します。 -.TP -.B \- -左寄せ。 -.TP -.I 空白 -数値変換において、正の値のプレフィックスは空白となり、 -負の値のプレフィックスはマイナス記号となります。 -.TP -.B + -プラス記号は幅修正子 (後述) の前に使用し、 -整形されるデータが正であったとしても、 -数値変換に対して常に符号を付けることを指示します。 -.B + -は空白修正子に優先します。 -.TP -.B # -ある制御レターに対して「別の形式」を使用します。 -.BR %o -に対しては先行する 0 を与え、 -.BR %x -と -.BR %X -に対しては非 0 の結果に対して先行する -.BR 0x -と -.BR 0X -を与えます。 -.BR %e , -.BR %E , -.B %f -に対しては結果に常に小数点を含めます。 -.BR %g , -.B %G -に対しては結果の末尾から 0 を取り除きません。 -.TP -.B 0 -先頭の -.B 0 -(ゼロ) はフラグとして動作し、 -出力を空白ではなく 0 でパディングすることを示します。 -これは非数値の出力書式に対しても適用されます。 -このフラグが有効なのは、フィールド幅が印字される値の幅より広いときだけです。 -.TP -.I width -フィールドが指定した幅 -.I width -になるようにパディングされます。フィールドは通常空白でパディングされます。 -.B 0 -フラグが使用された場合には 0 でパディングされます。 -.TP -.BI . prec -印字において使用する精度を数値で指定します。 -.BR %e , -.BR %E , -.B %f -の書式に対しては、小数点の右側に印字される数字の数を指定します。 -.BR %g , -.B %G -の書式に対しては、仮数部の最大数を指定します。 -.BR %d , -.BR %o , -.BR %i , -.BR %u , -.BR %x , -.B %X -の書式に対しては、印字される数字の最小数を指定します。 -文字列に対しては、印字される文字列からとりだされる最大の文字数を指定します。 -.PP -\*(AN C の -.B printf() -の動的な幅 -.I width -と精度 -.I prec -の指定機能が使用できます。 -.B 幅 -または -.B 精度 -の指定部分に -.B * -を指定することで、その値を -.B printf -または -.B sprintf() -への引数で指定できます。 -.SS 特殊ファイル名 -.PP -.B print -や -.B printf -で書き込みときでも、 -.B getline -でファイルから読み取るときでも、 -入出力リダイレクトを行う場合、 -.I gawk -は内部的な特殊なファイル名を解釈します。 -これらのファイル名により、親プロセス (通常はシェルです) から受け継いだ -オープン状態のファイル記述子を用いて入出力を行ったり、実行中の -.I gawk -プロセスに関する情報を得ることができます。 -特殊ファイル名は以下のとおりです。 -.TP \w'\fB/dev/stdout\fR'u+1n -.B /dev/pid -現在のプロセスのプロセスID (10 進数で、最後に改行が付きます) を -読み込むことができます。 -.TP -.B /dev/ppid -現在のプロセスの親のプロセスのプロセスID (10 進数で、最後に改行が付きます) を -読み込むことができます。 -.TP -.B /dev/pgrpid -現在のプロセスのプロセスグループ ID (10 進数で、最後に改行が付きます) -を読み込むことができます。 -.TP -.B /dev/user -このファイルを読むことで、改行で終わる単一のレコードが得られます。 -各フィールドは空白で区切られています。 -.B $1 -は -.IR getuid (2) -システムコールの値、 -.B $2 -は -.IR geteuid (2) -システムコールの値、 -.B $3 -は -.IR getgid (2) -システムコールの値、 -.B $4 -は -.IR getegid (2) -システムコールの値です。もし、さらにフィールドがあれば、 -それは -.IR getgroups (2) -システムコールが返すグループ ID のリストです。 -全てのシステムで複数のグループがサポートされているわけではありません。 -.TP -.B /dev/stdin -標準入力。 -.TP -.B /dev/stdout -標準出力。 -.TP -.B /dev/stderr -標準エラー出力。 -.TP -.BI /dev/fd/\| n -オープンされたファイル記述子 -.I n -に対応しているファイル。 -.PP -エラーメッセージを出力するには、以下の方法が便利です。 -.PP -.RS -.ft B -print "You blew it!" > "/dev/stderr" -.ft R -.RE -.PP -もしこの機能が無かったら、次のようにするしかないところです。 -.PP -.RS -.ft B -print "You blew it!" | "cat 1>&2" -.ft R -.RE -.PP -これらのファイル名は、コマンドラインのデータファイル指定で使うこともできます。 -.SS 数値関数 -.PP -\*(AK は以下の定義済み数値関数を持っています。 -.PP -.TP \w'\fBsrand(\fR[\fIexpr\|\fR]\fB)\fR'u+1n -.BI atan2( y , " x" ) -.I y/x -の逆正接をラジアンで与えます。 -.TP -.BI cos( expr ) -.I expr -の余弦をラジアンで与えます。 -.TP -.BI exp( expr ) -指数関数。 -.TP -.BI int( expr ) -整数への切捨て。 -.TP -.BI log( expr ) -自然対数。 -.TP -.B rand() -0 から 1 の間の乱数を与えます。 -.TP -.BI sin( expr ) -.I expr -の正弦をラジアンで与えます。 -.TP -.BI sqrt( expr ) -平方根。 -.TP -\&\fBsrand(\fR[\fIexpr\|\fR]\fB)\fR -.I expr -の値を乱数生成関数の種として用います。式が指定されなかった場合は、 -時刻が用いられます。直前の種の値を返します。 -.SS 文字列関数 -.PP -.I gawk -は以下の定義済み文字列関数を持っています。 -.PP -.TP "\w'\fBsprintf(\|\fIfmt\fB\|, \fIexpr-list\|\fB)\fR'u+1n" -\fBgensub(\fIr\fB, \fIs\fB, \fIh \fR[\fB, \fIt\fR]\fB)\fR -対象文字列 -.I t -から正規表現 -.I r -のマッチを探します。 -.I h -が -.B g -または -.B G -で開始する文字列の場合、マッチする -.I r -をすべて -.I s -に置き換えます。 -そうでない場合、 -.I h -は何番目の -.I r -のマッチを置き換えるのかを示します。 -.I t -が与えられない場合、代りに -.B $0 -が使用されます。 -置換テキスト -.I s -では、シーケンス -.BI \e n\fR -ただし -.I n -は 1 から 9 までの数字を使用して、 -.I n -番目にマッチした括弧付きサブ式を示すことができます。 -シーケンス -.B \e0 -は文字 -.B & -と同様、マッチしたテキスト全体を表します。 -.B sub() -や -.B gsub() -とは異なり、修正された文字列が関数の結果として返され、 -元の対象テキストは変更され -.I ません -。 -.TP "\w'\fBsprintf(\|\fIfmt\fB\|, \fIexpr-list\|\fB)\fR'u+1n" -\fBgsub(\fIr\fB, \fIs \fR[\fB, \fIt\fR]\fB)\fR -文字列 -.I t -中で正規表現 -.I r -にマッチした部分をすべて -.I s -に置換します。置換の個数を返します。 -.I t -を指定しなかった場合は -.B $0 -が用いられます。 -置換テキストでは、 -.B & -は実際にマッチしたテキストで置き換えられます。 -.B \e& -を使用するとリテラルの -.B & -を得ることができます。 -.BR sub() , -.BR gsub() , -.B gensub() -における -.B & -とバックスラッシュに関する完全な議論は -.I "Effective AWK Language Programming" -を参照してください。 -.TP -.BI index( s , " t" ) -文字列 -.I s -中に含まれる文字列 -.I t -の位置を返します。 -.I t -が含まれていない場合は 0 を返します。 -.TP -\fBlength(\fR[\fIs\fR]\fB) -文字列 -.I s -の長さを返します。 -.I s を指定しなかった場合には -.B $0 -の長さを返します。 -.TP -.BI match( s , " r" ) -文字列 -.I s -中で正規表現 -.I r -にマッチする位置を返します。マッチしない場合は 0 を -返します。 -.B RSTART -と -.B RLENGTH -の値が設定されます。 -.TP -\fBsplit(\fIs\fB, \fIa \fR[\fB, \fIr\fR]\fB)\fR -文字列 -.I s -を正規表現 -.I r -を用いて分割し、配列 -.I a -に格納します。 -フィールド数を返します。 -.I r -が省略され -た場合は -.B FS -が用いられます。配列 -.I a -の内容は、分割前にクリアされます。 -分割は、上述のフィールド分割と同じ動作を行います。 -.TP -.BI sprintf( fmt , " expr-list" ) -書式 -.I fmt -に従って -.I exp-list -を整形表示し、結果の文字列を返します。 -.TP -\fBsub(\fIr\fB, \fIs \fR[\fB, \fIt\fR]\fB)\fR -.B gsub() -と似ていますが、最初にマッチした文字列のみが置換されます。 -.TP -\fBsubstr(\fIs\fB, \fIi \fR[\fB, \fIn\fR]\fB)\fR -文字列 -.I s -の -.I i -文字目から始まる最大 -.I n -文字の部分文字列を返します。 -.I n -が省略された場合、 -.I i -文字目以降の部分文字列が返されます。 -.TP -.BI tolower( str ) -文字列 -.I str -をコピーし、大文字をすべて小文字に変換したものを返します。 -アルファベットでない文字は変化しません。 -.TP -.BI toupper( str ) -文字列 -.I str -をコピーし、小文字をすべて大文字に変換したものを返します。 -アルファベットでない文字は変化しません。 -.SS 時間関数 -.PP -タイムスタンプを含んだログファイルの処理は -\*(AK プログラムの主な使い道の1つですから、 -.I gawk -はタイムスタンプを取り出したり、フォーマット -するための 2 つの関数を提供します。 -.PP -.TP "\w'\fBsystime()\fR'u+1n" -.B systime() -基準時点からの経過秒数を返します -(\*(PX システムでは、基準時点は UTC で 1970 年 1 月 1 日 0:00 です)。 -.TP -\fBstrftime(\fR[\fIformat \fR[\fB, \fItimestamp\fR]]\fB)\fR -書式 -.I format -に従って -.I timestamp -をフォーマットします。 -.I timestamp -は -.B systime() -が返す値と同じ形式でなければなりません。 -.I timestamp -が省略された場合、現在の日付が使用されます。 -.I format -が省略された場合、 -.IR date (1) -が出力に使用するものと同じデフォルトフォーマットが使用されます。 -利用可能なフォーマットについては、\*(AN C の -.B strftime() -関数の仕様を参照して下さい。パブリックドメインな -.IR strftime (3) -とそのマニュアルページが -.I gawk -とともに配布されています。もし、 -.I gawk -を作成するためにその -.B strftime -を用いた場合は、そのマニュアルに記述されている変換書式が -.I gawk -でも利用可能です。 -.SS 文字列定数 -.PP -\*(AK での文字列定数は、ダブルクォート (\fB"\fR) に狭まれた文字の列です。 -文字列内では、C 言語のようにいくつかの -.I エスケープシーケンス -が使えます。 -.PP -.TP \w'\fB\e\|\fIddd\fR'u+1n -.B \e\e -バックスラッシュそのもの。 -.TP -.B \ea -「警告」文字。通常は \s-1ASCII\s+1 \s-1BEL\s+1 文字です。 -.TP -.B \eb -バックスペース。 -.TP -.B \ef -改ページ (フォームフィード)。 -.TP -.B \en -改行。 -.TP -.B \er -復帰 (キャリッジリターン)。 -.TP -.B \et -水平タブ。 -.TP -.B \ev -垂直タブ。 -.TP -.BI \ex "\|hex digits" -.B \ex -に続く 16 進数で表現された文字。\*(AN C と同様に、 -.B \ex -に続くすべての 16 進数字 -はエスケープシーケンスの一部であるとみなされます。 -(この機能によりコミッティによる言語デザインが分かります。) -例えば、\fB"\ex1B"\fR は -\s-1ASCII\s+1 \s-1ESC\s+1 (エスケープ) 文字です。 -.TP -.BI \e ddd -1 桁か 2 桁か 3 桁の 8 進数で表現された文字。例えば、 \fB"\e033"\fR は -\s-1ASCII\s+1 \s-1ESC\s+1 (エスケープ) 文字です。 -.TP -.BI \e c -文字 c そのもの。 -.PP -エスケープシーケンスは正規表現定数内でも用いることができます (例えば、 -.B "/[\ \et\ef\en\er\ev]/" -は空白文字にマッチします)。 -.PP -互換モードでは、8 進および 16 進のエスケープシーケンスで表現される文字は、 -正規表現定数として使用された場合、リテラルとして扱われます。 -それゆえ、 -.B /a\e52b/ -は -.B /a\e*b/ -と等価です。 -.SH 関数 -\*(AK では関数を以下のようにして定義します。 -.PP -.RS -\fBfunction \fIname\fB(\fIparameter list\fB) { \fIstatements \fB}\fR -.RE -.PP -関数は、パターンまたはアクションの式から呼び出されたときに実行されます。 -関数呼び出しにおいて与えられた実引数が、関数宣言における仮引数に -受け渡されます。 -このとき配列の場合は参照渡しが行われ、他の変数の場合は値渡しで行われます。 -.PP -元々 \*(AK に関数は備わっていませんでしたので、局所変数の機構はあまり -スマートではありません。 -局所変数は引数リストの余分な引数として宣言します。局所変数と関 -数引数を区別するため、余分な空白で区切るのが慣習です。例えば、以下のよ -うにします。 -.PP -.RS -.ft B -.nf -function f(p, q, a, b) # a & b は局所変数 -{ - \&.\|.\|. -} - -/abc/ { .\|.\|. ; f(1, 2) ; .\|.\|. } -.fi -.ft R -.RE -.PP -関数呼び出しにおける左括弧は、空白を狭まずに関数名の直後に -置かなければいけません。 -これは、文字列結合演算子との曖昧さを生じさせないために必要です。 -この制限は、上述の組み込み関数にはあてはまりません。 -.PP -関数は、他の関数を呼び出したり、自分自身を再帰的に呼び出すことができます。 -局所変数として用いられる関数引数は、関数起動時に空文字列および 0 -に初期化されます。 -.PP -関数から値を返すには -.BI return " expr" -を使用してください。 -値を指定しない場合、または関数の終りから \*(lq落ちる\*(rq -(訳注: 関数を閉じるブレースに到達する) ことにより関数から戻る場合、 -値は未定義です。 -.PP -.B \-\^\-lint -が指定されたとき、 -.I gawk -は実行時ではなくパーズ時に未定義関数の呼び出しに関して警告します。 -実行時の未定義関数の呼び出しは致命的なエラーとなります。 -.PP -.B function -のかわりに -.B func -を用いることができます。 -.SH 使用例 -.nf -\*(lq/etc/passwd\*(rq から全ユーザのログイン名を取り出し、ソートして出力します。 - -.ft B - BEGIN { FS = ":" } - { print $1 | "sort" } - -.ft R -ファイルの行数を数える。 - -.ft B - { nlines++ } - END { print nlines } - -.ft R -行番号をつける。 - -.ft B - { print FNR, $0 } - -.ft R -全ファイルを通した行番号をつける。 - -.ft B - { print NR, $0 } -.ft R -.fi -.SH 関連項目 -.IR egrep (1), -.IR getpid (2), -.IR getppid (2), -.IR getpgrp (2), -.IR getuid (2), -.IR geteuid (2), -.IR getgid (2), -.IR getegid (2), -.IR getgroups (2) -.PP -.IR "The AWK Programming Language" , -Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, -Addison-Wesley, 1988. ISBN 0-201-07981-X. -.PP -.IR "Effective AWK Language Programming" , -Edition 1.0, published by the Free Software Foundation, 1995. -.SH POSIX 互換 -.I gawk -は最新版の \*(UX -.I awk -との互換性だけでなく、\*(PX 標準との互換性も追求しています。 -このため -.I gawk -には以下のような機能が取り入れられています。 -これらの機能は \*(AK 本には述べられていませんが、 -Bell Labs および \*(PX 標準の -.I awk -が有している機能です。 -.PP -プログラム実行前に変数代入を行なう -.B \-v -オプションは新しい物です。 -\*(AK 本によれば、コマンドラインで指定された変数代入は -.I awk -が引数をファイル名としてオープンする際に行なわれることになります。つまり -これは -.B BEGIN -ブロックの実行後です。しかしながら初期の頃の実装では、引数の中でファイル名に -先立って変数代入が指定されている場合には、代入は -.B BEGIN -ブロック実行の -.I 前に -行われていました。そしてアプリケーションは、この「仕様」に依存する -ようになりました。 -.I awk -がそのドキュメントに合うように直された時、昔の動作に依存している -アプリケーションの便宜を図るためにこのオプションが加えられました。 -(この仕様は AT&T および \*(GN の開発者達によって合意されました。) -.PP -独自機能のための -.B \-W -オプションは \*(PX 標準に従ったものです。 -.PP -引数の列に特別なオプション \*(lq\-\^\-\*(rq を指定すると、 -.I gawk -はそこがオプションの終わりであると解釈します。 -互換モードにおいては未定義オプションは警告が出力され、それ以外のものは -無視されます。 -通常の実行においては残りの引数は \*(AK プログラムに引き渡されます。 -.PP -\*(AK 本は -.B srand() -の返り値を定義していません。 -\*(PX 標準 -では、その関数が使っている種を返し、 -乱数シーケンスを追跡できるようにしています。 -したがって -.I gawk -における -.B srand() -も現在の種を返すようにしてあります。 -.PP -その他にも以下のような新機能があります。 -.B \-f -オプションの複数回使用 (MKS -.IR awk に倣いました); -.B ENVIRON -配列; -エスケープシーケンス -.B \ea -と -.B \ev -( -.I gawk -で最初に実装され、AT&T の -.I awk -にフィードバックされました); -組み込み関数 -.B tolower() -と -.B toupper() -(AT&T に倣いました); -.B printf -における \*(AN C 変換指定 -(AT&T 版で最初に実装されました)。 -.SH GNU 拡張 -.I gawk -は \*(PX -.I awk -に対して多くの拡張が行なわれています。 -この節ではそれらについて解説します。 -.B \-\^\-traditional -オプション付きで -.I gawk -を起動することによって、 -ここで述べられている拡張機能をすべて禁止することができます。 -.PP -.I gawk -が持つ以下の機能は -\*(PX -.I awk -では使用できません。 -.RS -.TP \w'\(bu'u+1n -\(bu -エスケープシーケンス -.B \ex -。( -.B \-\^\-posix -で抑止できます。) -.TP \w'\(bu'u+1n -\(bu -.B fflush() -関数。( -.B \-\^\-posix -で抑止できます。) -.TP -\(bu -.BR systime() , -.BR strftime() , -.B gensub() -の各関数。 -.TP -\(bu -入出力リダイレクトで利用可能な特殊ファイル名は理解されません。 -.TP -\(bu -変数 -.BR ARGIND , -.BR ERRNO , -.B RT -は特殊変数ではありません。 -.TP -\(bu -変数 -.B IGNORECASE -とその副作用は利用できません。 -.TP -\(bu -変数 -.B FIELDWIDTHS -と固定長フィールド分割。 -.TP -\(bu -.B RS -の正規表現としての使用。 -.TP -\(bu -.B FS -に空文字列を設定することにより各文字を切り出す能力と、 -.B split() -の 3 番目の引数。 -.TP -\(bu -.B \-f -オプションで指定されたファイル名についてパス検索を行わないこと。 -よって、環境変数 -.B AWKPATH -は特殊な変数ではありません。 -.TP -\(bu -現在の入力ファイルに対する処理を終わらせるために使用される -.B "nextfile" -。 -.TP -\(bu -配列全体を削除するために使用される -.BI delete " 配列" -。 -.RE -.PP -\*(AK 本は関数 -.B close() -の返り値を定義していません。 -.I gawk -の -.B close() -は、ファイルやパイプをクローズする際に呼び出す -.IR fclose (3) -や -.IR pclose (3)、 -からの返り値を返します。 -.PP -オプション -.B \-\^\-traditional -付きで -.I gawk -を起動し -.B \-F -オプションへの引数 -.I fs -として \*(lqt\*(rq を与えた場合に、 -.B FS -の値はタブ文字に設定されます。 -.B "gawk \-F\et \&.\|.\|." -とタイプしても、シェルが単に \*(lqt\*(rq をクォートするので、\*(lq\et\*(rq は -.B \-F -オプションに渡されません。 -これは少々見苦しい特殊事例ですので、デフォルトの動作としては -採用されていません。 -.B \-\^\-posix -を指定した場合にも、この動作は行なわれません。 -タブ文字をフィールドセパレータとして使用したい場合には、 -クォートを使用するのが最良です: -.BR "gawk \-F'\et' \&.\|.\|." . -.ig -.PP -If -.I awk -was compiled for debugging, it will -accept the following additional options: -.TP -.PD 0 -.B \-Wparsedebug -.TP -.PD -.B \-\^\-parsedebug -Turn on -.IR yacc (1) -or -.IR bison (1) -debugging output during program parsing. -This option should only be of interest to the -.I gawk -maintainers, and may not even be compiled into -.IR gawk . -.. -.SH 歴史的機能 -.I gawk -は歴代の \*(AK の実装にあった 2 つの機能を備えています。 -1 つめとして、組み込み関数 -.B length() -は引数無しで呼び出せるだけでなく、さらに括弧無しでも呼び出せます! -したがって -.RS -.PP -.ft B -a = length # Holy Algol 60, Batman! -.ft R -.RE -.PP -は以下の2例と同じです。 -.RS -.PP -.ft B -a = length() -.br -a = length($0) -.ft R -.RE -.PP -\*(PX 標準ではこの機能は \*(lqdeprecated\*(rq と注意書きされており、 -.I gawk -ではコマンドラインで -.B \-\^\-lint -を指定した場合に、この機能の使用に対して警告を出力します。 -.PP -もう 1 つは、 -.BR while , -.BR for , -.B do -ループ本体の外でも -.BR continue , -.B break -ステートメントを使用できるという機能です。 -伝統的な \*(AK の実装では、このように使用した -.B continue -ステートメントを -.B next -ステートメントと等価なものとして扱ってきました。 -.I gawk -では -.B \-\^\-traditional -が指定された場合に、この機能を使うことができます。 -.SH 環境変数 -環境に -.B POSIXLY_CORRECT -が存在する場合には、 -.I gawk -はコマンドラインで -.B \-\^\-posix -が指定されている時と全く同じ動作をします。 -このとき -.B \-\^\-lint -が指定されていると -.I gawk -はこの作用についての警告メッセージを出力します。 -.PP -.B AWKPATH -環境変数を使用して、 -.I gawk -が -.B \-f -および -.B \-\^\-file -オプションで指定されたファイル名を検索するディレクトリを指定できます。 -.SH バグ -コマンドラインでの変数代入機能を使用するには、変数への代入を直接 -コマンドラインに書けばよく、 -.B \-F -オプションをつける必要はありません。 -このオプションは昔の -.I awk -との互換性のためだけに残されています。 -.PP -ファイル -.B /dev/fd -および -.BR /dev/stdin , -.BR /dev/stdout , -.B /dev/stderr -を実際にサポートしているシステムでの -.I gawk -からは、それらがないシステムとは違った出力が得られるかもしれません。 -.I gawk -はそれらのファイルを内部で解釈する際に標準出力への出力を -.B /dev/stdout -への出力と同期させますが、それらのファイルを持つシステムでは -出力はそれぞれ異なるファイルへ向けられます。 -利用者の方で気を付けるようにしてください (Caveat Emptor)。 -.PP -文法的に誤った単一文字プログラムはパーズスタックを溢れさせる傾向があり、 -まったく分からないメッセージを生成する傾向にあります。 -このようなプログラムの診断は驚くべきことに一般に難しく、 -診断の努力はまったく無意味になります。 -.SH バージョン情報 -このマニュアルは -.IR gawk -バージョン 3.0.6 について記載しています。 -.SH 作者 -\*(UX -.I awk -の最初のバージョンは、AT&T Bell Labs の Alfred Aho と -Peter Weinberger および Brian Kernighan によって設計、実装されました。 -Brian Kernighan はその保守と改良を続けています。 -.PP -Free Software Foundation の Paul Rubin と Jay Fenlason -が、Seventh Edition \*(UX で配布された最初のバージョンの -.I awk -と互換性を持つように -.I gawk -を書きました。 -John Woods は数々のバグ修正を送って下さいました。 -David Trueman は、Arnold Robbins が送って下さった内容をもとに、 -.I gawk -を新バージョンの \*(UX -.I awk -互換にしました。 -.PP -DOS への最初の移植は Conrad Kwok と Scott Garfinkle によって -行なわれました。 -現在は Scott Deifik が DOS 版の保守をしています。 -Pat Rankin は VMS への移植を行ない、Michal Jaegermann は Atari ST への -移植を行ないました。 -OS/2 への移植は Kai Uwe Rommel が Darrel Hankerson の助けを借りて -行ないました。 -Fred Fish が Amiga サポートの提供を行いました。 -.SH バグレポート -.I gawk -のバグを見付けたら、電子メールを -.B bug-gawk@gnu.org -宛に送ってください。 -電子メールには、オペレーティングシステムとそのリビジョン、 -.I gawk -のリビジョン、コンパイルに使用した C コンパイラ、 -問題を再現するできるだけ小さなテストプログラムとデータを記述してください。 -.PP -バグレポートを送る前に 2 つのことを行ってください。 -第 1 に、最新の -.I gawk -を使用されていることを確認してください。 -多くの (通常微妙な) バグが各々のリリースで修正されていますので、 -ご使用のものが古い場合には問題は既に解決されているかもしれません。 -第 2 に、このマニュアルページとリファレンスマニュアルを注意深く読み、 -あなたがバグだと思うものが確かにバグであり、 -大きく変わった言語仕様ではないことを確認してください。 -.PP -バグレポートを -.B comp.lang.awk -に投稿することだけはしないでください。 -.I gawk -の開発者達は時々このニュースグループを読みますが、 -バグレポートをこのニュースグループに投稿しても -バグレポートとして信頼性がありません。 -上記のアドレスへの電子メールでお願いします。 -.SH 謝辞 -Bell Labs の Brian Kernighan はテストおよびデバッグの間、貴重な助力を -提供して下さいました。 -感謝致します。 -.SH COPYING PERMISSIONS -Copyright \(co 1996\-2000 Free Software Foundation, Inc. -.PP -Permission is granted to make and distribute verbatim copies of -this manual page provided the copyright notice and this permission -notice are preserved on all copies. -.ig -Permission is granted to process this file through troff and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual page). -.. -.PP -Permission is granted to copy and distribute modified versions of this -manual page under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. -.PP -Permission is granted to copy and distribute translations of this -manual page into another language, under the above conditions for -modified versions, except that this permission notice may be stated in -a translation approved by the Foundation. diff --git a/ja_JP.eucJP/man/man1/h2ph.1 b/ja_JP.eucJP/man/man1/h2ph.1 deleted file mode 100644 index 5930343dcd..0000000000 --- a/ja_JP.eucJP/man/man1/h2ph.1 +++ /dev/null @@ -1,44 +0,0 @@ -.\" $FreeBSD$ -.TH H2PH 1 "August 8, 1990" -.AT 3 -.SH 名称 -h2ph \- C のヘッダファイル .h を Perl ヘッダファイル .ph に変換する -.SH 書式 -.B h2ph [headerfiles] -.SH 解説 -.I h2ph -は指定された全ての C のヘッダファイルを、 -対応する Perl のヘッダファイル形式に変換します。 -以下のように、/usr/include ディレクトリの中で実行するのが -最も簡単です: -.nf - - cd /usr/include; h2ph * sys/* - -.fi -引数なしで実行すると、標準入力から入力して変換し、標準出力に出力します。 -.SH 環境変数 -環境変数は使用しません。 -.SH 関連ファイル -/usr/include/*.h -.br -/usr/include/sys/*.h -.br -等。 -.SH 作者 -Larry Wall -.SH 関連項目 -perl(1) -.SH 診断 -関連するファイルが読めないあるいは書き込めない場合は、 -いつもの警告メッセージを出力します。 -.SH バグ -%sizeof 配列を作りません。 -.PP -h2ph は全ての C の構造を取り扱えませんが、 -h2ph が変換できる定義を得られるように eval の中にある定義を分離しようと -試みます。 -.PP -h2ph は単に大雑把なツールのつもりです。 -生成されたファイルは吟味してみる必要があるかも知れません。 -.ex diff --git a/ja_JP.eucJP/man/man1/ipnat.1 b/ja_JP.eucJP/man/man1/ipnat.1 new file mode 100644 index 0000000000..8ae84e087b --- /dev/null +++ b/ja_JP.eucJP/man/man1/ipnat.1 @@ -0,0 +1,53 @@ +.\" $FreeBSD$ +.TH IPNAT 1 +.SH 名称 +ipnat \- NAT のユーザインタフェース +.SH 書式 +.B ipnat +[ +.B \-lnrsvCF +] +.B \-f <\fIfilename\fP> +.SH 解説 +.PP +\fBipnat\fP は列挙されたファイルをオープンし ("\-" は標準入力として扱います)、 +そのファイルを解釈して、 +IP NAT に対し追加または削除するルールセットを求めます。 +.PP +\fBipnat\fP が処理する各ルールは、解釈に問題がなければ、 +カーネル内部のリストに追加されます。 +ルールは、\fBipnat\fP に与えられた時の出現順に一致する順序で +内部リストの最後に追加されます。 +.SH オプション +.TP +.B \-C +現在の NAT ルールリスト (NAT ルール) から全エントリを除去します。 +.TP +.B \-F +現在の NAT 変換テーブル中のすべての活動エントリ +(現在活動状態の NAT マッピング) +を除去します。 +.TP +.B \-l +現在の NAT テーブルエントリマッピングのリストを表示します。 +.TP +.B \-n +このフラグ (無変更) は、\fBipnat\fP が実際に ioctl を呼び出すことと、 +現在実行中のカーネルを変更することを妨げます。 +.\" ipf -> ipnat だと思う +.\" ipnat にしときました(kuma) +.TP +.B \-s +NAT 統計を取り出して表示します。 +.TP +.B \-r +マッチする NAT ルールを、内部リストに追加するのではなく、削除します。 +.TP +.B \-v +冗長モードをオンにします。 +ルール処理とアクティブなルール/テーブルエントリに関する情報を表示します。 +.DT +.SH 関連ファイル +/dev/ipnat +.SH 関連項目 +ipnat(5), ipf(8), ipfstat(8) diff --git a/ja_JP.eucJP/man/man1/key.1 b/ja_JP.eucJP/man/man1/key.1 deleted file mode 100644 index 6fab182299..0000000000 --- a/ja_JP.eucJP/man/man1/key.1 +++ /dev/null @@ -1,52 +0,0 @@ -.\" from: @(#)key.1 1.0 (Bellcore) 12/2/91 -.\" %FreeBSD: src/usr.bin/key/key.1,v 1.5.2.2 2001/03/06 12:52:43 ru Exp % -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/key.1,v 1.8 2001/05/14 01:07:25 horikawa Exp $ -.\" -.Dd December 2, 1991 -.Dt KEY 1 -.Os -.Sh 名称 -.Nm key -.Nd S/Key 試行の応答を計算するための独立プログラム -.Sh 書式 -.Nm -.Op Fl n Ar count -.Ar sequence -.Ar key -.Sh 解説 -.Nm key -は、オプションの count を表示すべき一回利用パスワード -(one time access password) の数として、 -そして (最大の) シーケンス番号とキーをコマンドライン引数として取ります。 -そして、ユーザに秘密のパスワードの入力を促し、 -単語と 16 進フォーマットの両方の応答を作成します。 -.Pp -次のオプションが使用可能です: -.Bl -tag -width Fl -.It Fl n Ar count -出力する一回利用パスワードの数です。 -デフォルトは 1 です。 -.El -.Sh 使用例 -使用例です。 -.Bd -literal -offset indent -compact ->key -n 5 99 th91334 -Enter password: <your secret password is entered here> -OMEN US HORN OMIT BACK AHOY -\&.... 4 more passwords. -> -.Ed -.Sh 関連項目 -.Xr keyinfo 1 , -.Xr keyinit 1 , -.Xr skey 1 -.Sh 作者 -.An -nosplit -コマンドは、 -.An Phil Karn , -.An Neil M. Haller , -.An John S. Walden -によって -作られました。 -.Sh 連絡先 -.Aq staff@thumper.bellcore.com diff --git a/ja_JP.eucJP/man/man1/keyinfo.1 b/ja_JP.eucJP/man/man1/keyinfo.1 deleted file mode 100644 index 7059af5f86..0000000000 --- a/ja_JP.eucJP/man/man1/keyinfo.1 +++ /dev/null @@ -1,64 +0,0 @@ -.\" from: @(#)keyinfo.1 1.1 (Bellcore) 7/20/93 -.\" %FreeBSD: src/usr.bin/keyinfo/keyinfo.1,v 1.7.2.2 2001/12/21 10:07:20 ru Exp % -.\" $FreeBSD$ -.\" -.Dd April 26, 1996 -.Dt KEYINFO 1 -.Os -.Sh 名称 -.Nm keyinfo -.Nd 現在の S/Key シーケンスナンバーとキーを表示する -.Sh 書式 -.Nm -.Op Ar username -.Sh 解説 -.Nm -はユーザ名のオプションをとり、 -ユーザの現在の S/Key データベースである -.Pa /etc/skeykeys -にあるシーケンスナンバとキーが表示されます。 -このコマンドはフォームの中での -.Xr key 1 -コマンドの結合によって、旅行に出かける時に使うパスワードの一覧表を -生成する時に有用です。 -.Bd -literal -offset indent -key -n <number of passwords> `keyinfo` | lpr -.Ed -.Pp -オプションの -.Ar username -引数は、S/key 情報の表示対象のユーザを指定します。 -デフォルトでは、本コマンドを起動したユーザの S/key 情報を表示します。 -スーパユーザのみが、他のユーザの S/key 情報を問い合わせ可能です。 -.Sh 使用例 -実行例を以下に示します: -.Bd -literal -offset indent -$ keyinfo -.Ed -.Pp -これは次の出力になります: -.Bd -literal -offset indent -98 ws91340 -.Ed -.Sh 診断 -.Nm -は、要求されたユーザのキーが見付かったときに終了コード 0 を返し、 -そうでない場合に終了コード 1 を返します。 -.Sh 関連項目 -.Xr key 1 , -.Xr keyinit 1 -.Sh 作者 -.An -nosplit -もともとのコマンドは、 -.An Phil Karn , -.An Neil M. Haller , -.An John S. Walden -に -よって作成されました。 -perl 用に書き直したのは、 -.An J\(:org Wunsch -です。この版では setuid をしていますので、S/Key のキーファイルは -ユーザから読めないようにしておくことができます。 -C 用に書き直したのは、 -.An Warner Losh -です。 diff --git a/ja_JP.eucJP/man/man1/keyinit.1 b/ja_JP.eucJP/man/man1/keyinit.1 deleted file mode 100644 index 5ebc43d717..0000000000 --- a/ja_JP.eucJP/man/man1/keyinit.1 +++ /dev/null @@ -1,95 +0,0 @@ -.\" @(#)keyinit.1 1.0 (Bellcore) 7/20/93 -.\" %FreeBSD: src/usr.bin/keyinit/keyinit.1,v 1.8 2000/03/01 12:19:47 sheldonh Exp % -.\" -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/keyinit.1,v 1.6 2001/05/14 01:07:25 horikawa Exp $ -.Dd July 20, 1993 -.Dt KEYINIT 1 -.Os -.Sh 名称 -.Nm keyinit -.Nd パスワードの変更もしくは、S/Key 認証システムにユーザを加える -.Sh 書式 -.Nm -.Op Fl s -.Op Ar userID -.Sh 解説 -.Nm keyinit -は、S/Key の一回利用パスワードをログインに使うためにシステムを -初期化します。 -プログラムはあなたに秘密のパスフレーズを入力するように尋ねます。 -これにたいして、いくつかの単語からなるフレーズを応答として入力します。 -S/Key データベースが更新された後では、普通の UNIX パスワードか S/Key -の一回利用パスワードを用いてログインできます。 -.Pp -別のマシンからログインする時には、 -.Nm key -コマンドをローカルマシンで -使いパスフレーズを入力することで、 -実際のパスワードをネットワークを通して送ることを避けることができます。 -このプログラムは、リモートマシンにログインするために使う -一回利用パスワードを返します。 -この入力は、マウスを使ったカットアンドペースト操作で利用すると -もっとも便利です。別の方法として、 -.Nm key -コマンドを利用して -一回利用パスワードをあらかじめ計算し、紙にでも書いて持ち運ぶことも -できます。 -.Pp -.Nm keyinit -は、秘密パスワードの入力を要求します。これは、安全 (secure) -な端末でだけ使われるべきです。例えば、ワークステーションのコンソールなど -がその例です。 信頼できないネットワークを通してログインするとき -.Nm -を使う場合、 -.Fl s -オプションを使って後述の説明にしたがって -ください。 -.Sh オプション -.Bl -tag -width indent -.It Fl s -セキュアモード、 -すなわち最初の一回利用パスワードの生成をユーザがセキュアなマシンで行う -モードに設定します。 -.Fl s -オプション無しでは -システムは、安全な接続を通して直接接続していることを仮定し、 -あなたに直接秘密パスワードを求めます。 -また、 -.Fl s -オプションでは、ユーザが種とカウントとを指定できますので、 -パラメータを完全に制御可能です。 -デフォルトが気に入らなければ、種とカウントを設定するために -.Nm key -コマンドと -.Nm -.Fl s -を組み合わせて使うことができます。 -これを行うためには、 -まずあるウィンドウで -.Nm -を実行してカウントと種を入力し、 -その後別のウィンドウで -.Nm key -を実行して -そのカウントと種に当てはまる正しい 6 つの英単語を生成します。 -それから、カットアンドペースト等で -.Nm -のウィンドウへ 6 つの英単語を複製してください。 -.It Ar user ID -変更したり加えたりするユーザの ID です。 -.El -.Sh 関連ファイル -.Pa /etc/skeykeys -S/Key システムのための情報データベース -.Sh 関連項目 -.Xr key 1 , -.Xr keyinfo 1 , -.Xr skey 1 , -.Xr su 1 -.Sh 作者 -コマンドは、 -.An Phil Karn , -.An Neil M. Haller , -.An John S. Walden -によって -作られました。 diff --git a/ja_JP.eucJP/man/man1/mcon.1 b/ja_JP.eucJP/man/man1/mcon.1 deleted file mode 100644 index fd715fe5fb..0000000000 --- a/ja_JP.eucJP/man/man1/mcon.1 +++ /dev/null @@ -1,171 +0,0 @@ -.\" Copyright (c) 1994 Joerg Wunsch -.\" -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by Joerg Wunsch -.\" 4. The name authors may not be used to endorse or promote products -.\" derived from this software without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" @(#)mcon.1, 3.00, Last Edit-Date: [Mon Jan 10 21:28:22 1994] -.\" %FreeBSD: src/usr.sbin/pcvt/mcon/mcon.1,v 1.8.2.1 2000/12/27 13:50:37 ru Exp % -.\" $FreeBSD$ -.\" -.Dd January 3, 1994 -.Dt MCON 1 -.Os -.Sh 名称 -.Nm mcon -.Nd pcvt マウスエミュレータの制御 -.Sh 書式 -.Nm -.Op Fl l Ar left-button-key -.Op Fl m Ar mid-button-key -.Op Fl r Ar right-button-key -.Op Fl a Ar accel-time -.Op Fl s Ar 0 | false | \&no -.Op Fl s Ar 1 | true | yes -.Ar device -.Sh 解説 -.Nm -は、 -.Xr pcvt 4 -マウスエミュレータの調整可能なパラメータを制御するユーティリティです。 -.Pp -.Em NB : -マウスエミュレータはデフォルトでは組み込まれていません。 -この機能を有効にするには、システムの設定ファイルに -以下のオプション指定行 -.Pp -.Cd options PCVT_EMU_MOUSE -.Pp -を記述する必要があります。 -.Pp -いずれの場合も、マウスエミュレーションに用いるデバイスノードを指定する -.Ar device -を引数に指定して -.Nm -を呼び出さなければなりません。 -これは普通、 -.Xr pcvt 4 -ドライバのうち、仮想端末デバイスとして使われていない最初のデバイスノードです。 -例えば、8 つの仮想端末、つまり -.Pa /dev/ttyv0 -から -.Pa /dev/ttyv7 -が使えるように設定されている (これがデフォルト) 場合、 -マウスエミュレータは -.Pa /dev/ttyv8 -に割り当てられます。 -.Pp -もしオプションなしで -.Nm -を起動すると、調整可能パラメータの現在の設定値を表示します。 -.Pp -オプション 1 つを付けて起動すると、 -.Nm -は新しい値の設定を試みます。 -.Pp -オプションは以下の通りです: -.Bl -tag -width Ds -.It Fl l Ar left-button-key -.It Fl m Ar mid-button-key -.It Fl r Ar right-button-key -指定された -.Ar button key -がマウスの左, 中央, 右ボタンをエミュレートするようにマッピングします。 -.Ar button key -はそのキーの通常の名称です。 -普通の ASCII 文字はその文字自体で指定し、 -ファンクションキーは -.Em f1 -から -.Em f10 -で指定します。 -注意: AT ファンクションキー -.Em f11 -から -.Em f12 -は -.Em 拡張された -キーであり、マウスエミュレータで使うようにマッピングできません。 -基本的な PC スキャンコードキーを使うことしか許されないからです。 -.It Fl a Ar accel-time -内部アクセラレータのタイムリミットを -.Ar accel-time -ミリ秒に設定します。 -このタイムリミット以上経過した後キーイベントが発生すると、 -単一のステップでマウスカーソルが動きます。 -これより短い間隔でキーイベントが到着すると、 -マウスカーソルは 6 倍の速さで動きます。 -注意: -.Em milliseconds -は上に示した単位で指定できますが、 -時刻の分解能は OS のタイマ分解能の制約を受け、 -通常は 10 ミリ秒単位となります。 -.It Fl s Ar 0 | false | \&no -.It Fl s Ar 1 | true | yes -マウスボタンの -.Em sticky -動作を無効化あるいは有効化します。 -マウスボタンを sticky にすると、ちょうどトグルボタンのようになります。 -つまり、はじめて押すとアクティブになり、もう一度押すと非アクティブになります。 -他のボタンどれかを押すと、それ以外の sticky なボタンは -全て非アクティブになります。 -.Pp -sticky ボタンを使うと指が 20 本も要らなくなるので便利かも知れません。 -他方、マウスのダブルクリックやトリプルクリックは事実上不可能になります。 -.El -.Sh 実行例 -以下の例はマウスエミュレータのデフォルト動作を設定するものです。 -.Pp -.Nm -.Fl l Ar f1 -.Fl m Ar f2 -.Fl r Ar f3 -.Fl a Ar 250 -.Fl s Ar \&no -.Pa /dev/ttyv8 -.Sh バグ -ボタンをエミュレートするキーをスキャンコードに (あるいはその逆に) -マッピングする際のキーの名前は、米国のキーボードレイアウトに基づいています。 -しかし、 -.Dq 選んだ button -は各国のキーボードレイアウトのファンクションキーのどれかに相当する -でしょうから、通常、これは問題とならないでしょう。 -.Pp -マウスエミュレータは結構乱暴なことをやっています。 -その唯一の目的は、X ウィンドウ環境の中でポインタを動かすデバイスを -提供することです。 -.Sh 関連項目 -.Xr X 1 , -.Xr pcvt 4 -.Sh 歴史 -.Nm -ユーティリティは -.Xr pcvt 4 , -release 3.00 で登場しました。 -.Sh 作者 -マウスエミュレータは -.An "J\(:org Wunsch" -によって寄贈されました。 diff --git a/ja_JP.eucJP/man/man1/perl.1 b/ja_JP.eucJP/man/man1/perl.1 deleted file mode 100644 index 2822505e4e..0000000000 --- a/ja_JP.eucJP/man/man1/perl.1 +++ /dev/null @@ -1,5936 +0,0 @@ -.\" $FreeBSD$ -.rn '' }` -''' %RCSfile: perl.1,v %%Revision: 1.5 %%Date: 1998/06/04 21:05:33 % -''' -''' %Log: perl.1,v % -''' Revision 1.5 1998/06/04 21:05:33 steve -''' Fix a bunch of spelling errors. -''' -''' PR: 6856 -''' Submitted by: Josh Gilliam <josh@quick.net> -''' -''' Revision 1.4 1997/08/30 12:22:46 jmg -''' fix a few spelling changes -''' -''' Submitted by: Josh Gilliam -''' -''' Closes PR's: 4429, 4431-4438 -''' -''' PS: He has agreed to submit all contrib fixes back to the original author. -''' -''' Revision 1.3 1996/10/05 22:26:23 wosch -''' delete doubled words, e.g.: "the the" -> "the" -''' -''' Revision 1.2 1994/10/27 23:16:52 wollman -''' Convince Perl to that is is part of the system, as /usr/bin/perl (binary) -''' and /usr/share/perl (library). The latter was chosen as analogous to other -''' directories already present in /usr/share, like /usr/share/groff_font and -''' (particularly) /usr/share/mk. -''' -.\" Revision 1.1.1.1 1994/09/10 06:27:36 gclarkii -.\" Initial import of Perl 4.046 bmaked -.\" -.\" Revision 1.1.1.1 1993/08/23 21:29:37 nate -.\" PERL! -.\" -''' Revision 4.0.1.6 92/06/08 15:07:29 lwall -''' patch20: documented that numbers may contain underline -''' patch20: clarified that DATA may only be read from main script -''' patch20: relaxed requirement for semicolon at the end of a block -''' patch20: added ... as variant on .. -''' patch20: documented need for 1; at the end of a required file -''' patch20: extended bracket-style quotes to two-arg operators: s()() and tr()() -''' patch20: paragraph mode now skips extra newlines automatically -''' patch20: documented PERLLIB and PERLDB -''' patch20: documented limit on size of regexp -''' -''' Revision 4.0.1.5 91/11/11 16:42:00 lwall -''' patch19: added little-endian pack/unpack options -''' -''' Revision 4.0.1.4 91/11/05 18:11:05 lwall -''' patch11: added sort {} LIST -''' patch11: added eval {} -''' patch11: documented meaning of scalar(%foo) -''' patch11: sprintf() now supports any length of s field -''' -''' Revision 4.0.1.3 91/06/10 01:26:02 lwall -''' patch10: documented some newer features in addenda -''' -''' Revision 4.0.1.2 91/06/07 11:41:23 lwall -''' patch4: added global modifier for pattern matches -''' patch4: default top-of-form format is now FILEHANDLE_TOP -''' patch4: added $^P variable to control calling of perldb routines -''' patch4: added $^F variable to specify maximum system fd, default 2 -''' patch4: changed old $^P to $^X -''' -''' Revision 4.0.1.1 91/04/11 17:50:44 lwall -''' patch1: fixed some typos -''' -''' Revision 4.0 91/03/20 01:38:08 lwall -''' 4.0 baseline. -''' -''' -.de Sh -.br -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp -.if t .sp .5v -.if n .sp -.. -.de Ip -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -''' -''' Set up \*(-- to give an unbreakable dash; -''' string Tr holds user defined translation string. -''' Bell System Logo is used as a dummy character. -''' -.tr \(*W-|\(bv\*(Tr -.ie n \{\ -.ds -- \(*W- -.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -.ds L" "" -.ds R" "" -.ds L' ' -.ds R' ' -'br\} -.el\{\ -.ds -- \(em\| -.tr \*(Tr -.ds L" `` -.ds R" '' -.ds L' ` -.ds R' ' -'br\} -.TH PERL 1 "\*(RP" -.UC -.SH 名称 -perl \- 実用的抽出とレポートのための言語 -.SH 書式 -.B perl -[options] filename args -.SH 解説 -.I perl -は、任意のテキストファイルを走査し、そこから情報を取り出し、情報に基づ -いたレポートを出力するために最適化されたインタプリタ言語です。 -また、多くのシステム管理作業に適した言語でもあります。 -.I perl -は美しい (小さい、エレガント、最小) というよりは、むしろ実用的 -(使いやすい、効率的、完全) であることをめざしています。 -.I perl -は、C, \fIsed\fR, \fIawk\fR, and \fIsh\fR, の最も良いところを -組み合わせてある (作者の意向としては、でありますが) ので、これらの言語に -なじみのある人には、容易に使えるでしょう。 -(言語歴史学者なら、\fIcsh\fR, Pascal, そして BASIC-PLUS の痕跡にさえも -気がつくでしょう。) -式の書式は、C のものに極めて似ています。 -他の多くの UNIX ユーティリティと異なり、 -.I perl -は、データのサイズを勝手に制限するようなことはなく (メモリのある限りです)、 -ファイル全体を一つの文字列として読み込んでしまえます。 -再帰の深さには制限がありません。連想配列で使われるハッシュテーブルは、 -パフォーマンスの低下を防ぐため、必要に応じて大きくなります。 -.I perl -は、大量のデータを非常に迅速に走査する洗練されたパターンマッチ -テクニックを使います。 -テキスト走査に最適化されてはいますが、 -.I perl -はバイナリデータも扱うこともできて、(dbm が使えるなら) 連想配列に似た -dbm ファイルを作れます。 -setuid -.I perl -スクリプトは、多くの馬鹿らしいセキュリティホールを防ぐデータフロー追跡 -機構により、C のプログラムより安全です。 -普通なら \fIsed\fR, \fIawk\fR, \fIsh\fR を使うような問題で、その能力を -越えていたり、もう少し速く走らせなければならなかったり、 -くだらないことを C で書きたくないような場合に -.I perl -がぴったりです。 -既存の -.I sed -や -.I awk -スクリプトを -.I perl -スクリプトにする変換プログラムもあります。 -さあ、宣伝はこれで十分でしょう。 -.PP -まず始めに、 -.I perl -次の場所からスクリプトを探します。 -.Ip 1. 4 2 -コマンドライン上の -.B \-e -スイッチで指定された行。 -.Ip 2. 4 2 -コマンドライン上で、最初に指定されたファイルの内容。 -(#! の表記をサポートするシステムは、インタプリタをこうして起動します) -.Ip 3. 4 2 -標準入力から暗黙のうちに読み込まれます。これは、ファイル名の指定が一つ -もない場合にだけ働きます。\*(-- -.I 標準入力 -スクリプトに引数を渡すには、スクリプト名として明示的に \- を -指定しなければなりません。 -.PP -スクリプトを見つけると、 -.I perl -は内部形式にコンパイルし、スクリプトが文法的に正しければ -それを実行します。 -.Sh "オプション" -注意: 最初にこのセクションを読んでも意味がわからないかもしれません。 -簡単なリファレンスとして前半部分になっています。 -.PP -一文字オプションは、次に続くオプションとくっつけてもかまいません。 -#! 構造を使うスクリプトを起動する際には一つの引数しか許されないの -で、特に便利です。 -例: -.nf - -.ne 2 - #!/usr/bin/perl \-spi.bak # \-s \-p \-i.bak と同じ - .\|.\|. - -.fi -以下のオプションがあります: -.TP 5 -.BI \-0 数字 -レコードセパレータ ($/) を 8 進数で指定します。 -数字がないと、ヌルキャラクタがセパレータになります。 -他のコマンドラインスイッチは、前に置くか、もしくは数字の後に続けます。 -例えば、ヌル文字を終端としたファイル名を表示可能なバージョンの -.I find -なら、このように書けます。 -.nf - - find . \-name '*.bak' \-print0 | perl \-n0e unlink - -.fi -00 は特殊な値で、 -.I perl -はファイルをパラグラフモードで読み込みます。 -0777 という値を使うと、この値の文字はないので、ファイル全体を -読み込みます。 -.TP 5 -.B \-a -.B \-n -や -.BR \-p -オプションと一緒に用いて、オートスプリットモードを ON にします。 -.B \-n -や -.BR \-p -オプションで自動的に生成される while ループの内側の -最初のところで、@F 配列に対して暗黙の split コマンドが行なわれます。 -.nf - - perl \-ane \'print pop(@F), "\en";\' - -は、次の例と同等になります。 - - while (<>) { - @F = split(\' \'); - print pop(@F), "\en"; - } - -.fi -.TP 5 -.B \-c -.I perl -スクリプトの文法をチェックし、実行せずに終了します。 -.TP 5 -.BI \-d -perl デバッガのもとでスクリプトを実行します。 -デバッグのセクションを参照して下さい。 -.TP 5 -.BI \-D 数字 -デバッグフラッグをセットします。 -スクリプトがどのように実行されるかを見るには、 -.BR \-D14 -を使います。 -(これはデバッグ機能を -.IR perl -に組み込んでコンパイルした時にのみ動作します。) -\-D1024 も有用な値で、コンパイルされた文法ツリーをリストします。 -\-D512 を使うと、コンパイルされた正規表現を出力します。 -.TP 5 -.BI \-e " コマンドライン" -一行スクリプトを入力する場合に使えます。 -複数行スクリプトを組み立てるには、複数の -.B \-e -コマンドを指定すればできます。 -.B \-e -が与えられると、 -.I perl -は引数のリストの中からスクリプトファイル名を探しません。 -.TP 5 -.BI \-i 拡張子 -<> 構造で処理されるファイルをその場で修正することを指定します。 -入力ファイルをリネームし、出力ファイルを元の名前でオープンし、出力ファイルを -print 文のデフォルト出力にすることで処理されます。 -拡張子が与えられれば、バックアップファイルの名前として元のファイル名に -その拡張子を加えたものが使われます。 -拡張子が与えられなければ、バックアップファイルは作成されません。 -\*(L"perl \-p \-i.bak \-e "s/foo/bar/;" .\|.\|. \*(R" を実行することは、 -次のスクリプトと同じです。 -.nf - -.ne 2 - #!/usr/bin/perl \-pi.bak - s/foo/bar/; - -これは以下のものとも同等になります。 - -.ne 14 - #!/usr/bin/perl - while (<>) { - if ($ARGV ne $oldargv) { - rename($ARGV, $ARGV . \'.bak\'); - open(ARGVOUT, ">$ARGV"); - select(ARGVOUT); - $oldargv = $ARGV; - } - s/foo/bar/; - } - continue { - print; # 元の名前のファイルに出力する - } - select(STDOUT); - -.fi -ただし、 -.B \-i -を用いた方法では、ファイル名が変更された時刻を知るために $ARGV と $oldargv を -比較する必要がないという点が異なります。 -実際にはファイルハンドルとして ARGVOUT がセレクトされて使われます。 -.I STDOUT -がデフォルト出力のファイルハンドルとして保存され、 -ループのあとで戻されることに注意して下さい。 -.Sp -入力ファイルすべてに追加を行なう場合や、行番号をリセットしたりする場合、 -各入力ファイルの終わりを知るために `eof' を使うことができます。 -(eof の例を参照して下さい) -.TP 5 -.BI \-I ディレクトリ -.B \-P -と一緒に用いて C プリプロセッサにインクルードファイルの位置を -知らせます。デフォルトでは、/usr/include と /usr/lib/perl を検索します。 -.TP 5 -.BI \-l 8進数 -行末処理を自動的に行ないます。これには二つの効果があります。 -まず、 -.B \-n -や -.B \-p -と共に使われることで、行ターミネータを自動的に除きます。 -二つ目は、$\e が、 -.I 8進数 -をセットし、print 文がすべて最後に行末文字をつけるということです。 -.I 8進数 -が省略された場合は、$\e に $/ の現在の値をセットします。 -例えば、行を 80 桁に切り揃えるためには: -.nf - - perl -lpe \'substr($_, 80) = ""\' - -.fi -$\e = $/ という代入はコマンドラインスイッチが処理される時に -行なわれるので、 -.B \-l -スイッチに -.B \-0 -が続くときは、入力レコードセパレータと出力レコードセパレータが -異なることもあり得るということに注意して下さい。 -.nf - - gnufind / -print0 | perl -ln0e 'print "found $_" if -p' - -.fi -これは、$\e に改行をセットし、$/ にはヌル文字をセットします。 -.TP 5 -.B \-n -スクリプトの前後に下に示すループがあるものとして -.I perl -を起動します。こうすると、引数のファイル全部について -\*(L"sed \-n\*(R" または \fIawk\fR と同じような繰り返しが行なわれます: -.nf - -.ne 3 - while (<>) { - .\|.\|. # ここにスクリプトが来ます - } - -.fi -デフォルトで入力行の出力はされないことに注意して下さい。 -出力したければ -.B \-p -を参照して下さい。 -以下は、1 週間より古いファイルすべてを削除する効率的な方法です。 -.nf - - find . \-mtime +7 \-print | perl \-nle \'unlink;\' - -.fi -この場合、ファイルが見つかるたびにプロセスを開始する必要がないので、 -find の \-exec スイッチを使うより速くなります。 -.TP 5 -.B \-p -スクリプトの前後に下に示すループがあるものとして -.I perl -を起動します。こうすると、引数のファイル全部について -\fIsed\fR と同じような繰り返しが行なわれます: -.nf - -.ne 5 - while (<>) { - .\|.\|. # ここにスクリプトが来ます - } continue { - print; - } - -.fi -入力行は自動的に出力されることに注意して下さい。 -出力を抑制したければ、 -.B \-n -スイッチを使って下さい。 -.B \-p -は、 -.B \-n -スイッチに優先します。 -.TP 5 -.B \-P -.IR perl -によるコンパイルの前に C プリプロセッサを通します。 -(perl のコメントも cpp の命令も # の文字で始まるので、 -コメントを C プリプロセッサが理解する単語、例えば -\*(L"if\*(R" や \*(L"else\*(R" や \*(L"define\*(R" で始めてはなりません。) -.TP 5 -.B \-s -コマンドライン上で、スクリプト名とファイル名の引数 -(または \-\|\-) の間にある各スイッチについて基本的な解析を行ないます。 -スイッチが見つかると、@ARGV から除かれ、対応する変数を -.I perl -スクリプト内でセットします。 -以下のスクリプトでは、\-xyz スイッチをつけてスクリプトを起動したとき -だけ、\*(L"true\*(R" を出力します。 -.nf - -.ne 2 - #!/usr/bin/perl \-s - if ($xyz) { print "true\en"; } - -.fi -.TP 5 -.B \-S -スクリプトを探すのに、環境変数 PATH を用います -(スクリプト名が / で始まらないかぎり)。 -通常は、#! をサポートしないマシンにおいて #! を -エミュレートするために用いられます。 -次のような使い方です: -.nf - - #!/usr/bin/perl - eval "exec /usr/bin/perl \-S $0 $*" - if $running_under_some_shell; - -.fi -システムは 1 行目を無視し、スクリプトを /bin/sh に渡します。 /bin/sh は -.I perl -スクリプトをシェルスクリプトとして実行しようとします。シェルは 2 行目 -を通常のシェルコマンドとして実行し、perl インタプリタを起動する -ことになります。 -システムによっては $0 は必ずしもフルパス名にならないので、 -.B \-S -を用いて -.I perl -に必要ならばスクリプトを探すように指示します。 -.I perl -がスクリプトを見つけたあと、解析を行ないますが、変数 -$running_under_some_shell が真になることはないので、2 行目を無視します。 -ファイル名などに含まれるスペースを正しく扱うには、$* よりも -${1+"$@"} の方がよいでしょうが、csh が解釈する場合には動作しません。 -csh ではなく sh で起動するには、あるシステムでは #! 行を、perl で -無視されるコロンのみに書き換える必要があるかもしれません。その他の -システムではこの方法は使えず、次のように、csh, sh, perl のどの下で -も動作するような、とてもまわりくどい方法をとる必要があります: -.nf - -.ne 3 - eval '(exit $?0)' && eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' - & eval 'exec /usr/bin/perl -S $0 $argv:q' - if 0; - -.fi -.TP 5 -.B \-u -スクリプトのコンパイルの後、 -.I perl -はコアダンプします。 -このコアダンプから、`undump' プログラム(提供していません)を用いて -実行可能ファイルに変換できます。 -こうすると、ディスク消費が増えるかわりに (実行ファイルを strip すれば -最小にできます)、スタートアップが速くなります。 -(しかし、私のマシンでは "hello world" の実行形式が約 200K の大きさ -になります。) -実行形式を set-id プログラムとして走らせるのなら、通常の perl ではなく -多分 taintperl を用いてコンパイルすべきです。 -ダンプする前に実行したいスクリプトがある場合は、代わりに dump 演算子を -使って下さい。 -注意 : undump が使えるかどうかはプラットフォームに依存するので、perl の -移植によっては利用できないものもあるかもしれません。 -.TP 5 -.B \-U -安全でない操作を可能にします。 -現在の所、\*(L"安全でない\*(R" 操作とは、スーパユーザ権限での -実行時にディレクトリを unlink すること、および汚れチェックで -警告が出るような setuid プログラムを走らせることだけです。 -.TP 5 -.B \-v -.I perl -のバージョンとパッチレベルを出力します。 -.TP 5 -.B \-w -一度だけ出てくる識別子、セットする前に使用されるスカラ変数に対して、 -警告を出します。 -サブルーチンが再定義されたとき、定義されていないファイルハンドルの参照 -があるとき、リードオンリーでオープンしたファイルハンドルへ書き込もうと -したときにも警告を出します。数値ではなさそうな値に == を使ったときや、 -サブルーチンが 100 回以上再帰したときにも警告を出します。 -.TP 5 -.BI \-x ディレクトリ -スクリプトがメッセージに埋め込まれていることを -.I perl -に知らせます。#! で始まり、"perl" という文字列を含む最初の行が現れる -までは、ゴミとして無視されます。 -その行に指定した意味のあるスイッチはすべて適用されます -(ただし通常の #! 処理と同じく、スイッチのかたまり一つだけです)。 -ディレクトリ名を指定すると、perl はスクリプトを実行する前にその -ディレクトリに移ります。 -.B \-x -スイッチは、先頭のゴミを捨てるだけです。 -スクリプトの後にゴミがある場合は、スクリプトは _\|_END_\|_ -で終わらせなければなりません (望むなら、スクリプトで後ろのゴミの一部 -または全部をファイルハンドル DATA 経由で処理することが可能です)。 -.Sh "データの型とオブジェクト" -.PP -.I perl -には 3 種類のデータ型が有ります: スカラ、スカラ配列、 -および連想配列です。 -通常の配列は添え字が数字ですが、連想配列の場合は文字列です。 -.PP -perl における演算や値の解釈は、演算や値のコンテキスト(文脈)からの要求 -にしばしば依存します。 -主なコンテキストは三つ: すなわち文字列、数値、配列です。 -演算の中には、配列を要求するコンテキストでは配列を、そうでなければ -スカラ値を返すものもあります。 -(そのような演算子についてはドキュメント内のその演算子のところに -記載されています。) -スカラ値を返す演算子は、コンテキストが文字列あるいは -数値のどちらを要求しているかは考慮しませんが、スカラ変数および -スカラ値は文字列あるいは数値のコンテキストの適切な方に解釈されます。 -スカラはそれがヌル文字列あるいは 0 でなければ論理的に真であると -解釈されます。 -演算子が返す論理値は、真の場合は 1、偽の場合は 0 または \'\' -(ヌル文字列)です。 -.PP -実際には、ヌル文字には二種類あります。define と undefined です。 -undefined のヌル文字列は、エラー、ファイル終端、初期化されていない変数や -配列要素を参照しようとしたときなど、実際の値が存在しない場合に返ります。 -undefined のヌル文字列は、最初にそれにアクセスしたときに defined となる -ことがありますが、その前に defined() 演算子を用いて値が defined かどう -かを知ることができます。 -.PP -スカラ変数への参照は、それが配列の一部であっても、常に \*(L'$\*(R' -で始めます。 -つまりこうです: -.nf - -.ne 3 - $days \h'|2i'# 単純なスカラ変数 - $days[28] \h'|2i'# 配列 @days の 29 番目の要素 - $days{\'Feb\'}\h'|2i'# 連想配列の値の一つ - $#days \h'|2i'# 配列 @days の最後の添え字 - -しかし、配列全部や一部の取り出しは \*(L'@\*(R' で始めます: - - @days \h'|2i'# ($days[0], $days[1],\|.\|.\|. $days[n]) - @days[3,4,5]\h'|2i'# @days[3.\|.5] と同じ - @days{'a','c'}\h'|2i'# ($days{'a'},$days{'c'}) と同じ - -そして、連想配列全部を扱うには \*(L'%\*(R' で始めます: - - %days \h'|2i'# (key1, val1, key2, val2 .\|.\|.) -.fi -.PP -これら 8 つはすべて左辺値として扱うことができます。すなわち、代入可能 -ということです。 -(さらに、あるコンテキストでは代入操作自体も左辺値となり得ます。 -\*(-- s, tr, chop のところの例を参照して下さい。) -スカラへの代入を行なうと、右辺をスカラのコンテキストで評価するのに -対し、配列や配列の一部への代入は右辺を配列のコンテキストで評価します。 -.PP -配列 @days の長さを -.IR csh -のように -\*(L"$#days\*(R" で評価してもかまいません。 -(実際には、通常 0 番目の要素があるので、配列の長さではなく、最後の要素 -の添え字になります。) -$#days に代入すると、配列の長さが変わります。 -この方法によって配列を小さくしても、実際には値は破壊されません。 -すでに小さくした配列を大きくすると、もともとあった要素が元に戻ります。 -大きくなりそうな配列をあらかじめ大きくしておくと、 -効率をいくらか良くすることもできます。 -(配列を大きくするには、配列の最後を超える要素に代 -入を行なう方法もあります。この方法と、$#whatever へ代入する方法との -違いは、間の要素にヌルがセットされることです) -配列を縮めて空にするには、ヌルリスト () を代入すればできます。 -次の二つは全く同等となります。 -.nf - - @whatever = (); - $#whatever = $[ \- 1; - -.fi -.PP -配列をスカラのコンテキストで評価すると、配列の長さが返ります。 -次の式は常に真となります: -.nf - - scalar(@whatever) == $#whatever \- $[ + 1; - -.fi -連想配列をスカラのコンテキストで評価すると、配列が要素を含む場合 -かつその場合に限り真の値を返します。 -(要素がある場合に返る値は、使用している bucket の数およびアロケートさ -れている bucket の数から成る文字列で、/ で区切られます。) -.PP -多次元配列は直接はサポートされていませんが、連想配列を用いて複数の -添え字をエミュレートする方法については、$; 変数の項を参照して下さい。 -多次元の添え字を 1 次元の添え字に変換するサブルーチンを書くことも -できます。 -.PP -各々のデータ型に応じて、それぞれの名前空間があります。衝突を心配する -ことなく、同じ名前をスカラ変数、配列、連想配列、ファイルハンドル、 -サブルーチン名、またはラベルにつけることができます。 -変数や配列への参照は常に \*(L'$\*(R', \*(L'@\*(R', \*(L'%\*(R' -で始まるので、\*(L"予約\*(R" 語は変数名については実際には -使用可能です。 -(しかし、ラベルやファイルハンドルについては予約語は使用できません。 -特殊な文字で始まらないからです。 -.br -ヒント: open(log,\'logfile\') より open(LOG,\'logfile\') を使った方が -良いです。大文字のファイルハンドル名を使うと、読み易さも向上し、 -将来の予約語になるものとの衝突も避けることができるからです。) -大文字小文字の区別は重要です -\*(--\*(L"FOO\*(R", \*(L"Foo\*(R", \*(L"foo\*(R" はすべて異なる -名前です。アルファベットで始まる名前は数字や下線を含んでもかまいません。 -アルファベットで始まらない名前は 1 文字に限られます。 -例えば、\*(L"$%\*(R" や \*(L"$$\*(R" です。 -(ほとんどの一文字名は -.IR perl -の予約変数として意味があります。 -詳細は後ほど述べます。) -.PP -数値文字列は通常の浮動小数点や整数の形式で指定します。 -.nf - -.ne 6 - 12345 - 12345.67 - .23E-10 - 0xffff # 16 進 - 0377 # 8 進 - 4_294_967_296 - -.fi -文字列はシングルクォートまたはダブルクォートで区切られます。 -動作はシェルにおけるクォートとよく似ています。 -ダブルクォートで囲まれた文字列にはバックスラッシュや変数の置換が -行なわれます。シングルクォートで囲まれた文字列には行なわれません -(\e\' と \e\e を除きます)。 -通常のバックスラッシュ規則が改行やタブなどの文字を表すのに使え、 -更に以下のちょっと変わった形式も使えます: -.nf - - \et タブ - \en 改行 - \er リターン - \ef フォームフィード - \eb バックスペース - \ea アラーム (ベル) - \ee エスケープ - \e033 8進文字 - \ex1b 16進文字 - \ec[ コントロール文字 - \el 次の文字を小文字にします - \eu 次の文字を大文字にします - \eL \eE までを小文字にします - \eU \eE までを大文字にします - \eE 大小文字の修飾の終り - -.fi -改行を直接文字列に書き入れることもできます。すなわち、文字列は始まった -行と異なる行で終わることができることになります。これは便利ですが、 -最後にクォートを忘れると、クォートを含むかなり離れた別の行を見つけるまで -.I perl -はエラーを報告しないでしょう。 -文字列内の変数置換はスカラ変数、通常の配列、配列の一部に限られます。 -(言い換えると、$ や @ で始まる識別子と、それに括弧で囲まれた添え字が -ある場合だけです。) -次のコードは \*(L"The price is $100.\*(R" を出力します。 -.nf - -.ne 2 - $Price = \'$100\';\h'|3.5i'# 解釈されません - print "The price is $Price.\e\|n";\h'|3.5i'# 解釈されます - -.fi -後に続くアルファベットや数字と区別するために、識別子を {} で囲う -ことができることを覚えておいて下さい。 -また、シングルクォートは識別子として有効な文字であるため、 -シングルクォートで囲まれた文字列は、前の単語とは空白で区切られて -いなければならないことも覚えておきましょう -(パッケージの項を参照して下さい)。 -.PP -プログラムのその時点での行番号とファイル名を表す -_\|_LINE_\|_ と _\|_FILE_\|_ という二つの特殊な文字があります。 -これらは独立したトークンとしてのみ使用でき、文字列中に -書き入れることはできません。 -さらにトークン _\|_END_\|_ は、実際のファイルが終了する前で、スクリプト -の論理的な終了を示すために使えます。残りのテキストはすべて無視されますが、 -ファイルハンドル DATA から読むことができます。 -(ファイルハンドル DATA は、メインスクリプトからのみデータを -読み込めますが、require されたファイルや評価された文字列からは -読み込めません。) -^D と ^Z の二つのコントロールキャラクタは _\|_END_\|_ と同義になります。 -.PP -文法的に解釈不可能な単語は、それがシングルクォートで囲まれている -かのように扱われます。このため、アルファベット、数字、下線のみからなり、 -単語はアルファベットで始まらなければなりません。 -ファイルハンドルやラベルと同じく、小文字のみからなる裸の単語は、 -将来の予約語と衝突する危険があります。 -.B \-w -スイッチを使えば、perl はそのような単語について警告してくれます。 -.PP -配列値をダブルクォートで囲まれた文字列に入れた場合は、配列の全要素を -$" 変数で指定される区切り (デフォルトは空白) で連結して一つにした -文字列になります。 -(3.0 以前のバージョンの perl では、@ はダブルクォートで囲まれた文字列 -の中のメタキャラクタではなかったので、@array, $array[EXPR], -@array[LIST], $array{EXPR}, @array{LIST} の文字列への挿入は、 -配列がプログラムのどこかで参照されている場合、もしくは予約されている -場合にのみ起こります。) -次の二つは同等になります。 -.nf - -.ne 4 - $temp = join($",@ARGV); - system "echo $temp"; - - system "echo @ARGV"; - -.fi -検索パターン (これにもダブルクォートと同じ置換が行なわれます) に -おいては、あいまいな場合があります。 /$foo[bar]/ は /${foo}[bar]/ -([bar]は正規表現の文字クラス) でしょうか、 -それとも /${foo[bar]}/ ([bar]は配列 @foo の添字) なのでしょうか。 -@foo が存在しないなら、それは明らかに文字クラスです。 -@foo が存在するなら、perl は [bar]について考え、大抵の場合正しい類推を -します。それが間違っていたり、あなたが単に偏執狂なら、 -上記のように中括弧 {} を入れることで、正しい解釈をさせることができます。 -.PP -行指向の引用法はシェルと同様の文法に基づいています。 -<< の後に引用文の終わりを示す文字列を指定すると、現在行からその文字列 -が現れるまでの行すべてがその値になります。終わりを示す文字列は識別子 -(単語) でも、クォートされたテキストでもかまいません。 -クォートされているテキストの場合、通常クォートで囲む場合と同じく -クォートの種類がテキストの扱い方を決めます。クォートされていない識別子 -はダブルクォートされている場合と同じ動作となります。 -(スペースを入れた場合、それは有効なヌル識別子として扱われ、 -最初の空行にマッチします。 \*(--下の Merry Christmas の例を見て下さい。) -終わりを示す文字列はそれだけで (クォートされず、空白を前後につけずに) -書かれていなければなりません。 -.nf - - print <<EOF; # 前の例と同じです -The price is $Price. -EOF - - print <<"EOF"; # 上の例と同じです -The price is $Price. -EOF - - print << x 10; # ヌル識別子が終わりを示します -Merry Christmas! - - print <<`EOC`; # コマンドを実行します -echo hi there -echo lo there -EOC - - print <<foo, <<bar; # スタックに積むことができます -I said foo. -foo -I said bar. -bar - -.fi -配列のリテラルは、個々の値をコンマで区切り、リストを括弧で囲みます: -.nf - - (LIST) - -.fi -配列値を要求しないコンテキストでは、C のコンマ演算子と同じく、最後の要 -素の値が配列の値となります。例えば、 -.nf - -.ne 4 - @foo = (\'cc\', \'\-E\', $bar); - -は配列 foo に全配列値を代入しますが、 - - $foo = (\'cc\', \'\-E\', $bar); - -.fi -は変数 bar の値を変数 foo に代入します。 -変数として実際に存在する配列のスカラのコンテキストとしての値は、 -配列の長さになることに注意して下さい。 -次の例では $foo に 3 を代入します: -.nf - -.ne 2 - @foo = (\'cc\', \'\-E\', $bar); - $foo = @foo; # $foo は 3 になります - -.fi -配列リテラルの括弧を閉じる前に余分なコンマがあっても大丈夫で、 -以下のように書けます: -.nf - - @foo = ( - 1, - 2, - 3, - ); - -.fi -リストが評価されるとき、リストの要素はすべて配列のコンテキストとして -評価され、結果として得られる配列値に、個々の要素がリストのメンバで -あったかのようにリストに挿入されます。 -たとえば、@foo のすべての要素、@bar のすべての要素、サブルーチン -SomeSub が返すすべての要素を含むリスト\*(--以下 - - (@foo,@bar,&SomeSub) - -の中では、配列の識別ができなくなります。 -.PP -リストの値は通常の配列と同様に添え字をつけて使えます。 -例: -.nf - - $time = (stat($file))[8]; # stat は配列値を返します - $digit = ('a','b','c','d','e','f')[$digit-10]; - return (pop(@foo),pop(@foo))[0]; - -.fi -.PP -配列のリストは、そのすべての要素が左辺値であるときに限り代入可能です: -.nf - - ($a, $b, $c) = (1, 2, 3); - - ($map{\'red\'}, $map{\'blue\'}, $map{\'green\'}) = (0x00f, 0x0f0, 0xf00); - -最後の要素は配列や連想配列であってもかまいません: - - ($a, $b, @rest) = split; - local($a, $b, %rest) = @_; - -.fi -実際には、リストのどこに配列を入れてもいいのですが、リスト中の最初の -配列がすべての値を埋めてしまうので、その後の要素はヌルの値になります。 -これは local() において便利かもしれません。 -.PP -連想配列のリテラルは、キーと値として解釈される値の組を含んでいます: -.nf - -.ne 2 - # 上記 map への代入と同じ - %map = ('red',0x00f,'blue',0x0f0,'green',0xf00); - -.fi -スカラのコンテキストへの配列の代入は、代入の右辺の式により生成される -要素の数を返します: -.nf - - $x = (($foo,$bar) = (3,2,1)); # $x に 2 でなく 3 をセット - -.fi -.PP -知っておかなければならない幾つかの疑似リテラルがあります。 -文字列を `` (低アクセント) で囲んだ場合、ちょうどダブルクォートと -同じ変数置換が行なわれます。次にシェルの中のように、コマンドであると -解釈され、そのコマンドの出力がこの擬似リテラルの値となります。 -スカラのコンテキストでは、全出力から成る一つの文字列が返されます。 -配列のコンテキストでは、出力の各行がそれぞれ一つの要素となった配列値 -が返されます。 -(行ターミネータを変えたい場合には、$/ をセットできます。) -コマンドは擬似リテラルが評価されるたびに実行されます。コマンドの戻り値 -は、$? に返されます -($? の解釈については予約変数のセクションを参照して下さい)。 -\f2csh\f1 の場合と異なり、返されるデータに置換は行なわれません -\*(-- 改行は改行として残ります。 -どのシェルとも違って、シングルクォートで囲んでもコマンド内の変数名は解 -釈されてしまいます。 -$ をシェルに渡すには、バックスラッシュが必要です。 -.PP -カギ括弧 <> に囲まれたファイルハンドルを評価すると、そのファイルから次の -行を読み込みます (改行が含まれるため EOF までは決して偽に成りません。 -EOF では undefined 値が返ります)。 -通常はその値を変数に代入する必要がありますが、一つだけ -自動的に代入が起こる状況があります。入力シンボルだけが while ループの -条件文の中にある場合は(そしてこの場合にかぎり)、値は変数 -\*(L"$_\*(R" に自動的に代入されます。 -(奇妙に思うかもしれませんが、ほとんどの -.I perl -スクリプトにおいて、この構文を使うことになるでしょう。) -とにかく、次の例はすべて同等となります。 -.nf - -.ne 5 - while ($_ = <STDIN>) { print; } - while (<STDIN>) { print; } - for (\|;\|<STDIN>;\|) { print; } - print while $_ = <STDIN>; - print while <STDIN>; - -.fi -ファイルハンドル -.IR STDIN , -.IR STDOUT , -.I STDERR -は予約されています。 -(ファイルハンドル -.IR stdin , -.IR stdout , -.I stderr -でも動作しますが、パッケージの中ではグローバルではなくローカルな識別子 -として解釈されるので、働きません。) -これ以外のファイルハンドルは、 -.I open -関数で作成できます。 -.PP -配列を探すコンテキストの中で <FILEHANDLE> が使われると、すべての入力行 -の一行が一要素である配列が返ります。この方法で*巨大*なデータ空間が簡単 -に作られるので、注意して使って下さい。 -.PP -ヌルファイルハンドル <> は特殊で、\fIsed\fR や \fIawk\fR の動作を -エミュレートするために使えます。 -<> からの入力には、標準入力やコマンドラインに並べられた全ファイルが -入ります。動作の仕方はこうなります。 <> の最初の評価では、ARGV 配列が -チェックされ、それがヌルであると、$ARGV[0] は標準入力をオープンする \'-\' -にセットされます。 -次に ARGV 配列がファイル名のリストとして処理されます。 -次のループは、 -.nf - -.ne 3 - while (<>) { - .\|.\|. # 各行に対するコード - } - -.ne 10 -以下の疑似コードと同等になります。 - - unshift(@ARGV, \'\-\') \|if \|$#ARGV < $[; - while ($ARGV = shift) { - open(ARGV, $ARGV); - while (<ARGV>) { - .\|.\|. # 各行に対するコード - } - } - -.fi -前者は、書くのが面倒でないというだけで、同じように動作します。 -実際には、前者でも 配列 ARGV を shift し、現在のファイル名を変数 ARGV -に代入します。 -内部では、ファイルハンドル ARGV を使います \*(--<> は、魔術的な <ARGV> -とまったく同義です。 -(上の疑似コードでは、<ARGV> を魔術的でないものとして扱うので、 -動きません) -.PP -ファイル名のリストの配列が残っている限り、最初の <> の前に @ARGV を -変更することができます。 -行番号 ($.) は入力が一つの大きなファイルであるかのように増えていきます。 -(ファイル毎に行番号をリセットする方法については eof の例を参照して -下さい。) -.PP -.ne 5 -@ARGV に自分でファイルのリストをセットしたい場合は、そうして下さい。 -スクリプトにスイッチを渡したい場合、スクリプトの前の方に次のような -ループを置くことでできます: -.nf - -.ne 10 - while ($_ = $ARGV[0], /\|^\-/\|) { - shift; - last if /\|^\-\|\-$\|/\|; - /\|^\-D\|(.*\|)/ \|&& \|($debug = $1); - /\|^\-v\|/ \|&& \|$verbose++; - .\|.\|. # 他のスイッチ - } - while (<>) { - .\|.\|. # 各行に対するコード - } - -.fi -<> シンボルは一回だけ*偽*を返します。 -その後、もう一度呼ぶと、別の @ARGV リストを処理しているとみなして、 -@ARGV がセットされていない場合は -.IR STDIN -から入力されることになります。 -.PP -カギ括弧の中の文字列がスカラ変数への参照であるとき (例えば <$foo>)、 -その変数の内容が読み込むべきファイルハンドル名となります。 -.PP -カギ括弧の中の文字列がファイルハンドルではないとき、検索 (glob) される -ファイルパターンと解釈され、コンテキストによってファイル名の配列 -またはリストの中の次のファイルが返されます。 -最初に $ の解釈の一レベルが行なわれますが、<$foo> は前の段落で -説明されたような間接ファイルハンドルとなるため使えません。 -強制的にファイル名検索と解釈させさければ <${foo}> のように -中括弧 {} を挿入できます。 -例: -.nf - -.ne 3 - while (<*.c>) { - chmod 0644, $_; - } - -は以下と等価です。 - -.ne 5 - open(foo, "echo *.c | tr \-s \' \et\er\ef\' \'\e\e012\e\e012\e\e012\e\e012\'|"); - while (<foo>) { - chop; - chmod 0644, $_; - } - -.fi -実際、現在のところこのように実装されています。 -(これは、マシン上に /bin/csh がなければ、空白を含むファイル名では -動かないことを意味します。) -もちろん、上の操作を行なう一番短い方法は、 -.nf - - chmod 0644, <*.c>; - -.fi -です。 -.Sh "文法" -.PP -.I perl -スクリプトは、一連の宣言とコマンドからなります。 -.I perl -の中で宣言されなければならないものは、レポートフォーマットと -サブルーチンです。 -これらの宣言の詳しい説明は下のセクションを参照して下さい。 -初期化されていないユーザが作成したオブジェクトは、それが代入のように -明示的に定義されるまでは、ヌルまたは 0 の値であるとみなされます。 -コマンド列が各入力行に対して実行される -.I sed -や -.I awk -スクリプトと違って、コマンド列は一度だけ実行されます。 -入力ファイル (または複数のファイル) の各行について繰り返しを行うには -明示的にループを設けなければなりませんが、 -着目するファイル、行をよりよくコントロールすることができます。 -(実は、正しくありません \*(-- -.B \-n -や -.B \-p -スイッチで、暗黙のループを行なうことができます。) -.PP -宣言は、コマンドを書くことができる場所ならどこにでも書くことができますが、 -コマンド実行の基本的な流れには影響を与えません \*(-- 宣言は、 -コンパイル時だけにしか影響を与えません。通常、すべての宣言は -スクリプトの最初か最後のどちらかに置きます。 -.PP -.I perl -は、ほとんどの部分において自由形式言語です。 -(唯一の例外はフォーマット宣言で、理由は実に明白です。) -コメントは、# 文字で指示され、行末までとなります。 -/* */ という C のコメントを使おうとすると、コンテキストにより -除算またはパターンマッチと解釈されるので、そういうことはしないで下さい。 -.Sh "複合文" -.IR perl -では、複数のコマンド列を中括弧 {} で囲むことで、一つのコマンドとして -扱うことになり、これをブロックと呼びます。 -.PP -次のような複合コマンドは、フローコントロールに使われます: -.nf - -.ne 4 - if (EXPR) BLOCK - if (EXPR) BLOCK else BLOCK - if (EXPR) BLOCK elsif (EXPR) BLOCK .\|.\|. else BLOCK - LABEL while (EXPR) BLOCK - LABEL while (EXPR) BLOCK continue BLOCK - LABEL for (EXPR; EXPR; EXPR) BLOCK - LABEL foreach VAR (ARRAY) BLOCK - LABEL BLOCK continue BLOCK - -.fi -C や Pascal と違って、これらは文ではなく*ブロック*として定義されているこ -とに注意して下さい。 -これは、中括弧 {} が、\fI必要である\fR ことを意味します \*(-- 一つの -文を置くことは許されません。 -中括弧 {} なしで書きたい場合は、別の方法があります。 -以下はすべて同等のことを行ないます: -.nf - -.ne 5 - if (!open(foo)) { die "Can't open $foo: $!"; } - die "Can't open $foo: $!" unless open(foo); - open(foo) || die "Can't open $foo: $!"; # foo でなければ終わり - open(foo) ? \'hi mom\' : die "Can't open $foo: $!"; - # 最後のものは、ちょっとエキゾチック - -.fi -.PP -.I if -文は単純です。 -*ブロック*は、常に中括弧 {} で囲まれるため、 -.I else -が、どの -.I if -にかかるかという曖昧さは生じません。 -.I unless -を -.IR if -の代わりに使うと、逆の意味となります。 -.PP -.I while -文は、式が真 (ヌル文字列または 0 でない) である限り、ブロックを -実行し続けます。 -識別子とコロンからなるラベルをつけることもできます。 -ラベルはループ制御文 -.IR next , -.IR last , -.I redo -(以下を参照) -によって指し示すループの名前となります。 -.I continue -ブロックがあると、条件文が再評価される前に必ず実行され、C における -.I for -ループの三番目の部分と同様となります。 -こうして、たとえ -.I next -文で継続された場合でもループ変数はインクリメントできることになります -(C の \*(L"continue\*(R" 文と同じ)。 -.PP -.I while -が -.IR until -に置き換えられると テストの意味は逆になりますが、条件判断は最初のループ -の前に行なわれます。 -.PP -.I if -や -.I while -文では、\*(L"(EXPR)\*(R" をブロックに置き換えることができ、 -ブロックの最後のコマンドの値が真なら、条件判断は真となります。 -.PP -.I for -ループは、対応する -.I while -と全く同じように動作します: -.nf - -.ne 12 - for ($i = 1; $i < 10; $i++) { - .\|.\|. - } - -は、以下と同じになります。 - - $i = 1; - while ($i < 10) { - .\|.\|. - } continue { - $i++; - } -.fi -.PP -foreach ループは、通常の配列値について、配列の各要素を変数 VAR に順に -セットしながら繰り返します。 -その変数は、ループに対して暗黙のうちにローカルであり、それ以前の値はルー -プを抜けると元の値に戻ります。 -\*(L"foreach\*(R" キーワードは、実は \*(L"for\*(R" キーワードと同じで、 -\*(L"foreach\*(R" を可読性のために、\*(L"for\*(R" を簡潔さのために -使うことができます。 -VAR が省略されると、$_ が各値にセットされます。 -ARRAY が実際の配列 (配列を返す式ではなく) の場合、ループ内の VAR を変 -更することによって、配列の各要素を変更することができます。 -例: -.nf - -.ne 5 - for (@ary) { s/foo/bar/; } - - foreach $elem (@elements) { - $elem *= 2; - } - -.ne 3 - for ((10,9,8,7,6,5,4,3,2,1,\'BOOM\')) { - print $_, "\en"; sleep(1); - } - - for (1..15) { print "Merry Christmas\en"; } - -.ne 3 - foreach $item (split(/:[\e\e\en:]*/, $ENV{\'TERMCAP\'})) { - print "Item: $item\en"; - } - -.fi -.PP -ブロックそれ自身 (ラベルが付いていても、付いていなくても) は、一度だけ -実行されるループと等価です。 -だから、ブロックを抜けたり再実行するために、すべてのループ制御文を使う -ことができます。 -.I continue -ブロックも付けられます。 -この構成は、case 構造を作成するには特に有用です。 -.nf - -.ne 6 - foo: { - if (/^abc/) { $abc = 1; last foo; } - if (/^def/) { $def = 1; last foo; } - if (/^xyz/) { $xyz = 1; last foo; } - $nothing = 1; - } - -.fi -同等のものを記述する方法が、既にいくつもあるので、perl には公式の -switch 文がありません。 -上記のものに加えて、 -.nf - -.ne 6 - foo: { - $abc = 1, last foo if /^abc/; - $def = 1, last foo if /^def/; - $xyz = 1, last foo if /^xyz/; - $nothing = 1; - } - -または - -.ne 6 - foo: { - /^abc/ && do { $abc = 1; last foo; }; - /^def/ && do { $def = 1; last foo; }; - /^xyz/ && do { $xyz = 1; last foo; }; - $nothing = 1; - } - -または - -.ne 6 - foo: { - /^abc/ && ($abc = 1, last foo); - /^def/ && ($def = 1, last foo); - /^xyz/ && ($xyz = 1, last foo); - $nothing = 1; - } - -さらに - -.ne 8 - if (/^abc/) - { $abc = 1; } - elsif (/^def/) - { $def = 1; } - elsif (/^xyz/) - { $xyz = 1; } - else - {$nothing = 1;} - -.fi -とも書けます。 -これらはすべて内部で switch 構造に最適化されるため、perl は直接目的の -文にジャンプするので、同じ単純なスカラ変数を == や eq や上記のような -パターンマッチで判定する限り、50 個の elsif を使っても perl がたくさん -の不要な文を実行するのでは、という心配は不要となります。 -(ある特定の case ステートメントが最適化されているかどうかに興味があるなら、 -\-D1024 スイッチを付けて実行前に文法ツリーを表示することができます。) -.Sh "単文" -単文のみがその副作用を評価される式となります。 -どの単文もブロックの最後の文でない限り、セミコロンで終らなければ -なりません。最後の文では、セミコロンはなくてもかまいません。 -(それでも、ブロックが一行以上を含んでいるのなら、 -セミコロンはあった方が望ましいです) -.PP -どの単文も、セミコロンで終る前に一つの修飾子を続けることができます。 -可能な修飾子は以下の通りです: -.nf - -.ne 4 - if EXPR - unless EXPR - while EXPR - until EXPR - -.fi -.I if -と -.I unless -修飾子は見かけ通りの意味があります。 -.I while -と -.I until -修飾子も見かけ通りの意味 (条件文が始めに評価されます) ですが、 -do ブロックや do サブルーチンコマンドが付けられたときには異なり、 -条件式が評価される前に一度だけ実行されます。 -これは、以下のようなループが記述できるようにするためです: -.nf - -.ne 4 - do { - $_ = <STDIN>; - .\|.\|. - } until $_ \|eq \|".\|\e\|n"; - -.fi -(後述の -.I do -演算子を参照のこと。修飾子は、どれもループラベルを持てないため、 -後に書かれたループ制御コマンドはこの構造では動かないことに -気をつけて下さい。あしからず。) -.Sh "式" -.I perl -の式は、ほとんど C の式と同じに動作しますが、違いをここに述べます。 -.PP -以下が -.I perl -にあって、C にないものです: -.Ip ** 8 2 -指数演算子。 -.Ip **= 8 -指数代入演算子。 -.Ip (\|) 8 3 -配列をヌルに初期化するために使う、ヌルリスト。 -.Ip . 8 -2 つの文字列の結合演算子。 -.Ip .= 8 -結合代入演算子。 -.Ip eq 8 -文字列の同値性 (== は数値の同値性)。 -覚えるためには、\*(L"eq\*(R" が文字列であると考えれば良いです。 -(状況に応じて、== が文字列と数値の両方の同値性を表す -.I awk -に慣れている人は、ここでは明示しなければならないことに気をつけて下さい !) -.Ip ne 8 -文字列の非同値性 (!= は数値の非同値性)。 -.Ip lt 8 -文字列の less than -.Ip gt 8 -文字列の greater than -.Ip le 8 -文字列の less than or equal -.Ip ge 8 -文字列の greater than or equal -.Ip cmp 8 -文字列の比較。 -1, 0, 1 を返します。 -.Ip <=> 8 -数値の比較。 -1, 0, 1 を返します。 -.Ip =~ 8 2 -演算には、検索、変更をデフォルトで文字列 \*(L"$_\*(R" に対して行うもの -があります。 -この演算子を用いると、別の文字列に対してその演算が行われます。 -右の引数は、検索パターン、置換、変換です。 -左の引数は、デフォルトの \*(L"$_\*(R" の代わりに検索、置換、変換が -行なわれる対象となるものです。 -戻り値は、演算の成否を示します。 -(右の引数が検索パターン、置換、変換以外の式なら、実行時に検索パターン -として解釈されますが、パターンは式が評価される度にコンパイルされなけれ -ばならないので、明示的な検索より効率的ではありません。) -この演算子の優先度は単項マイナス演算子 (-)、autoincrement/decrement -(++, --) より低く、他のどの演算子よりも高くなります。 -.Ip !~ 8 -戻り値が否定されることを除いて =~ と同じです。 -.Ip x 8 -繰り返し演算子。 -左オペランドを右オペランドで指定した回数だけ繰り返した文字列を返します。 -配列のコンテキストでは、左オペランドが括弧に入ったリストの場合、 -リストを繰り返します。 -.nf - - print \'\-\' x 80; # ダッシュの列を出力します - print \'\-\' x80; # 不正、x80 は識別子 - - print "\et" x ($tab/8), \' \' x ($tab%8); # タブに変換 - - @ones = (1) x 80; # 80 個 1 が並んだ配列 - @ones = (5) x @ones; # 全要素を 5 にセット - -.fi -.Ip x= 8 -繰り返し代入演算子。 -スカラに対してのみ動作します。 -.Ip .\|. 8 -範囲演算子。コンテキストによって、実際は二つの異なる演算子になります。 -配列のコンテキストでは、左の値から右の値まで一つずつ数を増やした配列を -返します。 -これは、\*(L"for (1..10)\*(R" というループや配列の切り出し (slice) を -行なうときに便利です。 -.Sp -スカラのコンテキストでは、.\|. は論理値を返します。 -この演算子は、flip-flop のように二つの値を取り、 -sed や awk やいろいろなエディタの行範囲 (comma) 演算子をエミュレート -します。 -各 .\|. 演算子はそれ自身の論理値を保持し、左のオペランドが偽である限り -偽となります。 -左のオペランドが真になると、範囲演算子は、右のオペランドが真になるまで -真となります。その後、範囲演算子が再び偽となります。 -(次に範囲指定演算子が評価されるまで、偽にはなりません。 -真になったのと同じ評価を行った時 (awkと同様) に右のオペランドをテスト -して、偽になることがあり得ますが、一度は真を返します。 -次の評価まで右のオペランドをテストしたくなければ (sed のように)、二つ -にするかわりに三つのドット (.\|.\|.) を使って下さい。) -右のオペランドは、演算子が \*(L"偽\*(R" の状態である間は、 -評価されず、左のオペランドは演算子が \*(L"真\*(R" である間は -評価されません。 -|| や && より優先度はやや低くなります。 -戻り値は、偽ではヌル文字列に、真では (1で始まる) 連続した数に -なります。 -この数は、範囲指定毎にリセットされます。 -連続した範囲の最後の数は、文字列 \'E0\' を持っていて、数値には影響しま -せんが、終点を除きたい場合に検索のきっかけになります。 -数字が 1 より大きくなるのを待つことで、始点を除くことができます。 -スカラ .\|. の両方のオペランドが静的である場合、オペランドは暗黙の -うちに現在の行番号を表す $. 変数と比べられます。 -例: -.nf - -.ne 6 -スカラ演算子としては: - if (101 .\|. 200) { print; } # 100行台を出力します - - next line if (1 .\|. /^$/); # ヘッダ行を読み飛ばします - - s/^/> / if (/^$/ .\|. eof()); # 本体をクォートします - -.ne 4 -配列としては: - for (101 .\|. 200) { print; } # $_ を 100回表示します - - @foo = @foo[$[ .\|. $#foo]; # 高価なノーオペレーション - @foo = @foo[$#foo-4 .\|. $#foo]; # 最後の 5 要素を取り出します - -.fi -.Ip \-x 8 -ファイルテスト。 -この単項演算子は一つの引数として、ファイル名またはファイルハンドルを取 -り、そのファイルについて、何かが真であるかどうかを見るものです。 -引数が省略されると、$_ を調べますが、例外として \-t は -.IR STDIN -を調べます。 -真の場合は 1 を、偽の場合は \'\' を返し、ファイルが存在していない場合 -は、undefined の値を返します。 -優先度は、論理値や関係演算子より高くなりますが、算術演算子より低くなり -ます。 -演算子は以下の通りです: -.nf - \-r ファイルを実効 uid/gid で読み込める。 - \-w ファイルに実効 uid/gid で書き込める。 - \-x ファイルを実効 uid/gid で実行できる。 - \-o ファイルの所有者が、実効 uid である。 - \-R ファイルを実 uid/gid で読み込める。 - \-W ファイルを実 uid/gid で書き込める。 - \-X ファイルを実 uid/gid で実行できる。 - \-O ファイルの所有者が、実 uid である。 - \-e ファイルが存在する。 - \-z ファイルサイズが 0 である。 - \-s ファイルサイズが 0 でない (サイズを返す)。 - \-f ファイルはプレーンファイルである。 - \-d ファイルはディレクトリである。 - \-l ファイルはシンボリックリンクである。 - \-p ファイルは名前付きパイプ (FIFO) である。 - \-S ファイルはソケットである。 - \-b ファイルはブロック特殊ファイルである。 - \-c ファイルはキャラクタ特殊ファイルである。 - \-u ファイルには setuid ビットが立っている。 - \-g ファイルには setgid ビットが立っている。 - \-k ファイルには sticky ビットが立っている。 - \-t ファイルハンドルが tty にオープンされている。 - \-T ファイルはテキストファイルである。 - \-B ファイルはバイナリファイルである (\-T の逆)。 - \-M スクリプトを開始した時点でのファイルの古さ(単位は日)。 - \-A アクセス時刻と同じ。 - \-C inode 変更時刻と同じ。 - -.fi -ファイルパーミッション演算子 \-r, \-R, \-w, \-W, \-x, \-X の解釈は、 -単にファイルのモードとユーザの uid, gid に基づきます。 -他の理由で、実際にファイルを読み、書き、実行ができないことがあるかも -しれません。 -また、気をつけなけらばならないのは、スーパユーザにとって -\-r, \-R, \-w, \-W は常に 1 を返し、そのモードでいずれかの実行ビットが -立っていれば、\-x, \-X も常に 1 を返すというところです。 -従って、スーパユーザが実行するスクリプトは、ファイルの実際のモードを決 -めるために stat() を実行したり、一時的に他の uid を立てる必要があるか -もしれません。 -.Sp -例: -.nf -.ne 7 - - while (<>) { - chop; - next unless \-f $_; # 特殊ファイルを無視 - .\|.\|. - } - -.fi -\-s/a/b/ としても、否定した置換をするわけではないことに注意して -下さい。 -\-exp($foo) とすると、期待通りに動きますが、\*(-- マイナスの後が一文字 -の場合、ファイルテストと解釈されます。 -.Sp -\-T と \-B は以下のように動作します。 -ファイルの先頭のブロックあたりに、変なコントロールコードや -メタキャラクタのような、おかしな文字がないかどうかを調べます。 -おかしな文字が (10%以上) 見つかると、それは \-B ファイル、 -でなければ \-T ファイルとなります。 -最初のブロックにヌルが含まれるファイルもバイナリファイルとみなされます。 -\-T や \-B がファイルハンドルに使われると、最初のブロックではなく、 -そのときの標準入力バッファが調べられます。 -ヌルファイル(サイズ 0 のファイル)の場合やファイルハンドルをテストしていて -、それが EOF である場合、\-T と \-B は共に真を返します。 -.PP -すべてのファイルテスト (と stat 演算子)は、アンダライン一つ _ から -成る特殊ファイルハンドルを与えられると、システムコールを保存することに -よって、その直前に行なわれたファイルテスト (または stat演算子) で使わ -れた stat 構造体が使われます。 -(この _ の働きは \-t では動作せず、lstat と -l が stat 構造体に -実ファイルではなく、シンボリックリンクの値を残すことを覚えて -おかなければなりません。) -例: -.nf - - print "Can do.\en" if -r $a || -w _ || -x _; - -.ne 9 - stat($filename); - print "Readable\en" if -r _; - print "Writable\en" if -w _; - print "Executable\en" if -x _; - print "Setuid\en" if -u _; - print "Setgid\en" if -g _; - print "Sticky\en" if -k _; - print "Text\en" if -T _; - print "Binary\en" if -B _; - -.fi -.PP -C にあって、 -.I perl -にないもの: -.Ip "単項 &" 12 -アドレス演算子 -.Ip "単項 *" 12 -"アドレスを通しての"参照演算子 -.Ip "(TYPE)" 12 -型変換演算子。 -.PP -C のように、 -.I perl -は、演算子への引数が皆、静的で、副作用がない場合だけコンパイル時にある -程度の式の評価を行なってしまいます。 -特に、変数置換を行なわないリテラル間での文字列の結合は、コンパイル時に -行なわれます。 -バックスラッシュの解釈もコンパイル時に起こります。 -.nf - -.ne 2 - \'Now is the time for all\' . "\|\e\|n" . - \'good men to come to.\' - -.fi -これは全部、内部では一つの文字列にされてしまいます。 -.PP -++ 演算子にはちょっと拡張した細工が施されています。 -数値変数や数値コンテキストとして使われた変数をインクリメントすると、通 -常のインクリメントになりますが、変数がヌルでない文字コンテキストとして -だけ使われて来ていて、パターン /^[a\-zA\-Z]*[0\-9]*$/ にマッチする場合は、 -各文字の範囲をキャリー付きで保存し、文字としてインクリメントされます: -.nf - - print ++($foo = \'99\'); # prints \*(L'100\*(R' - print ++($foo = \'a0\'); # prints \*(L'a1\*(R' - print ++($foo = \'Az\'); # prints \*(L'Ba\*(R' - print ++($foo = \'zz\'); # prints \*(L'aaa\*(R' - -.fi --- 演算子には、このような細工はありません。 -.PP -(配列のコンテキストにおける) 範囲演算子は、最大値と最小値が文字列の -場合に、細工した自動インクリメントアルゴリズムを使います。 -すべてのアルファベット文字を得るには、 - - @alphabet = (\'A\' .. \'Z\'); - -16 進数を得るには、 - - $hexdigit = (0 .. 9, \'a\' .. \'f\')[$num & 15]; - -始めに 0 を付けた日付を得るには、 - - @z2 = (\'01\' .. \'31\'); print @z2[$mday]; - -と書けます。 -(最後に指定された値が、細工したインクリメントの生成するシークエンスに -含まれていない場合、次の値が最後に指定された値より長くなるまでシークエ -ンスを続けます。) -.PP -|| と && は、0 や 1 を返す C のそれとは違って、最後に評価された値を -返します。 -だから、ホームディレクトリをみつける移植性の高い方法は、こうなります。 -.nf - - $home = $ENV{'HOME'} || $ENV{'LOGDIR'} || - (getpwuid($<))[7] || die "You're homeless!\en"; - -.fi -.PP -前述のリテラルや変数に合わせ、以降の節で説明する演算は -式中で項として使えます。 -これらの演算の幾つかは、引数に*リスト*を取ります。 -リストは、スカラや配列値からなります。 -配列値がリストの中にあると、その場所に挿入されたように個々の値がリスト -の中に含まれて、長い一次元配列値を作ることになります。 -*リスト* の要素はコンマで区切られていなければなりません。 -引数を括弧で囲んでも囲まなくても、演算をリスト出来ます。 -これは関数呼び出しと同様単項演算子として、 -演算を使うことができることを意味します。 -関数呼び出しとして使うには、同じ行の次のトークンは左括弧でなければなり -ません。 -(空白が間にはさまってもかまいません。) -そのような関数は、予想される通り最優先となります。 -左括弧を持っていないトークンが続くとすれば、それは単項演算子で、リスト -演算子かどうかによって、優先度が決まります。 -リスト演算子は最も優先度が低くなります。 -すべての単項演算子は、関係演算子よりも優先されますが、算術演算子よりも -優先度は低くなります。 -優先度のセクションを参照して下さい。 -.PP -スカラや配列のコンテキストで使われる演算子の場合、失敗すると一般に、 -スカラコンテキストでは undefined 値を返し、配列のコンテキストでは -ヌルリストを返します。 -しかし、*リストをスカラに変換する一般的な規則はない* ということを -忘れないで下さい。 -それぞれの演算子は、どの種のスカラを返すのが最も適当であるかを決めます。 -ある演算子は、配列のコンテキストとして返されるようなリストの長さを返し -ます。リストの最初の値を返す演算子、リストの最後の値を返す演算子、 -操作に成功した回数を返す演算子などもあります。 -一般に、一貫性を求めなければ、演算子は求めるものを返します。 -.Ip "/PATTERN/" 8 4 -m/PATTERN/ を参照して下さい。 -.Ip "?PATTERN?" 8 4 -これは、 -.I reset -演算子呼び出しの間で一回しかマッチしないことを除けば、 -/pattern/ 検索と全く同じです。 -これは例えば、一群のファイルの中で、各ファイルに最初に何かが出現すること -を見たいとき、便利な最適化です。 -そのときのパッケージにローカルな ?? パターンだけは、リセットされます。 -.Ip "accept(NEWSOCKET,GENERICSOCKET)" 8 2 -accept システムコールと同じことをします。 -成功すると真を、失敗すると偽を返します。 -プロセス間通信のセクションの例を参照して下さい。 -.Ip "alarm(SECONDS)" 8 4 -.Ip "alarm SECONDS" 8 -指定した秒数 (実際には、1 を引いたもの) が経過したあと、自分の -プロセスに SIGALRM を伝えます。 -つまり、alarm(15) なら、14 秒以上経ったある時点で SIGALRM を生じます。 -一度に一つのタイマしかカウントされません。呼び出される毎にそれ以前の -タイマは無効となり、引数 0 で呼び出すと以前のタイマをキャンセルし -て、新しいタイマは始動しません。 -戻り値は、直前のタイマの残り時間です。 -.Ip "atan2(Y,X)" 8 2 -Y/X の アークタンジェント を -.if t \-\(*p から \(*p. -.if n \-π から π -の範囲で返します。 -.Ip "bind(SOCKET,NAME)" 8 2 -bind システムコールと同じことをします。 -成功すれば真を、失敗すれば偽を返します。 -NAME は、ソケットに合った適切な型の pack されたアドレスでなければなりません。 -プロセス間通信のセクションの例を参照して下さい。 -.Ip "binmode(FILEHANDLE)" 8 4 -.Ip "binmode FILEHANDLE" 8 4 -バイナリファイルとテキストファイルを区別するオペレーティングシステム上 -で、そのファイルを \*(L"バイナリ\*(R" として読み込まれるようにします。 -バイナリモードで読み込まれないファイルは、CR LF が入力時に LF に変換 -され、出力時には、LF が CR LF に変換されます。 -binmode は、UNIX では無効です。 -FILEHANDLE が式のときは、値がファイルハンドルの名前として扱われます。 -.Ip "caller(EXPR)" -.Ip "caller" -現在のサブルーチン呼び出しのコンテキストを返します: -.nf - - ($package,$filename,$line) = caller; - -.fi -EXPRがあると、デバッガがスタックトレースに出力して使う拡張情報も -返します。 -EXPRの値は、現在のサブルーチンの前にいくつの call フレームがあるかを -示します。 -.Ip "chdir(EXPR)" 8 2 -.Ip "chdir EXPR" 8 2 -動作しているディレクトリを、もしできるなら EXPR に変更します。 -EXPRが省略されると、ホームディレクトリになります。 -成功すれば 1 を、失敗すれば 0 を返します。 -.IR die -の例を参照して下さい。 -.Ip "chmod(LIST)" 8 2 -.Ip "chmod LIST" 8 2 -ファイルのリストのパーミッションを変更します。 -リストの最初の要素は、数値モードでなければなりません。 -成功したファイルの数を返します。 -.nf - -.ne 2 - $cnt = chmod 0755, \'foo\', \'bar\'; - chmod 0755, @executables; - -.fi -.Ip "chop(LIST)" 8 7 -.Ip "chop(VARIABLE)" 8 -.Ip "chop VARIABLE" 8 -.Ip "chop" 8 -文字列の最後の文字を削り、削られた文字を返します。 -基本的には、入力されたレコードの終りから改行文字を除くために使われます -が、文字列のコピーをスキャンするわけではないので、s/\en// より -効率的です。 -VARIABLE を省略すると、$_ を chop します。 -例: -.nf - -.ne 5 - while (<>) { - chop; # 最後のフィールドの \en を除く - @array = split(/:/); - .\|.\|. - } - -.fi -実際には、代入を含む左辺値のいかなるものも chop できます。 -.nf - - chop($cwd = \`pwd\`); - chop($answer = <STDIN>); - -.fi -リストを chop するとすべての要素が chop され、 -最後に chop された値が返されます。 -.Ip "chown(LIST)" 8 2 -.Ip "chown LIST" 8 2 -ファイルのリストの所有者 (と所有グループ) を変えます。 -リストの最初の二つの要素は数値で表した uid と gid がこの順で指定され -なければなりません。 -変更に成功したファイルの数を返します。 -.nf - -.ne 2 - $cnt = chown $uid, $gid, \'foo\', \'bar\'; - chown $uid, $gid, @filenames; - -.fi -.ne 23 -以下は、passwd ファイルから数値でない uid を検索する例です: -.nf - - print "User: "; - $user = <STDIN>; - chop($user); - print "Files: " - $pattern = <STDIN>; - chop($pattern); -.ie t \{\ - open(pass, \'/etc/passwd\') || die "Can't open passwd: $!\en"; -'br\} -.el \{\ - open(pass, \'/etc/passwd\') - || die "Can't open passwd: $!\en"; -'br\} - while (<pass>) { - ($login,$pass,$uid,$gid) = split(/:/); - $uid{$login} = $uid; - $gid{$login} = $gid; - } - @ary = <${pattern}>; # ファイルを得ます - if ($uid{$user} eq \'\') { - die "$user not in passwd file"; - } - else { - chown $uid{$user}, $gid{$user}, @ary; - } - -.fi -.Ip "chroot(FILENAME)" 8 5 -.Ip "chroot FILENAME" 8 -同名のシステムコールと同じことをします。 -これが何をするのか知らないとしても、気にしないで下さい。 -FILENAME を省略すると、$_ に chroot します。 -.Ip "close(FILEHANDLE)" 8 5 -.Ip "close FILEHANDLE" 8 -ファイルハンドルに結びつけられたファイルやパイプをクローズします。 -別のファイルをオープンしようとしている場合は、FILEHANDLE を閉じる -必要がありません。オープンした際に前のファイルをクローズしてくれる -からです。 -( -.IR open -を参照して下さい) -しかし、明示的に入力ファイルのクローズをすると行カウンタ ($.) が -リセットされるのに対し、 -.I open -のときに行なわれる暗黙のクローズでは、リセットされません。 -また、後でパイプの出力を見たい場合は、パイプをクローズするとパイプで -起動されたプロセスの完了を待ちます。 -パイプを明示的にクローズすると、コマンド情報の戻り値が $? に -入れられます。 -例: -.nf - -.ne 4 - open(OUTPUT, \'|sort >foo\'); # sort へパイプ - .\|.\|. # print stuff to output - close OUTPUT; # sort の終了を待ちます - open(INPUT, \'foo\'); # sortの結果を得ます - -.fi -FILEHANDLE は実際のファイルハンドル名を与える式でもかまいません。 -.Ip "closedir(DIRHANDLE)" 8 5 -.Ip "closedir DIRHANDLE" 8 -opendir() でオープンされたディレクトリをクローズします。 -.Ip "connect(SOCKET,NAME)" 8 2 -connect システムコールと同じことをします。 -成功すると真を、失敗すると偽を返します。 -NAME はソケットに合った適当な型のパッケージアドレスでなければ -なりません。 -プロセス間通信のセクションの例を参照して下さい。 -.Ip "cos(EXPR)" 8 6 -.Ip "cos EXPR" 8 6 -EXPR (ラジアンで表現) のコサインを返します。 -EXPR を省略すると $_ のコサインを取ります。 -.Ip "crypt(PLAINTEXT,SALT)" 8 6 -C ライブラリの crypt() 関数と正確に同じように encrypt された文字列 -を返します。 -パスワードファイルを調べて、粗野なパスワードを見つけるのに便利です。 -白い帽子をかぶっている奴だけがこれをしなければなりません。 -.Ip "dbmclose(ASSOC_ARRAY)" 8 6 -.Ip "dbmclose ASSOC_ARRAY" 8 -dbm ファイルと連想配列の結び付きを解除します。 -連想配列に残っている値は、dbm ファイルのキャッシュに何が入っているか -を知りたいのでなければ、意味がないものとなります。 -この関数は、ndbm を使う場合にのみ有用です。 -.Ip "dbmopen(ASSOC,DBNAME,MODE)" 8 6 -dbm や ndbm ファイルと連想配列を結び付けます。 -ASSOC は連想配列の名前です。 -(通常の open と違って、最初の引数はファイルハンドルのように見えても、 -ファイルハンドルでは*ありません*)。 -DBNAME は、(.dir や .pag の拡張子を除いた) データベースの名前です。 -データベースが存在しないと、(umaskで修飾された) MODE で指定された -プロテクションで作成します。 -古い dbm 関数しかサポートしないシステムでは、プログラムの中で一つの -dbmopen しか許されないかもしれません。 -dbm も ndbm もないシステムでは、dbmopen 呼び出しは致命的なエラーを生 -じます。 -.Sp -それまでの dbmopen で関連付けられた連想配列の値は失われます。 -dbm ファイルのうち、ある量の値はメモリにキャッシュされます。 -デフォルトでその量は 64 ですが、dbmopen の前に連想配列の -ガーベッジエントリの数をあらかじめ確保しておくことで、 -増やすことができます。必要なら、reset コマンドでキャッシュを -フラッシュすることができます。 -.Sp -dbm ファイルへの書き込み許可を持っていない場合、連想配列変数を -読み出すだけで、それをセットすることはできません。 -書き込めるかどうかをテストしたければ、ファイルテストを使うか、エラーを -トラップできる eval の中で、ダミーの配列エントリをセットしようと -してみて下さい。 -.Sp -keys() や valuse() のような関数は、大きな dbm ファイルを使ったときに、 -巨大な配列値を返すかもしれません。 -大きな dbm ファイルで繰り返しをするときは、each() 関数を使った方が -良いかもしれません。 -例: -.nf - -.ne 6 - # 履歴ファイルのオフセットを表示します - dbmopen(HIST,'/usr/lib/news/history',0666); - while (($key,$val) = each %HIST) { - print $key, ' = ', unpack('L',$val), "\en"; - } - dbmclose(HIST); - -.fi -.Ip "defined(EXPR)" 8 6 -.Ip "defined EXPR" 8 -左辺値 EXPR が、実際に値を持っているかどうかを表す論理値を返します。 -多くの演算で、ファイル終端、初期化されていない変数、システムエラーなど -の例外処理条件で undefined 値が返されます。 -この関数は、本当のヌル文字列を返すかもしれない操作、特に配列要素を参照 -する操作の際に、未定義のヌル文字列と定義されたヌル文字列の判別を可能に -します。 -配列やサブルーチンが存在するかどうかを調べることもできます。 -予約済み変数を使うときは、直観的に期待するような結果になるとは保証されて -いません。 -例: -.nf - -.ne 7 - print if defined $switch{'D'}; - print "$val\en" while defined($val = pop(@ary)); - die "Can't readlink $sym: $!" - unless defined($value = readlink $sym); - eval '@foo = ()' if defined(@foo); - die "No XYZ package defined" unless defined %_XYZ; - sub foo { defined &$bar ? &$bar(@_) : die "No bar"; } - -.fi -undef も参照して下さい。 -.Ip "delete $ASSOC{KEY}" 8 6 -指定した連想配列から、指定した値を削除します。 -削除された値が返りますが、何も削除されなかった場合は undefined 値が -返ります。 -$ENV{} から削除すると、環境変数を変更します。 -dbm ファイルに結びつけられた配列を削除すると、dbm ファイルからその項 -目を削除します。 -.Sp -以下の例は、連想配列のすべての値を削除します: -.nf - -.ne 3 - foreach $key (keys %ARRAY) { - delete $ARRAY{$key}; - } - -.fi -(しかし、 -.I reset -コマンドを使った方が速いでしょう。undef %ARRAY ならもっと速いでしょう) -.Ip "die(LIST)" 8 -.Ip "die LIST" 8 -eval の外で、LIST の値を -.I STDERR -に表示して、そのときの $! (errno) の値で終了 (exit) します。 -$! が 0 なら、($? >> 8) (\`command\` のステータス) の値で終了します。 -($? >> 8) が 0 なら、255 で終了します。 -eval の中では、エラーメッセージは $@ に詰め込まれ、eval は undefined -値で終了します。 -.Sp -同等の例: -.nf - -.ne 3 -.ie t \{\ - die "Can't cd to spool: $!\en" unless chdir \'/usr/spool/news\'; -'br\} -.el \{\ - die "Can't cd to spool: $!\en" - unless chdir \'/usr/spool/news\'; -'br\} - - chdir \'/usr/spool/news\' || die "Can't cd to spool: $!\en" - -.fi -.Sp -EXPR の値が改行で終らない場合、スクリプトの現在の行番号と (もしあれば) -入力行番号が出力され、改行が加えられます。 -ヒント: \*(L", stopped\*(R" をメッセージに加えておくと、 -\*(L"at foo line 123\*(R" が加えられたときにわかり易くなるので良い -でしょう。 -スクリプト \*(L"canasta\*(R" を走らせているとすると、 -.nf - -.ne 7 - die "/etc/games is no good"; - die "/etc/games is no good, stopped"; - -は、多分 - - /etc/games is no good at canasta line 123. - /etc/games is no good, stopped at canasta line 123. - -.fi -と出力されます。 -.IR exit -を参照して下さい。 -.Ip "do BLOCK" 8 4 -BLOCK 内で指定されたうち、最後のコマンドの値を返します。 -ループ修飾子に修飾されたときは、ループ条件をテストする前に BLOCK が -一度実行されます。 -(他の文では、ループ修飾子は、条件を始めにテストします。) -.Ip "do SUBROUTINE (LIST)" 8 3 -.I sub -で宣言されたサブルーチンを実行し、SUBROUTINE で最後に評価された式の値 -を返します。 -その名前のサブルーチンがない場合、致命的エラーを生じます。 -(サブルーチンが存在しているかどうかを判定したいなら、\*(L"defined\*(R" -演算子を使うのが良いでしょう。) -配列をリストの一部として渡したいなら、各配列の前に配列の長さを付けて -渡すのが良いでしょう。 -(後に出てくるサブルーチンのセクションを参照して下さい。) -\*(L"do EXPR\*(R" の形との混乱を避けるため、括弧は必要となります。 -.Sp -SUBROUTINE は、一つのスカラ変数でもかまいません。その場合、 -実行されるサブルーチン名は、変数から得られます。 -.Sp -別の (好まれる) 形として、アンパサンド & を前に付ける &foo(@args) の -ように、サブルーチンを呼んでもかまいません。 -引数を渡さないなら、括弧を使う必要はありません。 -括弧を省略すると、サブルーチンには @_ 配列は渡されません。 -& 型は、defined や undef 演算子にサブルーチンを指示するのにも -使われます: -.nf - - if (defined &$var) { &$var($parm); undef &$var; } - -.fi -.Ip "do EXPR" 8 3 -ファイル名として EXPR の値を使い、 -.I perl -スクリプトとして、ファイルの内容を実行します。 -これは基本的に -.I perl -サブルーチンライブラリからサブルーチンをインクルードするという使い方を -します。 -.nf - - do \'stat.pl\'; - -は、 - - eval \`cat stat.pl\`; - -.fi -とほとんど同じです。 -違うのは、より効率的で、より簡潔で、エラーメッセージ中の現在ファイル名 -は正しく、カレントディレクトリに stat.pl がなければ -.B \-I -で指定されたライブラリをすべて探すということです。 -(予約変数のセクション中の @INC 配列を参照して下さい)。 -しかし、呼び出しのたびにファイルを解析し直すのは同じなので、ループの -内側でこのファイルを使うなら、起動時間は少し余計にかかるとしても、 -\-P と #include を使った方が良いでしょう。 -(この #include を使う問題点は、cpp が # コメントを認識してくれない -ことです。\*(--逃げ道は、コメント単独として \*(L";#\*(R" を使うことです。) -次のものは等価ではないことに注意して下さい: -.nf - -.ne 2 - do $foo; # ファイルを eval します - do $foo(); # サブルーチンを呼びます - -.fi -ライブラリルーチンのインクルードとしては、 -\*(L"require\*(R" 演算子の方がより良いことを覚えておいて下さい。 -.Ip "dump LABEL" 8 6 -ただちにコアダンプします。 -もともと、これは、プログラムの始めにすべての変数を初期化した後に -ダンプされたコアを undump プログラムを使って実行バイナリを作るために -あります。 -新しいバイナリが実行されるとき、"goto LABEL" を実行することから -始まります -(goto が受けるすべての制限は適用されます)。 -コアダンプで止まったところから、goto で再び始まると考えれば良いです。 -LABEL が省略されると、プログラムは先頭から再スタートします。 -警告: ダンプされたときに open されていたどのファイルも、プログラムが -再生したときにはもう open されておらず、perlの側では混乱する可能性が -あります。 -\-u も参照して下さい。 -.Sp -例: -.nf - -.ne 16 - #!/usr/bin/perl - require 'getopt.pl'; - require 'stat.pl'; - %days = ( - 'Sun',1, - 'Mon',2, - 'Tue',3, - 'Wed',4, - 'Thu',5, - 'Fri',6, - 'Sat',7); - - dump QUICKSTART if $ARGV[0] eq '-d'; - - QUICKSTART: - do Getopt('f'); - -.fi -.Ip "each(ASSOC_ARRAY)" 8 6 -.Ip "each ASSOC_ARRAY" 8 -連想配列の次のキーと値の 2 つの要素から成る配列を順次返し、 -それを繰り返すことができます。 -各エントリはランダムのように見える順序で返されます。 -配列全部が読み込まれたとき、ヌル配列 (代入されると FALSE(0) 値となる) -が返されます。 -その後、次の each() の呼び出しで繰り返しを再び始めます。 -繰り返し情報は、配列からすべての要素を読み込むことによってのみ -リセットできます。 -繰り返しの間は、配列を変更してはいけません。 -各連想配列につき一つずつ繰り返し情報があり、プログラム中のすべての -each(), keys(), values() 関数呼び出しで共有されます。 -次の例は、順序は異なるものの printenv プログラムのように環境変数を -表示します: -.nf - -.ne 3 - while (($key,$value) = each %ENV) { - print "$key=$value\en"; - } - -.fi -keys() 関数と values() 関数も参照して下さい。 -.Ip "eof(FILEHANDLE)" 8 8 -.Ip "eof()" 8 -.Ip "eof" 8 -次に FILEHANDLE を読んだときファイル終端であるか、 -または FILEHANDLE がオープンされていないとき、1 を返します。 -FILEHANDLE は実際のファイルハンドル名を値に持つ式でもかまいません。 -(この関数は、実際には一文字読み込んでは、ungetc するので、対話的な -コンテキストではそれほど有用ではありません。) -引数無しの eof は、最後に読んだファイルの eof 状態を返します。 -空の括弧 () は、コマンドラインで指定されたファイル群からなる -擬似ファイルを指します。つまり、eof() は while (<>) の内側で最後の -ファイルの終端を検出するときに意味があります。 -while (<>) ループの中で各ファイルを調べたいときは、eof(ARGV) または -括弧のない eof を使って下さい。 -例: -.nf - -.ne 7 - # 最後のファイルの最終行の直前にダッシュを挿入します - while (<>) { - if (eof()) { - print "\-\|\-\|\-\|\-\|\-\|\-\|\-\|\-\|\-\|\-\|\-\|\-\|\-\|\-\en"; - } - print; - } - -.ne 7 - # 各入力ファイル毎に、行番号をリセットします - while (<>) { - print "$.\et$_"; - if (eof) { # Not eof(). - close(ARGV); - } - } - -.fi -.Ip "eval(EXPR)" 8 6 -.Ip "eval EXPR" 8 6 -.Ip "eval BLOCK" 8 6 -EXPR は解析され、一つの小さな -.I perl -プログラムであるかのように実行されます。 -.I perl -プログラムのコンテキストの中で実行されるので、どの変数設定、 -サブルーチン、フォーマット定義もその後に残ります。 -戻り値は、丁度サブルーチンと同様に、最後に評価された式が返ります。 -文法エラーや実行時エラーがあるか、die 文があれば、eval により undefined -が返り、$@ にエラーメッセージがセットされます。 -もしエラーがなければ、$@ はヌル文字列であることが保証されます。 -EXPRを省略すると、$_ を評価します。 -最後のセミコロンはどれも式から除かれます。 -.Sp -eval はしかし、致命的エラーまでトラップするので、 -(dbmopen や symlinkのような) ある機能が実装されているかどうかを -決めるには便利なことを覚えておいて下さい。 -die 演算子が例外を起こすように使われるのは、perl の例外トラップ機構 -でもあります。 -.Sp -実行されるコードが変わらないなら、その度に再コンパイルされる時間を -費すよりは、実行時エラーをトラップする eval-BLOCK の形をとった方が良い -かもしれません。 -どんなエラーも起これば $@ にメッセージが返ります。 -EXPR のような、シングルクォートされた文字列を評価すると、同じ効果が -ありますが、eval-BLOCK の形ではコンパイル時に文法エラーを報告するのに -対し、eval-EXPR の形では $@ を通して実行時に文法エラーを報告する点が -異なります。 -eval-EXPR の形は、最初に成功したときに eval-BLOCK に最適化されます。 -(e 修飾子を使った場合、置換される側はシングルクォートされた文字列と -みなされ、同じ最適化が起こります。) -例: -.nf - -.ne 11 - # 0 除算を致命的エラーにしません - eval { $answer = $a / $b; }; warn $@ if $@; - - # 初回使用後、同じものに最適化されます。 - eval '$answer = $a / $b'; warn $@ if $@; - - # コンパイル時エラー - eval { $answer = }; - - # 実行時エラー - eval '$answer ='; # sets $@ - -.fi -.Ip "exec(LIST)" 8 8 -.Ip "exec LIST" 8 6 -LIST の中に一つ以上の引数があるか、LIST が一つ以上の値を持つ配列ならば、 -リストの引数を付けて execvp() を呼びます。 -一つのスカラ引数だけなら、引数にシェルのメタキャラクタがあるかどうか -を調べます。あれば、解析のために引数を丸ごと \*(L"/bin/sh \-c\*(R" に -渡し、無ければ、引数は単語に split され、execvp() に直接渡されます。 -その方が効率が良いからです。 -注意: exec (と system) は出力バッファをフラッシュしないので、出力が -失われるのを避けるために $| をセットする必要があるかもしれません。 -例: -.nf - - exec \'/bin/echo\', \'Your arguments are: \', @ARGV; - exec "sort $outfile | uniq"; - -.fi -.Sp -もし、最初の引数を本当に実行したいのでなく、実行しようとしている -プログラムの名前を詐称したいだけなら、本当に走らせたいプログラムを変数に -割り当てて、LIST の前に変数の名前をコンマを付けずに置くように -指定できます。 -(これは、たとえ単一スカラしかリストに無くても、常に多くの値を持つ -リストとして LIST の解釈を強制します。) -例: -.nf - -.ne 2 - $shell = '/bin/csh'; - exec $shell '-sh'; # ログインシェルのふりをします - -.fi -.Ip "exit(EXPR)" 8 6 -.Ip "exit EXPR" 8 -EXPR を評価し、ただちにその値で終了します。 -例: -.nf - -.ne 2 - $ans = <STDIN>; - exit 0 \|if \|$ans \|=~ \|/\|^[Xx]\|/\|; - -.fi -.IR die -を参照して下さい。 -EXPR が省略されると、値 0 の状態で終了します。 -.Ip "exp(EXPR)" 8 3 -.Ip "exp EXPR" 8 -.I e -の EXPR 乗を返します。 EXPR を省略すると、exp($_) を返します。 -.Ip "fcntl(FILEHANDLE,FUNCTION,SCALAR)" 8 4 -fcntl(2) 関数の実装です。 -正しい関数定義を得るには、多分 -.nf - - require "fcntl.ph"; # 多分 /usr/local/lib/perl/fcntl.ph - -.fi -を始めに書いておかなければならないでしょう。 -もし、fcntl.ph が存在しないか、もしくは正しい定義がされていない場合、 -<sys/fcntl.h> のような C のヘッダファイルに基づいて、 -自分で何とかしなければなりません。 -(perl kit から来る h2ph と呼ばれる perl スクリプトがあり、 -このことを助けてくれるでしょう) -引数の処理と戻り値を返すことは、 -この後に書かれている ioctl のように動作します。 -fcntl は、fcntl(2) が実装されていないマシンで使われると -致命的エラーを生じます。 -.Ip "fileno(FILEHANDLE)" 8 4 -.Ip "fileno FILEHANDLE" 8 4 -ファイルハンドルに対するファイル記述子を返します。 -select() のビットマップを構成するのに便利です。 -FILEHANDLE が式だと、その値がファイルハンドルの名前と解釈されます。 -.Ip "flock(FILEHANDLE,OPERATION)" 8 4 -ファイルハンドルに対し flock(2) を呼びます。 -OPERATION の定義については、flock(2) のマニュアルを参照して下さい。 -成功すれば真を、失敗すれば偽を返します。 -flock(2) が実装されていないマシンで使うと、致命的エラーになります。 -以下は、BSD システムのメールボックスにメールを追加します。 -.nf - -.ne 20 - $LOCK_SH = 1; - $LOCK_EX = 2; - $LOCK_NB = 4; - $LOCK_UN = 8; - - sub lock { - flock(MBOX,$LOCK_EX); - # 待っている間に、他の誰かが追加する - # 場合のために... - seek(MBOX, 0, 2); - } - - sub unlock { - flock(MBOX,$LOCK_UN); - } - - open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}") - || die "Can't open mailbox: $!"; - - do lock(); - print MBOX $msg,"\en\en"; - do unlock(); - -.fi -.Ip "fork" 8 4 -fork() システムコールを実行します。 -親プロセスに子の pid を返し、子プロセスには 0 を返します。 -注意: フラッシュされていないバッファは、両方のプロセスでフラッシュ -されずに残ります。これは二重出力を避けるために、$| をセットする必要が -あるかもしれないということを意味します。 -.Ip "getc(FILEHANDLE)" 8 4 -.Ip "getc FILEHANDLE" 8 -.Ip "getc" 8 -FILEHANDLE に結びつけられた入力ファイルから、次の文字を返します。 -EOF ではヌルを返します。 FILEHANDLE を省略すると、STDIN から読み込み -ます。 -.Ip "getlogin" 8 3 -現在のログイン状況が /etc/utmp から得られれば、それを返します。 -得られなければ、getpwuid を使って下さい。 - - $login = getlogin || (getpwuid($<))[0] || "Somebody"; - -.Ip "getpeername(SOCKET)" 8 3 -SOCKET 接続の向こう側の pack された sockaddr アドレスを返します。 -.nf - -.ne 4 - # 内部 sockaddr - $sockaddr = 'S n a4 x8'; - $hersockaddr = getpeername(S); -.ie t \{\ - ($family, $port, $heraddr) = unpack($sockaddr,$hersockaddr); -'br\} -.el \{\ - ($family, $port, $heraddr) = - unpack($sockaddr,$hersockaddr); -'br\} - -.fi -.Ip "getpgrp(PID)" 8 4 -.Ip "getpgrp PID" 8 -指定された PID に対する現在のプロセスグループを返します。 -現在のプロセスでは 0 です。 -getpgrp(2) が実装されていないマシンで使うと、致命的エラーになります。 -EXPR が省略されると、現在のプロセスのプロセスグループが返ります。 -.Ip "getppid" 8 4 -親プロセスのプロセス ID を返します。 -.Ip "getpriority(WHICH,WHO)" 8 4 -プロセス、プロセスグループ、ユーザの現在のプライオリティを返します。 -(getpriority(2)を参照して下さい。) -getpriority(2) を実装していないマシンで使うと致命的エラーになります。 -.Ip "getpwnam(NAME)" 8 -.Ip "getgrnam(NAME)" 8 -.Ip "gethostbyname(NAME)" 8 -.Ip "getnetbyname(NAME)" 8 -.Ip "getprotobyname(NAME)" 8 -.Ip "getpwuid(UID)" 8 -.Ip "getgrgid(GID)" 8 -.Ip "getservbyname(NAME,PROTO)" 8 -.Ip "gethostbyaddr(ADDR,ADDRTYPE)" 8 -.Ip "getnetbyaddr(ADDR,ADDRTYPE)" 8 -.Ip "getprotobynumber(NUMBER)" 8 -.Ip "getservbyport(PORT,PROTO)" 8 -.Ip "getpwent" 8 -.Ip "getgrent" 8 -.Ip "gethostent" 8 -.Ip "getnetent" 8 -.Ip "getprotoent" 8 -.Ip "getservent" 8 -.Ip "setpwent" 8 -.Ip "setgrent" 8 -.Ip "sethostent(STAYOPEN)" 8 -.Ip "setnetent(STAYOPEN)" 8 -.Ip "setprotoent(STAYOPEN)" 8 -.Ip "setservent(STAYOPEN)" 8 -.Ip "endpwent" 8 -.Ip "endgrent" 8 -.Ip "endhostent" 8 -.Ip "endnetent" 8 -.Ip "endprotoent" 8 -.Ip "endservent" 8 -これらのルーチンは、システムライブラリ中の同名の関数を実行します。 -配列のコンテキストの中では、これらの各 get ルーチンの戻り値は、 -以下のようになります: -.nf - - ($name,$passwd,$uid,$gid, - $quota,$comment,$gcos,$dir,$shell) = getpw.\|.\|. - ($name,$passwd,$gid,$members) = getgr.\|.\|. - ($name,$aliases,$addrtype,$length,@addrs) = gethost.\|.\|. - ($name,$aliases,$addrtype,$net) = getnet.\|.\|. - ($name,$aliases,$proto) = getproto.\|.\|. - ($name,$aliases,$port,$proto) = getserv.\|.\|. - -.fi -(もしエントリが存在しなければ、ヌルリストになります。) -.Sp -スカラのコンテキストでは、 -name による検索でない場合には name が得られ、 -name による検索の場合には name 以外が得られます。 -(エントリが存在しない場合は、undefined 値となります。) -例: -.nf - - $uid = getpwnam - $name = getpwuid - $name = getpwent - $gid = getgrnam - $name = getgrgid - $name = getgrent - 他 - -.fi -getgr.\|.\|. の返す $menbers 値は、空白で区切られたグループメンバの -ログイン名のリストです。 -.Sp -gethost.\|.\|. 関数では、h_errno 変数が C でサポートされていれば、 -関数のコールが失敗したとき $? を介して返されます。 -成功した関数コールの返す @addrs 値は、相当するシステムライブラリ -呼び出しに返された raw address のリストです。 -インターネットドメイン (INET) では、各アドレスは 4 バイト長で -以下のように書くと unpack できます。 -.nf - - ($a,$b,$c,$d) = unpack('C4',$addr[0]); - -.fi -.Ip "getsockname(SOCKET)" 8 3 -pack された、SOCKET接続のこちら側の sockaddr アドレスを返します。 -.nf - -.ne 4 - # An internet sockaddr - $sockaddr = 'S n a4 x8'; - $mysockaddr = getsockname(S); -.ie t \{\ - ($family, $port, $myaddr) = unpack($sockaddr,$mysockaddr); -'br\} -.el \{\ - ($family, $port, $myaddr) = - unpack($sockaddr,$mysockaddr); -'br\} - -.fi -.Ip "getsockopt(SOCKET,LEVEL,OPTNAME)" 8 3 -要求したソケットのオプションを返します。エラーの場合は undefined を -返します。 -.Ip "gmtime(EXPR)" 8 4 -.Ip "gmtime EXPR" 8 -time 関数に返された時刻を、Greenwich timezone として 9 要素の配列に -変換します。 -通常は次のように使います: -.nf - -.ne 3 -.ie t \{\ - ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time); -'br\} -.el \{\ - ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = - gmtime(time); -'br\} - -.fi -すべての配列要素は数値で、構造体 tm から直接得られるものです。 -これにより $mon は 0.\|.11 の範囲で $wday は 0.\|.6 の範囲であることに -なります。 -EXPR を省略すると、gmtime(time) を実行します。 -.Ip "goto LABEL" 8 6 -LABEL というラベルを付けられた文を探し、そこから実行を再開します。 -現在のところ、プログラムの本体内で do {} 構造の内側が -入れ子になっていない文にしか行けません。 -この文は効率的には実装されておらず、 -.IR sed -to- perl -翻訳プログラムを簡単にできるようにするためだけあります。 -翻訳された -.I sed -スクリプトの一貫性のサポートはしますが、このセマンティックスを私がいつ -変更するかわからないので、自らの責任で使って下さい。 -全く使わない方が良いでしょう。 -.Ip "grep(EXPR,LIST)" 8 4 -LIST の各要素に対して (ローカルには各要素を $_ にセット)、EXPR を -評価して、式が真であると評価された要素だけからなる配列を返します。 -スカラのコンテキストでは、式が真になった回数を数値で返します。 -.nf - - @foo = grep(!/^#/, @bar); # コメントを除きます - -.fi -$_ は配列値への参照なので、配列の要素を変更する場合に使えることを -覚えておきましょう。 -これは便利ですが、LIST が名前のついた配列でないと、おかしな結果を -引き起こすことになります。 -.Ip "hex(EXPR)" 8 4 -.Ip "hex EXPR" 8 -10 進値 EXPR を 16 進文字列にして返します。 -(0 または 0x で始まる文字列を解釈するなら、oct() を参照して下さい。) -EXPR を省略すると $_ を使います。 -.Ip "index(STR,SUBSTR,POSITION)" 8 4 -.Ip "index(STR,SUBSTR)" 8 4 -STR の中で、POSITION かそれ以降に最初に SUBSTR が現れる位置を返します。 -POSITION を省略すると、文字列の先頭から検索します。 -戻り値は、0 か $[ 変数に設定されたものがベースになります。 -SUBSTR がみつからないと、ベースから 1 を引いた値を返し、通常 \-1 に -なります。 -.Ip "int(EXPR)" 8 4 -.Ip "int EXPR" 8 -EXPR の整数部を返します。 -EXPR が省略されると、$_ を使います。 -.Ip "ioctl(FILEHANDLE,FUNCTION,SCALAR)" 8 4 -これは、ioctl(2) 関数を実装しています。 -正しい関数定義を得るには、多分始めの方で -.nf - - require "ioctl.ph"; # 多分 /usr/local/lib/perl/ioctl.ph - -.fi -と書かなければならないでしょう。 -ioctl.ph が存在しないか、または正しく定義されていない場合、 -<sys/ioctl.h> のような C のヘッダファイルから自分自身でなんとかしな -ければなりません。 -(perl キットにある h2ph というスクリプトがこの助けになるでしょう。) -SCALAR は、FUNCTIONに依存して、参照または書き込みがされます。 -FUNCTION \*(--SCALAR の文字列値へのポインタは、実際の ioctl 呼び出しの -第 3 引数に渡されます。 -(SCALAR が文字列値でなく数値であった場合、文字列値へのポインタでなく -数値そのものが渡されます。これが真であることを保証するには、このスカラを -使う前に 0 を加えて下さい。) -ioctl() に使われる構造体の値を扱うには、pack() 関数と unpack() 関数が -便利です。 -次の例は、DEL に erase 文字をセットします。 -.nf - -.ne 9 - require 'ioctl.ph'; - $sgttyb_t = "ccccs"; # chars 4 個と short 1 個 - if (ioctl(STDIN,$TIOCGETP,$sgttyb)) { - @ary = unpack($sgttyb_t,$sgttyb); - $ary[2] = 127; - $sgttyb = pack($sgttyb_t,@ary); - ioctl(STDIN,$TIOCSETP,$sgttyb) - || die "Can't ioctl: $!"; - } - -.fi -ioctl (と fcntl) の戻り値は以下の通りです: -.nf - -.ne 4 - OS の戻り値:\h'|3i'perlの戻り値: - -1\h'|3i' undefined 値 - 0\h'|3i' 文字列 "0 but true" - それ以外\h'|3i' その数 - -.fi -このように、perl は成功時に真を、失敗時に偽を返しますが、 -オペレーティングシステムから返される実際の値も簡単に判定することができます: -.nf - - ($retval = ioctl(...)) || ($retval = -1); - printf "System returned %d\en", $retval; -.fi -.Ip "join(EXPR,LIST)" 8 8 -.Ip "join(EXPR,ARRAY)" 8 -分割されている LIST や ARRAY の文字列を、フィールドセパレータとして -値 EXPR をはさんだ一つの文字列につなげて、その文字列を返します。 -例: -.nf - -.ie t \{\ - $_ = join(\|\':\', $login,$passwd,$uid,$gid,$gcos,$home,$shell); -'br\} -.el \{\ - $_ = join(\|\':\', - $login,$passwd,$uid,$gid,$gcos,$home,$shell); -'br\} - -.fi -.IR split -を参照して下さい。 -.Ip "keys(ASSOC_ARRAY)" 8 6 -.Ip "keys ASSOC_ARRAY" 8 -名前のついた連想配列のすべてのキーからなる普通の配列を返します。 -キーは、見かけ上ランダムな順で返されますが、values() 関数や each() 関数 -(これによって連想配列は変更されません) が生成するものと同じ順になります。 -以下は、環境変数を表示する別の方法です: -.nf - -.ne 5 - @keys = keys %ENV; - @values = values %ENV; - while ($#keys >= 0) { - print pop(@keys), \'=\', pop(@values), "\en"; - } - -キーでソートすると: - -.ne 3 - foreach $key (sort(keys %ENV)) { - print $key, \'=\', $ENV{$key}, "\en"; - } - -.fi -.Ip "kill(LIST)" 8 8 -.Ip "kill LIST" 8 2 -プロセスのリストにシグナルを送ります。 -リストの最初の要素は、送られるシグナルでなければなりません。 -シグナル送信に成功したプロセスの数を返します。 -.nf - - $cnt = kill 1, $child1, $child2; - kill 9, @goners; - -.fi -シグナルが負の場合、プロセスの代わりにプロセスグループを kill します。 -(System Vでは、負の \fIプロセス\fR 番号はプロセスグループも kill -しますが、互換性はありません。) -クォートでくくられたシグナル名も使えます。 -.Ip "last LABEL" 8 8 -.Ip "last" 8 -.I last -コマンドは、(ループ内で使われるような) C の -.I break -文に似ていて、該当するループを直ちに終了します。 -LABEL が省略されると、このコマンドは最も内側のループを抜けます。 -.I continue -ブロックがあったとしても、実行されません: -.nf - -.ne 4 - line: while (<STDIN>) { - last line if /\|^$/; # ヘッダが終ったら抜けます - .\|.\|. - } - -.fi -.Ip "length(EXPR)" 8 4 -.Ip "length EXPR" 8 -EXPR の値の文字列長を返します。 -EXPR を省略すると、$_ の長さを返します。 -.Ip "link(OLDFILE,NEWFILE)" 8 2 -OLDFILE にリンクされた NEWFILE を作成します。 -成功すると 1 を、失敗すると 0 を返します。 -.Ip "listen(SOCKET,QUEUESIZE)" 8 2 -listen システムコールと同じことを行ないます。 -成功すると真を、失敗すると偽を返します。 -プロセス間通信のセクションの例を参照して下さい。 -.Ip "local(LIST)" 8 4 -閉じたブロック、サブルーチン、eval、\*(L"do\*(R" に局所的な -変数リストを宣言します。 -リストされたすべての要素は左辺値として妥当なものでなければなりません。 -この演算子は、LIST 内のその時点での変数を隠れたスタックに保存し、 -ブロックやサブルーチンや eval を抜けるときに戻すように動作します。 -これは、呼ばれたサブルーチンもグローバル変数でなく、ローカル変数を -参照することを意味します。 -そうしたければ、LIST に代入してローカル変数を初期化してもかまいません。 -(初期値が特定の値として与えられていなければ、undefined 値として -生成されます。) -普通、これはサブルーチンのパラメータに名前をつけるのに使われます。 -例: -.nf - -.ne 13 - sub RANGEVAL { - local($min, $max, $thunk) = @_; - local($result) = \'\'; - local($i); - - # 多分 $thunk は $i を参照しています - - for ($i = $min; $i < $max; $i++) { - $result .= eval $thunk; - } - - $result; - } - -.ne 6 - if ($sw eq \'-v\') { - # グローバルな配列でローカルな配列を初期化します - local(@ARGV) = @ARGV; - unshift(@ARGV,\'echo\'); - system @ARGV; - } - # @ARGV が元に戻されます - -.ne 6 - # 一時的に digits という連想配列に追加をしています。 - if ($base12) { - # (注意: これが効率的と言いたいわけではありません) - local(%digits) = (%digits,'t',10,'e',11); - do parse_num(); - } - -.fi -local() は実行時のコマンドで、ループ終了時に全部を一度に解放するまでは、 -ループを通るたびに実行され、毎回スタックを消費していきます。 -.Ip "localtime(EXPR)" 8 4 -.Ip "localtime EXPR" 8 -time 関数に返された時刻を、ローカルタイムゾーンとして解析された 9 要素の -配列に変換します。 -通常次のように使われます: -.nf - -.ne 3 -.ie t \{\ - ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); -'br\} -.el \{\ - ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = - localtime(time); -'br\} - -.fi -すべての配列要素は数字で、構造体 tm から直接得られたものです。 -これにより $mon は 0.\|.11 の範囲で $wday は 0.\|.6 の範囲であることに -なります。 -EXPR を省略すると、localtime(time) を実行します。 -.Ip "log(EXPR)" 8 4 -.Ip "log EXPR" 8 -EXPR の (底が -.IR e -の) 対数を返します。 -EXPR を省略すると、$_ の log を返します。 -.Ip "lstat(FILEHANDLE)" 8 6 -.Ip "lstat FILEHANDLE" 8 -.Ip "lstat(EXPR)" 8 -.Ip "lstat SCALARVARIABLE" 8 -stat() 関数と同じことを実行しますが、シンボリックリンクでは指している -先のファイルの代わりにシンボリックリンク自身の状態を返します。 -シンボリックリンクが実装されていないシステムでは、通常の stat を -実行します。 -.Ip "m/PATTERN/gio" 8 4 -.Ip "/PATTERN/gio" 8 -パターンマッチに合う文字列を検索し、真 (1) か偽 (\'\') を -返します。 -=~ や !~ を介した文字列の指定がなければ、文字列 $_ が検索されます。 -(=~ で指定された文字列は、左辺値である必要はありません。 -式の評価結果でもかまいませんが、=~ はどちらかというと優先度が高いことを -覚えておいて下さい。) -正規表現のセクションを参照して下さい。 -.Sp -/ が区切り文字である場合、始めの \*(L'm\*(R' は省略可能です。\*(L'm\*(R' が -あると、英数字以外のどの文字でも区切りにできます。 -これは、特に \*(L'/\*(R' を含む UNIX のパス名へのマッチに便利です。 -最後の区切りの後にオプション文字 \*(L'i\*(R' が続くと、マッチングが -大文字小文字の区別なく行なわれます。 -PATTERN は、スカラ変数への参照を含んでいてもよく、それはパターン検索 -が評価される毎に挿入されます (パターンはリコンパイルされます)。 -( $) と $| は文字列終端のテストに見えるため、挿入は行なわれません。) -パターンを一度だけコンパイルさせたい場合は、後ろの区切り文字 -の後に \*(L"o\*(R" を加えて下さい。 -これにより、余分な実行時再コンパイルを避けられるので、挿入したい値が -スクリプトの動いている間中、変わらないときには便利です。 -PATTERN がヌル文字に評価されたときは、最後に成功した正規表現が代わりに -使われます。 -.Sp -配列値が必要なコンテキストで使われると、パターンマッチはパターンの中で -マッチした subexpression を括弧でくくったものすなわち、 -($1, $2, $3.\|.\|.) -からなる配列を返します。 -この場合、実際には $1, $2 等をセットは*せず*、 -$+, $`, $&, $' もセットしません。 -マッチが失敗すると、ヌル配列が返ります。 -マッチが成功しても括弧がないと、配列値 (1) が返ります。 -.Sp -例: -.nf - -.ne 4 - open(tty, \'/dev/tty\'); - <tty> \|=~ \|/\|^y\|/i \|&& \|do foo(\|); # y なら foo を実行 - - if (/Version: \|*\|([0\-9.]*\|)\|/\|) { $version = $1; } - - next if m#^/usr/spool/uucp#; - -.ne 5 - # 恵まれない人の grep - $arg = shift; - while (<>) { - print if /$arg/o; # 一度だけコンパイル - } - - if (($F1, $F2, $Etc) = ($foo =~ /^(\eS+)\es+(\eS+)\es*(.*)/)) - -.fi -この最後の例は、$foo を最初の二語と残りに split し、三つのフィールド -を $F1、$F2、$Etc に代入します。 -どれかの変数が代入された場合、すなわちパターンがマッチした場合、 -この条件は真となります。 -.Sp -\*(L"g\*(R" 修飾子は、グローバルパターンマッチの指定です\*(--つまり、 -文字列の中でできるだけ多くのマッチを行ないます。 -どのように振舞うかは、コンテキストに依存します。 -配列のコンテキストでは、正規表現の中ですべての括弧にマッチした文字列の -リストを返します。括弧がなければ、パターン全体を囲む括弧があるか -のようにマッチした文字列すべてのリストを返します。 -スカラのコンテキストでは、文字列を通してマッチする毎に*真*を返し、 -マッチしなかったとき*偽*を返します。 (言いかえると、最後にテストした -場所を覚えていて、そこから再び検索を始めるということです。) -最後のマッチから文字列が変更されていないことを仮定しています。 -マッチとマッチの間で文字列を変更することは、未定義な動作を引き起こす -かもしれません。 -(実際には substr()を使って、全文字列の長さを変えずにその場で変更する -なら、できます。しかし、一般にはそういう変更は s///g を使うべきです。) -例: -.nf - - # 配列のコンテキスト - ($one,$five,$fifteen) = (\`uptime\` =~ /(\ed+\e.\ed+)/g); - - # スカラのコンテキスト - $/ = ""; $* = 1; - while ($paragraph = <>) { - while ($paragraph =~ /[a-z][\'")]*[.!?]+[\'")]*\es/g) { - $sentences++; - } - } - print "$sentences\en"; - -.fi -.Ip "mkdir(FILENAME,MODE)" 8 3 -FILENAME で指定されたディレクトリを、(umask で修飾された) MODE で指定 -されたパーミッションで作成します。 -成功すると 1 を、失敗すると 0 を返し、$! (errno) をセットします。 -.Ip "msgctl(ID,CMD,ARG)" 8 4 -System V IPC 関数の msgctl を呼びます。 CMD が &IPC_STAT なら、ARG は -返された msqid_ds 構造を保持する変数でなければなりません。 -ioctl のように、エラーのときは undefined 値を、0 のとき -には "0 but true" を、でなければ実際の戻り値を返します。 -.Ip "msgget(KEY,FLAGS)" 8 4 -System V IPC 関数の msgget を呼びます。成功時はメッセージキュー ID を、 -エラーが起これば undefined value を返します。 -.Ip "msgsnd(ID,MSG,FLAGS)" 8 4 -System V IPC 関数の msgsnd を呼び、メッセージ MSGS をメッセージキュー -ID に送信します。 MSG は、pack("L", $type) で作られる long integer -のメッセージ型で始めなければなりません。成功すれば真を、エラーが起こる -と偽を返します。 -.Ip "msgrcv(ID,VAR,SIZE,TYPE,FLAGS)" 8 4 -System V IPC 関数 msgrcv を呼び、 -メッセージキュー ID からメッセージを受け取り、 -最大メッセージサイズ SIZE で変数 VAR に格納します。 -メッセージを受け取ると、VAR に最初に格納されたものがメッセージ型 -となり、VAR の最大長は、SIZE にメッセージ型のサイズを加えたものに -なることに注意して下さい。 -成功すると真を、エラーでは偽を返します。 -.Ip "next LABEL" 8 8 -.Ip "next" 8 -.I next -コマンドは、C の -.I continue -文と同様に、ループの次の繰り返しを始めます。 -.nf - -.ne 4 - line: while (<STDIN>) { - next line if /\|^#/; # コメントを捨てます - .\|.\|. - } - -.fi -上の例で -.I continue -ブロックがあると、行が捨てられた場合でも実行されることを覚えておいて -下さい。 -LABEL が省略されると、このコマンドは最も内側のループを続けます。 -.Ip "oct(EXPR)" 8 4 -.Ip "oct EXPR" 8 -10 進数 EXPR を、8 進文字列にして返します。 -(EXPRが 0x で始まる文字列なら、10 進の代わりに 16 進として変換します。) -以下は、10 進、8 進、16 進の標準的な記法を扱います。 -.nf - - $val = oct($val) if $val =~ /^0/; - -.fi -EXPR が省略されると、$_ を使います。 -.Ip "open(FILEHANDLE,EXPR)" 8 8 -.Ip "open(FILEHANDLE)" 8 -.Ip "open FILEHANDLE" 8 -EXPR で与えられたファイル名のファイルをオープンし、FILEHANDLE に結び -つけます。 -FILEHANDLE が式の場合、その値を実際にファイルハンドルが求める名前 -として使います。 -EXPR が省略されると、FILEHANDLE と同名のスカラ変数が保持する値が -ファイル名となります。 -ファイル名の前に \*(L"<\*(R" を付けるか、何も付けない場合、ファイルは -入力用にオープンされます。 -ファイル名が \*(L">\*(R" で始まると、ファイルは出力用にオープンされます。 -ファイル名が \*(L">>\*(R" で始まると、ファイルは追加書き込み用に -オープンされます。 -(\'>\' や \'<\' の前に \'+\' を付けると、ファイルを読み書き両用に -できます。) -ファイル名が \*(L"|\*(R" で始まると、ファイル名は出力がパイプされる -コマンドと解釈され、ファイル名が \*(L"|\*(R" で終ると、入力が -パイプされるコマンドと解釈されます。 -(入出力共パイプするコマンドは必要がないでしょう。) \'\-\' をオープンすると -.I STDIN -を、\'>\-\' をオープンすると -.IR STDOUT -をオープンします。 -open は成功したとき、0 でない値を、失敗したとき undefined 値を -返します。 -open がパイプを含む場合、戻り値はサブプロセスの pid となります。 -例: -.nf - -.ne 3 - $article = 100; - open article || die "Can't find article $article: $!\en"; - while (<article>) {\|.\|.\|. - -.ie t \{\ - open(LOG, \'>>/usr/spool/news/twitlog\'\|); # (ログ保存) -'br\} -.el \{\ - open(LOG, \'>>/usr/spool/news/twitlog\'\|); - # (ログ保存) -'br\} - -.ie t \{\ - open(article, "caesar <$article |"\|); # 記事を decrypt -'br\} -.el \{\ - open(article, "caesar <$article |"\|); - # 記事を decrypt -'br\} - -.ie t \{\ - open(extract, "|sort >/tmp/Tmp$$"\|); # $$ は現在のプロセス -'br\} -.el \{\ - open(extract, "|sort >/tmp/Tmp$$"\|); - # $$ は現在のプロセス -'br\} - -.ne 7 - # 引数リストのファイルを、それがインクルードするものも - # 含めて処理します - - foreach $file (@ARGV) { - do process($file, \'fh00\'); # no pun intended - } - - sub process { - local($filename, $input) = @_; - $input++; # 文字列インクリメント - unless (open($input, $filename)) { - print STDERR "Can't open $filename: $!\en"; - return; - } -.ie t \{\ - while (<$input>) { # 間接指定に注意 -'br\} -.el \{\ - while (<$input>) { # 間接指定に注意 -'br\} - if (/^#include "(.*)"/) { - do process($1, $input); - next; - } - .\|.\|. # 続く - } - } - -.fi -Bourne shell の慣習により、EXPR は \*(L">&\*(R" で始めるような指定も -できます。その場合、文字列の残りはファイルハンドル (数字なら -ファイル記述子) の名前と解釈され、dup して open します。 ->>, <, +>, +>>, +< の後に & を使ってもかまいません。 -指定するモードは、元のファイルハンドルのモードと一致していなくては -なりません。 -以下は、 -.I STDOUT -と -.IR STDERR -を保存し、リダイレクトを行なって、その後で書き戻します: -.nf - -.ne 21 - #!/usr/bin/perl - open(SAVEOUT, ">&STDOUT"); - open(SAVEERR, ">&STDERR"); - - open(STDOUT, ">foo.out") || die "Can't redirect stdout"; - open(STDERR, ">&STDOUT") || die "Can't dup stdout"; - - select(STDERR); $| = 1; # バッファリングしません - select(STDOUT); $| = 1; # バッファリングしません - - print STDOUT "stdout 1\en"; # これもサブプロセスで - print STDERR "stderr 1\en"; # 動作します - - close(STDOUT); - close(STDERR); - - open(STDOUT, ">&SAVEOUT"); - open(STDERR, ">&SAVEERR"); - - print STDOUT "stdout 2\en"; - print STDERR "stderr 2\en"; - -.fi -コマンド \*(L"\-\*(R" でパイプをオープンする、すなわち \*(L"|\-\*(R" -や \*(L"\-|\*(R" をオープンすると、暗黙のうちに fork され、open の -戻り値として親プロセスには、子プロセスの pid が返され、子プロセスには -0 が返されます。 -(open が成功したかどうかは、defined($pid) を使って判断して下さい。) -ファイルハンドルは、親にとって普通の挙動をしますが、子には -.IR STDOUT / STDIN -にパイプされたファイルハンドルの i/o となります。 -子プロセスでファイルハンドルがオープンされず、\*(--新しく -ファイルハンドルは、新しい -.I STDIN -から -.IR STDOUT -へのパイプとなります。 -よく使われるのは、普通のパイプのオープンと同様、パイプコマンドの -実行状態をコントロールしたいとき、setuid されたプログラムを走らせるとき、 -シェルコマンドでメタキャラクタのチェックをする必要がないときです。 -次の二つは、それぞれある程度同等です: -.nf - -.ne 5 - open(FOO, "|tr \'[a\-z]\' \'[A\-Z]\'"); - open(FOO, "|\-") || exec \'tr\', \'[a\-z]\', \'[A\-Z]\'; - - open(FOO, "cat \-n '$file'|"); - open(FOO, "\-|") || exec \'cat\', \'\-n\', $file; - -.fi -パイプされたファイルハンドルを明示的に close すると、親プロセスは -子プロセスが終了するのを待つことになり、$? に状態を返します。 -fork を行う操作では、両方のプロセスでフラッシュされないバッファが -そのまま残ることに注意して下さい。これは、二重出力を避けるために $| を -セットした方が良いことを意味します。 -.Sp -open に渡されたファイル名は、前後の空白が除かれます。 -意図的に変な文字を含むファイル名を持つファイルをオープンしたいときは、 -前後の空白もこのように守ってやる必要があります: -.nf - -.ne 2 - $file =~ s#^(\es)#./$1#; - open(FOO, "< $file\e0"); - -.fi -.Ip "opendir(DIRHANDLE,EXPR)" 8 3 -EXPR という名前のディレクトリを readdir(), telldir(), seekdir(), -rewinddir(), closedir() で処理できるようにオープンします。 -成功すると真を返します。 -DIRHANDLE は、FILEHANDLE とは別個のそれ自身の名前空間を持ちます。 -.Ip "ord(EXPR)" 8 4 -.Ip "ord EXPR" 8 -EXPR の最初の文字のアスキー値を数値で返します。 -EXPR が省略されると、$_ を使います。 -''' Comments on f & d by gnb@melba.bby.oz.au 22/11/89 -.Ip "pack(TEMPLATE,LIST)" 8 4 -配列または値のリストを引数に取り、バイナリ構造体にパックし、 -構造体を含む文字列を返します。 -TEMPLATE は値の順序と型を与える文字のシークエンスで、以下のように -なります: -.nf - - A アスキー文字列(スペースが padding される) - a アスキー文字列(ヌルが padding される) - c signed char - C unsigned char - s signed short - S unsigned short - i signed integer - I unsigned integer - l signed long - L unsigned long - n short (\*(L"network\*(R" order) - N long (\*(L"network\*(R" order) - f 単精度浮動小数点 (native format) - d 倍精度浮動小数点 (native format) - p 文字列へのポインタ - v short (\*(L"VAX\*(R" (little-endian) order) - V long (\*(L"VAX\*(R" (little-endian) order) - x null byte - X Back up a byte - @ 絶対位置にまでヌルで埋める - u uuencode された文字列 - b ビット文字列 (vec()のような昇順). - B ビット文字列 (降順). - h 16 進文字列 (低 nybble が先). - H 16 進文字列 (高 nybble が先). - -.fi -どの文字も繰り返し回数を表す数を続けることができます。 -"a", "A", "b", "B", "h", "H" 以外の型では、pack 関数は -LIST から回数を指定された数だけ値を取ります。 -繰り返し数として * を使うと、残りすべての分だけ繰り返します。 -"a" と "A" の型は値一つしか取りませんが、繰り返し指定を文字列長 -として pack するので、ヌルや空白での padding が必要になります。 -(unpack するときは、"A" は、後に続く空白を削りますが、"a" はしません。) -同様に、"b" と "B" フィールドは、指定したビット長を pack します。 -"h" と "H" フィールドは、指定した長さの nybbles をパックします。 -実数 (float と double) は、そのマシンの機械語フォーマットのみです。 -浮動小数点フォーマット関係の多様性と標準の \*(L"network\*(R" 表現が -無いことから、交換することはできません。これは、 -あるマシンで pack された浮動小数点データは、他のマシンでは、 -たとえ両方が IEEE 浮動小数点数演算を行っていても -(メモリ表現の endian は IEEE の仕様には無いから)、 -読めないかもしれないということを意味します。 -perl は、すべての数値計算を内部的には double を用い、 -double -> float -> double という変換は精度を失うだろうということに -注意して下さい -(すなわち、unpack("f",pack("f", $foo)) は一般に $foo にはなりません)。 -.br -例: -.nf - - $foo = pack("cccc",65,66,67,68); - # foo は "ABCD" - $foo = pack("c4",65,66,67,68); - # 上と同じ - - $foo = pack("ccxxcc",65,66,67,68); - # foo は "AB\e0\e0CD" - - $foo = pack("s2",1,2); - # little-endian の "\e1\e0\e2\e0" - # big-endian の "\e0\e1\e0\e2" - - $foo = pack("a4","abcd","x","y","z"); - # "abcd" - - $foo = pack("aaaa","abcd","x","y","z"); - # "axyz" - - $foo = pack("a14","abcdefg"); - # "abcdefg\e0\e0\e0\e0\e0\e0\e0" - - $foo = pack("i9pl", gmtime); - # 実際の tm 構造体 (少なくとも私のシステムでは) - - sub bintodec { - unpack("N", pack("B32", substr("0" x 32 . shift, -32))); - } -.fi -一般に unpack 関数でも同じテンプレートが使われます。 -.Ip "pipe(READHANDLE,WRITEHANDLE)" 8 3 -相当するシステムコールのように一対の接続されたパイプをオープンします。 -パイプでつながったプロセスのループを設定するときは、注意深くしないと -デッドロックを起こすことがあることに気をつけて下さい。 -それに加えて、perl のパイプは標準入力のバッファリングを使うので、 -アプリケーションに依っては、$| をセットして -コマンド毎に WRITEHANDLE をフラッシュする必要があるかもしれません。 -[perl バージョン 3.0 パッチレベル 9 以上が必要] -.Ip "pop(ARRAY)" 8 -.Ip "pop ARRAY" 8 6 -配列の最後の値を取り出し、配列の長さを 1 だけ短くします。 -.nf - - $tmp = $ARRAY[$#ARRAY\-\|\-]; - -.fi -同じ結果となります。 -配列に要素がない場合は、undefined 値を返します。 -.Ip "print(FILEHANDLE LIST)" 8 10 -.Ip "print(LIST)" 8 -.Ip "print FILEHANDLE LIST" 8 -.Ip "print LIST" 8 -.Ip "print" 8 -文字列または、コンマ区切りの文字列のリストを表示します。 -成功すると、0 以外を返します。 -FILEHANDLE は、ファイルハンドルの名前を保持したスカラ変数名でも -かまいません。これにより 1 レベルの間接指定ができます。 -(注意: FILEHANDLE が変数で次のトークンが項の場合、+ を挿入するか -引数に括弧を付けないと、演算子として解釈の間違いをするかもしれません。) -FILEHANDLE が省略されると、デフォルトで標準出力 (または最後に select -された出力チャネル\*(-- select()を参照して下さい) に出力します。 -LIST が省略されると、$_ を -.IR STDOUT -に出力します。 -デフォルト出力チャネルを -.I STDOUT -以外に設定するには、select 演算子を使って下さい。 -print は LIST を取るので、LIST の中のものは何でも配列のコンテキストで -評価され、サブルーチン呼び出しなら配列のコンテキストで評価された式を -持つことになるのを覚えておきましょう。 -また、print キーワードの後に左括弧を置くときは、対応する右括弧が -print の引数の終りを示す -\*(--すなわち + を挿入するか、括弧をすべての引数に付ける -のでなければ、左括弧を置いてはいけません。 -.Ip "printf(FILEHANDLE LIST)" 8 10 -.Ip "printf(LIST)" 8 -.Ip "printf FILEHANDLE LIST" 8 -.Ip "printf LIST" 8 -\*(L"print FILEHANDLE sprintf(LIST)\*(R" と同等です。 -.Ip "push(ARRAY,LIST)" 8 7 -ARRAY (@ は省略可能) をスタックとして扱い、LIST の値を ARRAY の終りに -追加します。 -ARRAY の長さは、LIST の長さだけ増えます。 -これは、以下と同じことになります。 -.nf - - for $value (LIST) { - $ARRAY[++$#ARRAY] = $value; - } - -.fi -が、より効率的です。 -.Ip "q/STRING/" 8 5 -.Ip "qq/STRING/" 8 -.Ip "qx/STRING/" 8 -これは、実際には関数ではありませんが、クォートされた文字列に -バックスラッシュをたくさん置き過ぎるのを避けるための、単なる -簡略記法です。 -q 演算子はシングルクォートを生成し、qq 演算子はダブルクォートを -生成します。 -qx 演算子は、バッククォートを生成します。 -英数字でない文字なら、改行を含めて何でも、/ の代わりに区切り文字 -にできます。 -区切りが ( か { なら、終了の区切りは、対応する ) か } になります。 -(埋め込み文字としての } には通常通り \ が必要になります。) -例: -.nf - -.ne 5 - $foo = q!I said, "You said, \'She said it.\'"!; - $bar = q(\'This is it.\'); - $today = qx{ date }; - $_ .= qq -*** The previous line contains the naughty word "$&".\en - if /(ibm|apple|awk)/; # :-) - -.fi -.Ip "rand(EXPR)" 8 8 -.Ip "rand EXPR" 8 -.Ip "rand" 8 -ランダムな 0 から EXPR までの小数点数を返します。 -(EXPR は正でなければなりません。) -EXPR が省略されると、0 から 1 の範囲の値が返されます。 -srand() を参照して下さい。 -.Ip "read(FILEHANDLE,SCALAR,LENGTH,OFFSET)" 8 5 -.Ip "read(FILEHANDLE,SCALAR,LENGTH)" 8 5 -指定された FILEHANDLE から、LENGTH バイトのデータを読み込み、変数 -SCALAR に格納します。 -実際に読み込めたバイト数を返し、エラーの場合は undef を返します。 -SCALAR は実際に読み込まれた長さに合わせて、伸縮します。 -読んだデータを文字列の始めでなく、他の場所に格納するために、OFFSET を -指定することもできます。 -これは、実際には stdio の fread コールで実装されています。 -本当の read システムコールを使うには、sysread を参照して下さい。 -.Ip "readdir(DIRHANDLE)" 8 3 -.Ip "readdir DIRHANDLE" 8 -opendir() にオープンされたディレクトリ内の、次のディレクトリエントリを -返します。 -配列のコンテキストの中で使うと、残りすべてのディレクトリエントリを -返します。 -エントリが残っていない場合、スカラのコンテキストでは undefined が、 -配列のコンテキストではヌルリストを返します。 -.Ip "readlink(EXPR)" 8 6 -.Ip "readlink EXPR" 8 -シンボリックリンクが実装されていれば、シンボリックリンクの値を返します。 -実装されていなければ、致命的エラーを返します。 -システムエラーが起こったときは、undefined 値を返し、$! (errno) を -セットします。 -EXPR を省略すると、$_ を使います。 -.Ip "recv(SOCKET,SCALAR,LEN,FLAGS)" 8 4 -ソケットからメッセージを受け取ります。指定した SOCKET ファイルハンドル -から、LENGTH バイトのデータを受け取り、変数 SCALAR に格納します。 -sender のアドレスを返し、エラーの場合は undefined 値を返します。 -SCALAR は、実際に読み込まれた長さに合わせて、伸縮します。 -同名のシステムコールと同じフラグを用います。 -.Ip "redo LABEL" 8 8 -.Ip "redo" 8 -.I redo -コマンドは、条件を再評価することなしに、ループブロックのコマンドを -再開します。 -.I continue -ブロックがあっても実行されません。 -LABEL が省略されると、最も内側のループを参照します。 -通常このコマンドは、入力された内容について、自分自身をだますような -プログラムで使われます: -.nf - -.ne 16 - # 単純化した Pascal のコメント除去 - # (警告: 文字列中には { や } はないものと仮定しています) - line: while (<STDIN>) { - while (s|\|({.*}.*\|){.*}|$1 \||) {} - s|{.*}| \||; - if (s|{.*| \||) { - $front = $_; - while (<STDIN>) { - if (\|/\|}/\|) { # コメント終了? - s|^|$front{|; - redo line; - } - } - } - print; - } - -.fi -.Ip "rename(OLDNAME,NEWNAME)" 8 2 -ファイル名を変更します。 -成功すると 1 を、失敗すると 0 を返します。 -ファイルシステムの境界を越えては働きません。 -.Ip "require(EXPR)" 8 6 -.Ip "require EXPR" 8 -.Ip "require" 8 -EXPR か EXPR が与えられなければ $_ で指定された、ライブラリファイルを -インクルードします。 -以下のようなサブルーチンと同じ意味になります: -.nf - - sub require { - local($filename) = @_; - return 1 if $INC{$filename}; - local($realfilename,$result); - ITER: { - foreach $prefix (@INC) { - $realfilename = "$prefix/$filename"; - if (-f $realfilename) { - $result = do $realfilename; - last ITER; - } - } - die "Can't find $filename in \e@INC"; - } - die $@ if $@; - die "$filename did not return true value" unless $result; - $INC{$filename} = $realfilename; - $result; - } - -.fi -同じ名前で指定されたファイルは、二度はインクルードされないことに -注意して下さい。 -どの初期化コードの起動も成功したこと示すため、ファイルの最後の文で、 -真を返さなければなりません。だから、慣習的にそういうファイルは、 -必ず真を返すということが確かでなければ、\*(L"1;\*(R" で -終るようにします。 -.Ip "reset(EXPR)" 8 6 -.Ip "reset EXPR" 8 -.Ip "reset" 8 -一般にループの終りで変数をクリアするのに -.I continue -ブロックの中で使われ、再びそれが働くように ?? 検索をリセットします。 -式は 1 文字ずつ分けてリストしたもの (ハイフンで範囲指定) として解釈されます。 -それらの文字の一つで始まる変数や配列はみな初期状態にリセットされます。 -式を省略すると、一度だけマッチする検索 (?pattern?) をリセットし、 -再びマッチするようにします。 -現パッケージ内の変数と検索のみをリセットします。 -常に 1 を返します。 -例: -.nf - -.ne 3 - reset \'X\'; \h'|2i'# すべての X 変数をリセットします - reset \'a\-z\';\h'|2i'# 小文字の変数すべてをリセットします。 - reset; \h'|2i'# ?? 検索をリセットします。 - -.fi -注意: ARGV や ENV を消してしまうため、\*(L"A\-Z\*(R" をリセットする -のは勧められません。 -.Sp -dbm 連想配列に reset を使っても、dbm ファイルを変更しません。 -(しかし、perl がキャッシュしたエントリは皆フラッシュするので、 -dbm ファイルを共有している場合は、便利です。便利でないかもしれませんが。) -.Ip "return LIST" 8 3 -指定した値で、サブルーチンから返ります。 -(サブルーチンは、自動的に最後に評価された式の値を返すことに -注意して下さい。 -これは、好まれる方法です\*(--明示的な -.I return -の使用で、やや遅くなります。) -.Ip "reverse(LIST)" 8 4 -.Ip "reverse LIST" 8 -配列のコンテキストでは、LIST の要素を逆順に並べた配列を返します。 -スカラのコンテキストでは、LIST の最初の要素のバイト列を逆順にした -文字列を返します。 -.Ip "rewinddir(DIRHANDLE)" 8 5 -.Ip "rewinddir DIRHANDLE" 8 -DIRHANDLE に関し、readdir() で読み始める現在位置を、 -ディレクトリの先頭にセットします。 -.Ip "rindex(STR,SUBSTR,POSITION)" 8 6 -.Ip "rindex(STR,SUBSTR)" 8 4 -STR 内で、SUBSTR が最後に現れる位置を返す他は、index と全く同じに -動作します。 -POSITION が指定されると、その位置の前で最後に現れた位置を返します。 -.Ip "rmdir(FILENAME)" 8 4 -.Ip "rmdir FILENAME" 8 -FILENAME で指定されたディレクトリが空なら消去します。 -成功すると 1 を、失敗すると 0 を返し、$! (errno) をセットします。 -FILENAME が省略されると、$_ を使います。 -.Ip "s/PATTERN/REPLACEMENT/gieo" 8 3 -パターンに合う文字列を検索し、見つかると置換テキストに置き換えて、 -置換が行なわれた数を返します。 -でなければ、偽 (0) を返します。 -\*(L"g\*(R" はオプションです。もしあれば、マッチしたパターンはすべて -置換されることを意味します。 -\*(L"i\*(R" もオプションです。もしあれば、マッチングは大文字小文字の -区別なく行なわれることを意味します。 -\*(L"e\*(R" もオプションです。もしあれば、置換文字列は -ダブルクォートで囲まれた文字列のようにというより、 -式として評価されなければならないことを意味します。 -英数字でない文字ならなんでも、/ に置き換えて区切り文字にできます。 -シングルクォートが使われると、置換文字列の中で変数の挿入が -行なわれません (e 修飾子はこれに優先します)。 -バッククォート ` が使われると、置換文字列はコマンドとして実行され、 -その出力が実際の置換テキストとして使われることになります。 -PATTERN が <>, () で区切られると、REPLACEMENT は、それ自身のクォートを -持ち、それは <>, () であっても、そうでなくても良いことになります。 -例えば、s(foo)(bar) や s<foo>/bar/ のように。 -=~ や !~ 演算子を介する文字列指定がされなかったときは、$_ 文字列が -検索、置換されます。 -(=~ で指定された文字列は、スカラ変数、配列の要素、それらへの代入等で -なくてはなりません。すなわち左辺値ということです。) -パターンが、文字列の終りをテストする $ でなく、変数に見える $ を含む -場合は、その変数が実行時にパターンに挿入されます。 -初回だけ変数が挿入されてコンパイルされるパターンを使いたいなら、 -終りに \*(L"o\*(R" を付けて下さい。 -PATTERN がヌル文字列に評価されたときは、代わりに最後に成功した正規表現 -が使われます。 -正規表現のセクションを参照して下さい。 -例: -.nf - - s/\|\e\|bgreen\e\|b/mauve/g; # wintergreen を変更しません - - $path \|=~ \|s|\|/usr/bin|\|/usr/local/bin|; - - s/Login: $foo/Login: $bar/; # 実行時パターン - - ($foo = $bar) =~ s/bar/foo/; - - $_ = \'abc123xyz\'; - s/\ed+/$&*2/e; # \*(L'abc246xyz\*(R' になる - s/\ed+/sprintf("%5d",$&)/e; # \*(L'abc 246xyz\*(R' になる - s/\ew/$& x 2/eg; # \*(L'aabbcc 224466xxyyzz\*(R' になる - - s/\|([^ \|]*\|) *\|([^ \|]*\|)\|/\|$2 $1/; # 始めの2フィールドを交換 - -.fi -(最後の例では \|\e\| の代わりに $ を使っていることに注意。 -正規表現のセクションを参照して下さい。) -.Ip "scalar(EXPR)" 8 3 -EXPR を強制的にスカラのコンテキストで解釈させて、EXPR の値を返します。 -.Ip "seek(FILEHANDLE,POSITION,WHENCE)" 8 3 -FILEHANDLE のポインタを、丁度 stdio の fseek() のように任意の -位置にします。 -FILEHANDLE は、ファイルハンドルの名前を与える式でもかまいません。 -成功すると 1 を、失敗すると 0 を返します。 -.Ip "seekdir(DIRHANDLE,POS)" 8 3 -DIRHANDLE について readdir() の読む現在位置をセットします。 -POS は、telldir() の返す値でなければなりません。 -相当するシステムライブラリルーチン同様、directory compaction について -は同じ注意が必要です。 -.Ip "select(FILEHANDLE)" 8 3 -.Ip "select" 8 3 -現在 select されたファイルハンドルを返します。 -FILEHANDLE を与えられると、出力用の現在のデフォルトファイルハンドルを -セットします。 -これには二つの効果があります。一つは、ファイルハンドルの無い -.I write -や -.I print -が、デフォルトでこの FILEHANDLE に行なわれるということです。 -二つ目は、出力に関連する変数参照が、この出力チャネルを参照する -ということです。 -例えば、form フォーマットの先頭を、一つ以上の出力チャネルに -セットしなければならないとき、次のようにすると良いでしょう: -.nf - -.ne 4 - select(REPORT1); - $^ = \'report1_top\'; - select(REPORT2); - $^ = \'report2_top\'; - -.fi -FILEHANDLE は、実際のファイルハンドルの名前を与える式でもかまいません。 -このように: -.nf - - $oldfh = select(STDERR); $| = 1; select($oldfh); - -.fi -.Ip "select(RBITS,WBITS,EBITS,TIMEOUT)" 8 3 -これは、ビットマスクを指定して select システムコールを呼び出しします。 -ビットマスクは、以下のように fileno() や vec() を使って作成されます。 -.nf - - $rin = $win = $ein = ''; - vec($rin,fileno(STDIN),1) = 1; - vec($win,fileno(STDOUT),1) = 1; - $ein = $rin | $win; - -.fi -たくさんのファイルハンドルを select したいときは、サブルーチンを書いた -方が良いかもしれません。 -.nf - - sub fhbits { - local(@fhlist) = split(' ',$_[0]); - local($bits); - for (@fhlist) { - vec($bits,fileno($_),1) = 1; - } - $bits; - } - $rin = &fhbits('STDIN TTY SOCK'); - -.fi -通常の使い方は、 -.nf - - ($nfound,$timeleft) = - select($rout=$rin, $wout=$win, $eout=$ein, $timeout); - -また、何かが ready となるまでブロックしておくには、こうなります。 - -.ie t \{\ - $nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef); -'br\} -.el \{\ - $nfound = select($rout=$rin, $wout=$win, - $eout=$ein, undef); -'br\} - -.fi -ビットマスクはどれも undef にもできます。 -TIMEOUT は秒で指定され、小数点数でもかまいません。 -注意: すべての実装で $timeleft を返せるわけではありません。 -できない場合、常に与えられた $timeout に等しい値の $timeleft を -返します。 -.Ip "semctl(ID,SEMNUM,CMD,ARG)" 8 4 -System V IPC 関数の semctl を呼び出します。 CMD が &IPC_STAT か -&GETALL なら、ARG は返って来た semid_ds 構造体か、セマフォ値配列を -保持する変数でなければなりません。 -ioctl 同様、エラーの場合 undefined 値が、0 の場合 "0 but true" が、 -それ以外の場合実際の戻り値が返されます。 -.Ip "semget(KEY,NSEMS,SIZE,FLAGS)" 8 4 -System V IPC 関数 semget を呼び出します。セマフォ id を返し、エラーの -場合は undefined 値を返します。 -.Ip "semop(KEY,OPSTRING)" 8 4 -シグナルや wait のようなセマフォ操作を実行する System V IPC 関数 semop -を呼び出します。 -OPSTRING は、semop 構造体に pack された配列でなければなりません。 -各 semop 構造体は \&'pack("sss", $semnum, $semop, $semflag)' で -生成できます。セマフォ操作の数は、OPSTRING の長さによります。 -成功すると真を、エラーでは偽を返します。例として、以下のコードでは -セマフォ id $semid のセマフォ $semnum を待ちます。 -.nf - - $semop = pack("sss", $semnum, -1, 0); - die "Semaphore trouble: $!\en" unless semop($semid, $semop); - -.fi -セマフォにシグナルを送るには、"-1" を "1" にします。 -.Ip "send(SOCKET,MSG,FLAGS,TO)" 8 4 -.Ip "send(SOCKET,MSG,FLAGS)" 8 -ソケットにメッセージを送ります。 -同名のシステムコールと同じフラグを用います。 -接続されていないソケットでは、送り先を TO として指定しなければ -なりません。送った文字数を返します。エラーの場合は undefined 値を -返します。 -.Ip "setpgrp(PID,PGRP)" 8 4 -指定した PID のカレントプロセスグループをセットします。 PID は、 -カレントプロセスでは 0 です。 -setpgrp(2) が実装されていないマシンでは、致命的エラーとなります。 -.Ip "setpriority(WHICH,WHO,PRIORITY)" 8 4 -プロセス、プロセスグループ、ユーザのカレントプライオリティを -セットします。 (setpriority(2) を参照して下さい。) -setpriority(2) が実装されていないマシンでは、致命的エラーになります。 -.Ip "setsockopt(SOCKET,LEVEL,OPTNAME,OPTVAL)" 8 3 -リクエストされたソケットオプションをセットします。 -エラーでは undefined を返します。 -引数を渡したいので無ければ、OPTVAL は undef 値を指定しても -かまいません。 -.Ip "shift(ARRAY)" 8 6 -.Ip "shift ARRAY" 8 -.Ip "shift" 8 -配列の最初の要素を配列から除き、その要素を返します。 -配列は 1 だけ短くなり、他のすべての要素はずれます。 -配列に要素がないときは、undefined 値を返します。 -ARRAY を省略すると、メインプログラムでは @ARGV 配列を shift し、 -サブルーチンでは @_ 配列を shift します。 -(これは、辞書的に決められています) -unshift(), push(), pop() を参照して下さい。 -shift() と unshift() は、push() と pop() が配列の右端に行なうのと -同じことを、配列の左端で行ないます。 -.Ip "shmctl(ID,CMD,ARG)" 8 4 -System V IPC 関数 shmctl を呼び出します。 CMD が &IPC_STAT のとき、 -ARG は、返された shmid_ds 構造体を保持する変数でなくてはなりません。 -ioctl 同様の戻り値を返します。エラーでは undefined 値を、0 では -"0 but true" を、それ以外では実際の値を返します。 -.Ip "shmget(KEY,SIZE,FLAGS)" 8 4 -System V IPC 関数 shmget を呼び出します。 -共有メモリのセグメント id を返します。エラーでは、undefined 値を -返します。 -.Ip "shmread(ID,VAR,POS,SIZE)" 8 4 -.Ip "shmwrite(ID,STRING,POS,SIZE)" 8 -Syste V の共有メモリセグメント ID を、位置 POS から始まる -サイズ SIZE にて attach し、copy in/out し、detach することで、読み込み -と書き込みを行ないます。 -読み込み時、VAR は読まれたデータを保持する変数でなければ -なりません。書き込み時に、STRING が長過ぎると、SIZE バイトだけが -使われます。STRING が短過ぎると、SIZE バイトを埋めるのにヌルが -書き込まれます。成功すると真を、エラーでは偽を返します。 -.Ip "shutdown(SOCKET,HOW)" 8 3 -ソケット接続を HOW で指示された流儀に従ってシャットダウンします。 -同名のシステムコールと同様に HOW を解釈します。 -.Ip "sin(EXPR)" 8 4 -.Ip "sin EXPR" 8 -EXPR (ラジアンで表現) のサインを返します。 -EXPR を省略すると $_ のサインを取ります。 -.Ip "sleep(EXPR)" 8 6 -.Ip "sleep EXPR" 8 -.Ip "sleep" 8 -EXPR 秒間スクリプトを止めます。 EXPR がなければ永久に止めます。 -プロセスに SIGALRM を送ることで、割り込まれます。 -実際に sleep した秒数を返します。 -sleep() は、しばしば alarm() を使って実装されているので、おそらく -alarm() と sleep() は 混在させることはできないでしょう。 -.Ip "socket(SOCKET,DOMAIN,TYPE,PROTOCOL)" 8 3 -指定された種類のソケットをオープンして、ファイルハンドル SOCKET に -結びつけます。 -DOMAIN, TYPE, PROTOCOL は、同名のシステムコールと同様に指定します。 -perl ライブラリファイルから簡単に適当な値を得るには、h2ph を -sys/soket.h に対して実行する必要があるかもしれません。 -成功すると真を返します。 -プロセス間通信のセクションの例を参照して下さい。 -.Ip "socketpair(SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL)" 8 3 -指定されたドメインの指定された型で、無名のソケットペアを生成します。 -DOMAIN, TYPE, PROTOCOL は、同名のシステムコールと同じように指定します。 -実装されていない場合は、致命的エラーとなります。 -成功すると真を返します。 -.Ip "sort(SUBROUTINE LIST)" 8 9 -.Ip "sort(LIST)" 8 -.Ip "sort SUBROUTINE LIST" 8 -.Ip "sort BLOCK LIST" 8 -.Ip "sort LIST" 8 -LIST をソートし、ソート済みの配列値を返します。 -存在しない配列値は、削られます。 -SUBROUTINE や BLOCK が省略されると、標準的な文字の比較による順でソート -します。 -0 より小さい整数、0、0 より大きい整数を返すような SUBROUTINE の名前 -を指定すると、配列の要素の並べ方に従って順に並べ直します。 -(<=> と cmp 演算子は、このようなルーチンでは非常に便利です) -SUBROUTINE は、スカラ変数名でもかまいません。その値として使用する -サブルーチンの名前が入っていれば良いのです。 -SUBROUTINE 名の代わりに、BLOCK を指定して、 -無名のインラインソートサブルーチンとして用いることもできます。 -.Sp -効率を良くするため、通常のサブルーチン呼び出しコードをバイパスしています。 -そのため、次のような影響があります。 -サブルーチンは再帰的であってはならず、 -比較される 2 要素は @_ を介してではなく、$a と $b を介して -サブルーチンに渡されます。 (以下の例を参照して下さい。) -これらは参照渡しなので、$a や $b を変更してはいけません。 -.Sp -例: -.nf - -.ne 2 - # 辞書順のソート - @articles = sort @files; - -.ne 2 - # 同じものだが、明示的なソートルーチン - @articles = sort {$a cmp $b} @files; - -.ne 2 - # 同じものだが逆順 - @articles = sort {$b cmp $a} @files; - -.ne 2 - # 数値的に昇順でソート - @articles = sort {$a <=> $b} @files; - -.ne 2 - # 数値的に降順でソート - @articles = sort {$b <=> $a} @files; - -.ne 5 - # 明示的にサブルーチン名を使ったソート - sub byage { - $age{$a} <=> $age{$b}; # 整数と仮定 - } - @sortedclass = sort byage @class; - -.ne 9 - sub reverse { $b cmp $a; } - @harry = (\'dog\',\'cat\',\'x\',\'Cain\',\'Abel\'); - @george = (\'gone\',\'chased\',\'yz\',\'Punished\',\'Axed\'); - print sort @harry; - # AbelCaincatdogx と出力 - print sort reverse @harry; - # xdogcatCainAbel と出力 - print sort @george, \'to\', @harry; - # AbelAxedCainPunishedcatchaseddoggonetoxyz と出力 - -.fi -.Ip "splice(ARRAY,OFFSET,LENGTH,LIST)" 8 8 -.Ip "splice(ARRAY,OFFSET,LENGTH)" 8 -.Ip "splice(ARRAY,OFFSET)" 8 -配列から OFFSET と LENGTH で指定された要素を除き、LIST の要素と -入れ替えます。 -配列から除かれた要素を返します。 -配列は必要に応じて伸縮されます。 -LENGTH を省略すると、OFFSET から先はすべて除かれます。 -以下は皆同等となります。 ($[ == 0 であると仮定した場合) -.nf - - push(@a,$x,$y)\h'|3.5i'splice(@a,$#a+1,0,$x,$y) - pop(@a)\h'|3.5i'splice(@a,-1) - shift(@a)\h'|3.5i'splice(@a,0,1) - unshift(@a,$x,$y)\h'|3.5i'splice(@a,0,0,$x,$y) - $a[$x] = $y\h'|3.5i'splice(@a,$x,1,$y); - -次の例では、配列長は配列の前に渡されると仮定しています: - - sub aeq { # compare two array values - local(@a) = splice(@_,0,shift); - local(@b) = splice(@_,0,shift); - return 0 unless @a == @b; # 同じ長さ? - while (@a) { - return 0 if pop(@a) ne pop(@b); - } - return 1; - } - if (&aeq($len,@foo[1..$len],0+@bar,@bar)) { ... } - -.fi -.Ip "split(/PATTERN/,EXPR,LIMIT)" 8 8 -.Ip "split(/PATTERN/,EXPR)" 8 8 -.Ip "split(/PATTERN/)" 8 -.Ip "split" 8 -文字列を文字列の配列に分けて、その配列を返します。 -(配列のコンテキストではない場合、見つかったフィールドの数を返し、 -split したものは @_ 配列に入れます。 -(配列のコンテキストでは、パターン区切りとして ?? を使うことで強制的に -@_ に split させられますが、それでも配列値を返します。)) -EXPR を省略すると、$_ 文字列を split します。 -PATTERN も省略すると、空白文字 (/[\ \et\en]+/) で split します。 -PATTERN にマッチするものは何でもフィールドを分ける区切りと解釈されます。 -(区切りは 1 文字より長くてもよいことに注意して下さい。) -LIMIT が指定されると、それを越えない数に split されます (少ない場合も -あります)。 -LIMIT が指定されないと、後に続くヌルフィールドは除かれます -(pop()を使う人は良く覚えておいた方がよいでしょう)。 -ヌル文字にマッチするパターン (ヌルパターン // と混同しないで下さい。 -// はヌル文字にマッチするパターンの一つにすぎません。) は、 -マッチするすべての点で EXPR を一文字ずつに split します。 -例えば: -.nf - - print join(\':\', split(/ */, \'hi there\')); - -.fi -は、\*(L'h:i:t:h:e:r:e\*(R' を出力します。 -.Sp -LIMIT パラメータは、行を部分的に split することに使われます。 -.nf - - ($login, $passwd, $remainder) = split(\|/\|:\|/\|, $_, 3); - -.fi -(リストに代入するとき、LIMIT が省略されていると perl は不必要な動作を -避けるためにリストの変数の数より一つ大きい LIMIT を与えます。 -上記のリストでは LIMIT はデフォルトで 4 だったはずです。 -時間に制限のあるアプリケーションでは、本当に必要な数以上のフィールドに -は split しないようにすべきです。) -.Sp -PATTERN が括弧を含むときは、区切りとしてマッチする文字列により、 -更に配列要素が作成されます。 -.Sp - split(/([,-])/,"1-10,20"); -.Sp -は以下の配列値を作ります。 -.Sp - (1,'-',10,',',20) -.Sp -パターン /PATTERN/ は、実行時に変わるパターンを指定する式で -置き換え可能です。 -(実行時コンパイルを一回にしたければ、/$variable/o を使って下さい。) -特別なケースとして空白 (\'\ \') を指定すると、引数無しで split する -場合と同様ですが、先頭に空白があってもヌルフィールドは作られません。 -つまり split(\'\ \') は、 -.IR awk -のデフォルトの動作をエミュレートすることができるわけで、split(/\ /) -は先頭に空白があると、最初にその数だけヌルフィールドを作ります。 -.Sp -例: -.nf - -.ne 5 - open(passwd, \'/etc/passwd\'); - while (<passwd>) { -.ie t \{\ - ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(\|/\|:\|/\|); -'br\} -.el \{\ - ($login, $passwd, $uid, $gid, $gcos, $home, $shell) - = split(\|/\|:\|/\|); -'br\} - .\|.\|. - } - -.fi -(上の例の $shell は改行文字を含みます。 chop() を参照して下さい。) -.IR join -を参照して下さい。 -.Ip "sprintf(FORMAT,LIST)" 8 4 -通常の printf 変換でフォーマットされる文字列を返します。 -* 文字はサポートされていません。 -.Ip "sqrt(EXPR)" 8 4 -.Ip "sqrt EXPR" 8 -EXPR の平方根を返します。 -EXPR を省略すると、$_ の平方根を返します。 -.Ip "srand(EXPR)" 8 4 -.Ip "srand EXPR" 8 -.I rand -演算子のために、乱数用の seed をセットします。 -EXPR を省略すると、srand(time) を実行します。 -.Ip "stat(FILEHANDLE)" 8 8 -.Ip "stat FILEHANDLE" 8 -.Ip "stat(EXPR)" 8 -.Ip "stat SCALARVARIABLE" 8 -EXPR という名前のファイルや FILEHANDLE でオープンされたファイルの -情報を示す 13 要素の配列を返します。 -stat が失敗するとヌルリストを返します。 -普通次のように使います: -.nf - -.ne 3 - ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, - $atime,$mtime,$ctime,$blksize,$blocks) - = stat($filename); - -.fi -stat に特殊ファイルハンドル _ を渡すと、stat は実行されず最後に -行なわれた stat やファイルテストで使われた stat 構造体の内容を -返します。 -例: -.nf - -.ne 3 - if (-x $file && (($d) = stat(_)) && $d < 0) { - print "$file is executable NFS file\en"; - } - -.fi -(この例は、NFS 下でデバイス番号が負になるマシンでのみ動作します。) -.Ip "study(SCALAR)" 8 6 -.Ip "study SCALAR" 8 -.Ip "study" -SCALAR (指定しなければ $_) について、それが次に変更される前に多くの -パターンマッチを予想してあらかじめ行います。 -検索をするパターンの性質や数、検索される文字列中の文字の出現頻度分布 -によっては、時間を節約できるかもしれませんし、できないかもしれません。 -\*(--多分これを使った場合と使わない場合で、実行時どちらが速いかを -比べてみたいでしょう。たくさんの短い定数文字列(より複雑なパターンの -定数部を含む)をスキャンするループで最も恩恵にあずかれるでしょう。 -一度に一つの study しか効果がありません。\*(--別のスカラを study -すると、先に study したものは \*(L"unstudied\*(R" となってしまいます。 -(study の動作の仕方は次の通りです: 検索される文字列のすべての文字の -リンクリストを作ります。そうすると例えば、どこに \*(L'k\*(R' の文字が -あるかがすべてわかるわけです。いくつかの C のプログラムと英文から -作成された統計頻度表に基づき、各検索文字について、最も頻度が少ない -文字を選びます。この \*(L"頻度が少ない\*(R" 文字を調べるのです。) -.Sp -次の例は、あるパターンを含むすべての行の前にインデックスを含むエントリを -挿入します: -.nf - -.ne 8 - while (<>) { - study; - print ".IX foo\en" if /\ebfoo\eb/; - print ".IX bar\en" if /\ebbar\eb/; - print ".IX blurfl\en" if /\ebblurfl\eb/; - .\|.\|. - print; - } - -.fi -/\ebfoo\eb/ を検索するとき、\*(L'f\*(R' は \*(L'o\*(R' よりも頻度が -少ないため、$_ の中で \*(L'f\*(R' を含む位置が探されます。 -一般に、病的な場合を除いて、これは非常にうまくいきます。 -唯一、最初の時点でリンクリストを作成するためにかかる以上の -時間を節約できるかが問題になります。 -.Sp -実行するまで解らない文字列を検索しなければならない場合、全ループを -一つの文字列として解析し eval することで、すべてのパターンを毎回 -再コンパイルするのを避けることができることを覚えておきましょう。 -それに加えて全ファイルが 1 レコードになるように $/ を undef すると、 -大変速くなり、fgrep のように特殊化したプログラムより速くなることも -多いです。 -以下の例は、ファイルのリスト (@files) と単語のリスト (@words) を -検索し、マッチするファイル名を出力します: -.nf - -.ne 12 - $search = \'while (<>) { study;\'; - foreach $word (@words) { - $search .= "++\e$seen{\e$ARGV} if /\e\eb$word\e\eb/;\en"; - } - $search .= "}"; - @ARGV = @files; - undef $/; - eval $search; # これは(メモリ不足で)泣きそう - $/ = "\en"; # 普通の入力区切りに戻そう - foreach $file (sort keys(%seen)) { - print $file, "\en"; - } - -.fi -.Ip "substr(EXPR,OFFSET,LEN)" 8 2 -.Ip "substr(EXPR,OFFSET)" 8 2 -EXPR から部分文字列を取り出し、それを返します。 -$[ をセットしない限り、最初の文字はオフセット 0 です。 -OFFSET が負だと、文字列の終りから OFFSET だけ離れた位置から始めます。 -LEN を省略すると、終端までのすべての文字列を返します。 -substr() 関数は左辺値としても使えます。その場合 EXPR は左辺値 -でなくてはなりません。 -LEN より短いものを代入すると、文字列は短くなり、長いものを代入すると -それを含められるように長くなります。 -文字列を同じ長さに保つためには、sprintf() を使ってパディングまたは -切り捨てをしなければならないかもしれません。 -.Ip "symlink(OLDFILE,NEWFILE)" 8 2 -OLDFILE へのシンボリックリンク NEWFILE を作成します。 -成功すると 1 を、失敗すると 0 を返します。 -シンボリックリンクをサポートしないシステムでは、実行時に致命的エラー -となります。 -これをチェックするには、eval を使います: -.nf - - $symlink_exists = (eval \'symlink("","");\', $@ eq \'\'); - -.fi -.Ip "syscall(LIST)" 8 6 -.Ip "syscall LIST" 8 -リストの最初の要素で指定されたものに、残りの要素を引数として付けて、 -システムコールを呼び出します。 -実装されていないと致命的エラーとなります。 -引数は次のように解釈されます: 与えられた引数が数字なら、引数は -整数として渡されます。そうでなければ、文字列へのポインタが渡されます。 -結果が受け取れるように、書き込まれるべき文字列を十分長くしておくのは、 -あなたの責任です。 -数字の引数がリテラルでなく、それまで数字のコンテキストで解釈されて -いなかったものなら、強制的に数字に見せるように、 -0 を足す必要があるかもしれません。 -.nf - - # h2ph を実行しておく必要があるかもしれません - require 'syscall.ph'; - syscall(&SYS_write, fileno(STDOUT), "hi there\en", 9); - -.fi -.Ip "sysread(FILEHANDLE,SCALAR,LENGTH,OFFSET)" 8 5 -.Ip "sysread(FILEHANDLE,SCALAR,LENGTH)" 8 5 -システムコール read(2) を使って、指定した FILEHANDLE から -LENGTH バイトのデータを読み込み、変数 SCALAR に格納します。 -これは標準入出力を経由しないので、read と混在して使うと、 -混乱するかもしれません。 -実際に読み込まれたバイト数を返します。エラーの場合は undef を返します。 -SCALAR は実際に読み込まれた長さによって伸縮します。 -文字列の始めでなく途中にデータを格納するように、OFFSET を指定できます。 -.Ip "system(LIST)" 8 6 -.Ip "system LIST" 8 -\*(L"exec LIST\*(R" と全く同じことを行ないますが、違いは最初に fork が -実行されて、親プロセスは子プロセスが終了するのを待つことです。 -引数の処理は、引数の数によって変わることに注意して下さい。 -戻り値は、wait() で返るプログラムの終了時ステータスになります。 -実際の終了時ステータスを得るには、256 で割って下さい。 -.IR exec -を参照。 -.Ip "syswrite(FILEHANDLE,SCALAR,LENGTH,OFFSET)" 8 5 -.Ip "syswrite(FILEHANDLE,SCALAR,LENGTH)" 8 5 -システムコール write(2) を使って、指定した FILEHANDLE に -変数 SCALAR から LENGTH バイトのデータを書き込みます。 -これは標準入出力を経由しないので、print と混在して使うと、 -混乱するかもしれません。 -実際に書き込まれたバイト数を返します。エラーの場合は undef を返します。 -OFFSET で、文字列の始めでなく途中からデータを読むように指定できます。 -.Ip "tell(FILEHANDLE)" 8 6 -.Ip "tell FILEHANDLE" 8 6 -.Ip "tell" 8 -FILEHANDLE の現在のファイル位置を返します。 -FILEHANDLE は、実際のファイルハンドルの名前を与える式でもかまいません。 -FILEHANDLE を省略すると、最後に読んだファイルを使います。 -.Ip "telldir(DIRHANDLE)" 8 5 -.Ip "telldir DIRHANDLE" 8 -DIRHANDLE について readdir() ルーチンの現在の位置を返します。 -この値は、ディレクトリの特定の位置をアクセスするために、seekdir() の -引数に使います。 -相当するシステムライブラリルーチン同様、directory compaction について -は同じ注意が必要です。 -.Ip "time" 8 4 -1970 年 1 月 1 日 00:00:00 (UTC) からの通算の秒数(閏秒無し)を返します。 -gmtime() や localtime() に使うことができます。 -.Ip "times" 8 4 -現在のプロセスと子プロセスのユーザ、システム時間(秒)からなる 4 要素の -配列を返します。 -.Sp - ($user,$system,$cuser,$csystem) = times; -.Sp -.Ip "tr/SEARCHLIST/REPLACEMENTLIST/cds" 8 5 -.Ip "y/SEARCHLIST/REPLACEMENTLIST/cds" 8 -SEARCHLIST にある文字が出現したら、すべて REPLACEMENTLIST の相当する -文字に変換します。 -変換または削除された文字の数を返します。 -=~ や !~ 演算子を介した文字列の指定をしなかった場合、$_ 文字列が -変換されます。 -(=~ で指定した文字列は、スカラ変数か配列の要素かそれらへの代入 -でなければいけません。つまり、左辺値ということになります。) -.I sed -信者のために、 -.I tr -の別名 -.I y -が用意されています。 -SEARCHLIST が [], <>, () で区切られていると、REPLACEMENTLIST は、 -それ自身のクォートを持ち、それは [], <>, () であっても、そうでなくても -良いことになります。例えば、 -tr[A-Z][a-z] または tr(+-*/)/ABCD/ のようになります。 -.Sp -c 修飾子が指定されると、SEARCHLIST の文字セットは補間されます。 -d 修飾子が指定されると、SEARCHLIST で指定された文字で REPLACEMENTLIST -に対応するものがないものは皆、削除されます。 -(これは、SEARCHLIST で見つかったものを何でも削除してしまう -ような -.I tr -プログラムの挙動よりも、やや柔軟です。) -s 修飾子が指定されると、変換されて同じ文字が続いたとき、 -それを 1 文字に縮めます。 -.Sp -d 修飾子が使われると、REPLACEMENTLIST は常に指定された通りに -解釈されます。それ以外の場合で、REPLACEMENTLIST が SEARCHLIST より -短いときは、同じ長さになるまで最後の文字が繰り返されます。 -REPLACEMENTLIST がヌルだと、SEARCHLIST がコピーされます。 -これは、あるクラスに含まれる文字をカウントしたり、あるクラスの文字の -重複を縮めるときに便利です。 -.Sp -例: -.nf - - $ARGV[1] \|=~ \|y/A\-Z/a\-z/; \h'|3i'# 小文字に統一します - - $cnt = tr/*/*/; \h'|3i'# $_ の中の * を数えます - - $cnt = tr/0\-9//; \h'|3i'# $_ の中の数字を数えます - - tr/a\-zA\-Z//s; \h'|3i'# bookkeeper \-> bokeper - - ($HOST = $host) =~ tr/a\-z/A\-Z/; - - y/a\-zA\-Z/ /cs; \h'|3i'# アルファベット以外を 1 文字の空白にします - - tr/\e200\-\e377/\e0\-\e177/;\h'|3i'# 8 ビット目を消します - -.fi -.Ip "truncate(FILEHANDLE,LENGTH)" 8 4 -.Ip "truncate(EXPR,LENGTH)" 8 -FILEHANDLE や EXPR の名前のファイルを指定した長さに切り詰めます。 -システムに truncate が実装されていないと、致命的エラーになります。 -.Ip "umask(EXPR)" 8 4 -.Ip "umask EXPR" 8 -.Ip "umask" 8 -プロセスに umask をセットし、変更前の値を返します。 -EXPR が省略されると、単に現在の umask を返します。 -.Ip "undef(EXPR)" 8 6 -.Ip "undef EXPR" 8 -.Ip "undef" 8 -EXPR の値を undefined とします。これは左辺値でなければなりません。 -スカラ値、配列全体、サブルーチン名 (& を使う) の場合でのみ使えます。 -(undef は、多分ほとんどの予約変数、dbm 配列値では期待する動作となりません。) -undef は、常に undefined 値を返します。 -EXPR を省略することもできます。その場合は何も undef されませんが、 -それでも undefined 値を得ることができます。 -例えば、サブルーチンから return するときです。 -例: -.nf - -.ne 6 - undef $foo; - undef $bar{'blurfl'}; - undef @ary; - undef %assoc; - undef &mysub; - return (wantarray ? () : undef) if $they_blew_it; - -.fi -.Ip "unlink(LIST)" 8 4 -.Ip "unlink LIST" 8 -リストに含まれるファイルを削除します。 -削除に成功したファイルの数を返します。 -.nf - -.ne 2 - $cnt = unlink \'a\', \'b\', \'c\'; - unlink @goners; - unlink <*.bak>; - -.fi -注意: unlink は、自分がスーパユーザで -.IR perl -に -.B \-U -フラグを付けている場合を除くとディレクトリを消去はしません。 -これらの条件がそろったとしても、ディレクトリの unlink は -システムにダメージを与えることがあるので、気をつけて下さい。 -代わりに rmdir を使って下さい。 -.Ip "unpack(TEMPLATE,EXPR)" 8 4 -unpack は pack の逆を行ないます: 構造体を示す文字列を引数に取り、 -それを配列値に出力し、配列値を返します。 -(スカラのコンテキストでは、生成された最初の値のみを返します。) -TEMPLATE は、pack 関数と全く同じフォーマットになります。 -以下は、substr を実行するサブルーチンです: -.nf - -.ne 4 - sub substr { - local($what,$where,$howmuch) = @_; - unpack("x$where a$howmuch", $what); - } - -.ne 3 -そして、 - - sub ord { unpack("c",$_[0]); } - -.fi -というのもあります。 -更に、フィールドの前に %<数字> の添字を付けることにより、 -項目そのものの代わりに、項目の<数字>ビットのチェックサムが欲しいと -いう指定になります。 -デフォルトは、16 ビットのチェックサムです。 -次の例で、System V の sum プログラムと同じ数が計算されます: -.nf - -.ne 4 - while (<>) { - $checksum += unpack("%16C*", $_); - } - $checksum %= 65536; - -.fi -.Ip "unshift(ARRAY,LIST)" 8 4 -視点によって、 -.IR shift -の逆、または -.IR push -の逆を行ないます。 -LIST を配列の前に付け加え、新しい配列の要素の数を返します。 -.nf - - unshift(ARGV, \'\-e\') unless $ARGV[0] =~ /^\-/; - -.fi -.Ip "utime(LIST)" 8 2 -.Ip "utime LIST" 8 2 -リストの各ファイルのアクセス時刻と最終変更時刻を変えます。 -リストの最初の二つの要素には、*数値*で表されたアクセス時刻と変更時刻が -この順で入っていなければなりません。 -変更に成功したファイルの数が返ります。 -各ファイルの inode 変更時刻には現在時間がセットされます。 -以下は、\*(L"touch\*(R" コマンドの例です: -.nf - -.ne 3 - #!/usr/bin/perl - $now = time; - utime $now, $now, @ARGV; - -.fi -.Ip "values(ASSOC_ARRAY)" 8 6 -.Ip "values ASSOC_ARRAY" 8 -名前付き連想配列のすべての値からなる普通の配列を返します。 -値は、見かけ上ランダムな順で返るように見えますが、同じ連想配列に対して、 -keys() 関数 や each() 関数が生成するものと同じ順になります。 -keys() と each() を参照して下さい。 -.Ip "vec(EXPR,OFFSET,BITS)" 8 2 -文字列を unsigned integer のベクトルとして扱い、指定した -ビットフィールドの値を返します。 -代入もできます。 -BITSは、2 の累乗で 1 から 32 まででなければなりません。 -.Sp -vec() に生成されたベクトルは、論理演算子 |, &, ^ で操作することができ、 -両方のオペランドが文字列のとき、 -ビットベクトル演算をするものとみなされます。 -古いプログラムを守るために、プログラム中に少なくとも一つの vec() が -ないと、この解釈はなされません。 -.Sp -ビットベクトルを 0 や 1 の文字列や配列に変換するには、 -以下を使って下さい: -.nf - - $bits = unpack("b*", $vector); - @bits = split(//, unpack("b*", $vector)); - -.fi -ビットの正確な長さがわかるならば、* の代わりに使うことができます。 -.Ip "wait" 8 6 -子プロセスが終了するのを待ち、死んだプロセスの pid を返します。 -子プロセスがないときは、-1 を返します。 -終了時ステータスは $? に返されます。 -.Ip "waitpid(PID,FLAGS)" 8 6 -特定の子プロセスが終了するのを待ち、死んだプロセスの pid を返します。 -そのような子プロセスがなければ、-1 を返します。 -終了時ステータスは $? に返されます。 -次のように書くと、 -.nf - - require "sys/wait.h"; - .\|.\|. - waitpid(-1,&WNOHANG); - -.fi -どのプロセスに対しても、non-blocking wait を実行できます。 -non-blocking wait は、 -.I waitpid (2) -か、または -.I wait4 (2) -システムコールをサポートしているマシンでのみ使えます。 -しかし、FLAGS 0 での 特殊な pid の wait はどこでも実装されています。 -(perl は、終了したものの perl スクリプトには採り入れられていない -プロセスのステータス値を覚えていることでシステムコールをエミュレート -します。) -.Ip "wantarray" 8 4 -現在実行しているサブルーチンのコンテキストが配列値なら真を返します。 -スカラのコンテキストに見えれば、偽を返します。 -.nf - - return wantarray ? () : undef; - -.fi -.Ip "warn(LIST)" 8 4 -.Ip "warn LIST" 8 -\*(L"die\*(R" と同じようなメッセージを標準エラー出力に出しますが、 -終了しません。 -.Ip "write(FILEHANDLE)" 8 6 -.Ip "write(EXPR)" 8 -.Ip "write" 8 -指定したファイルに、関連付けられたフォーマットを使って、 -フォーマットレコード (複数行も可) を書き込みます。 -デフォルトで、フォーマットはファイルハンドルと同じ名前を持つものに -なりますが、$~ 変数にフォーマットの名前を明示的に割り当てることで、 -現在の出力チャネル ( -.IR select -を参照して下さい) に対するフォーマットをセットしてもかまいません。 -.Sp -最上位の form 生成は自動的に行なわれます: -フォーマットされたレコードに対して、現在のページに十分な空きがない -場合、改頁が書き込まれて、次のページに移ります。 -新しいページのヘッダには、特別なページ先頭フォーマットが使われ、 -その後レコードが書き込まれます。 -デフォルトでページ先頭フォーマットは、 -ファイルハンドルの名前に \*(L"_TOP\*(R" を付け加えたものになりますが、 -ファイルハンドルが select されているときは、$^ 変数に名前を割り当てる -ことで、好きなフォーマットを動的にセットしてもかまいません。 -現在のページに残っている行数は、変数 $- に保持されていますが、0 を -セットすることがで、強制的に新しいページに移ることができます。 -.Sp -FILEHANDLE が指定されないと、現在のデフォルト出力チャネルに -出力されます。デフォルト出力は、起動時 -.I STDOUT -ですが、 -.I select -演算子で変更できます。 -FILEHANDLE が EXPR のとき、その式が実行時に評価され、結果の文字列が -FILEHANDLE の名前として用いられます。 -フォーマットについての詳細は、後述のフォーマットのセクションを -参照して下さい。 -.Sp -write は read の*逆ではない*ことに注意して下さい。 -.Sh "優先度" -.I perl -の演算子は次のような結合規則と優先度を持っています: -.nf - -なし\h'|1i'print printf exec system sort reverse -\h'1.5i'chmod chown kill unlink utime die return -左から右\h'|1i', -右から左\h'|1i'= += \-= *= など -右から左\h'|1i'?: -なし\h'|1i'.\|. -左から右\h'|1i'|| -左から右\h'|1i'&& -左から右\h'|1i'| ^ -左から右\h'|1i'& -なし\h'|1i'== != <=> eq ne cmp -なし\h'|1i'< > <= >= lt gt le ge -なし\h'|1i'chdir exit eval reset sleep rand umask -なし\h'|1i'\-r \-w \-x など -左から右\h'|1i'<< >> -左から右\h'|1i'+ \- -左から右\h'|1i'* / % x -左から右\h'|1i'=~ !~ -右から左\h'|1i'! ~ 単項の- -右から左\h'|1i'** -なし\h'|1i'++ \-\|\- -左から右\h'|1i'\*(L'(\*(R' - -.fi -始めの方で述べたように、リストを引数にする演算子 (print 他) や、 -任意の単項演算子 (chdir 他) のすぐ後に同じ行の次のトークンとして -左括弧がある場合、括弧の中の演算子と引数は、丁度通常の -ファンクションコールと同様に再優先とみなされます。 -例: -.nf - - chdir $foo || die;\h'|3i'# (chdir $foo) || die - chdir($foo) || die;\h'|3i'# (chdir $foo) || die - chdir ($foo) || die;\h'|3i'# (chdir $foo) || die - chdir +($foo) || die;\h'|3i'# (chdir $foo) || die - -しかし、* は || よりも優先度が高いので: - - chdir $foo * 20;\h'|3i'# chdir ($foo * 20) - chdir($foo) * 20;\h'|3i'# (chdir $foo) * 20 - chdir ($foo) * 20;\h'|3i'# (chdir $foo) * 20 - chdir +($foo) * 20;\h'|3i'# chdir ($foo * 20) - - rand 10 * 20;\h'|3i'# rand (10 * 20) - rand(10) * 20;\h'|3i'# (rand 10) * 20 - rand (10) * 20;\h'|3i'# (rand 10) * 20 - rand +(10) * 20;\h'|3i'# rand (10 * 20) - -.fi -括弧がないと、print, sort, chmod といったリストを引数に持つ演算子は、 -演算子の左側を見ているか右側を見ているかによって、非常に高くも -非常に低くもなります。 -例えば、次の例で -.nf - - @ary = (1, 3, sort 4, 2); - print @ary; # 1324 を出力 - -.fi -sort の右側のコンマは、sort の前に評価されますが、左側のコンマは、 -後で評価されます。 -言い換えると、リストを引数に取る演算子は、それに続くすべての引数を -拾う傾向にあり、前の式にしたがって単一の命令語のように振舞います。 -括弧に注意深くなければいけないことを覚えておいて下さい: -.nf - -.ne 3 - # これらを評価すると、print を実行する前に exit します。 - print($foo, exit); # 明らかにやりたいこととは違います - print $foo, exit; # これもそう - -.ne 4 - # これらは、exit を評価する前に print を実行します。 - (print $foo), exit; # これはやりたいことです - print($foo), exit; # これもそう - print ($foo), exit; # さらにこれも - -また、これは - - print ($foo & 255) + 1, "\en"; - -.fi -多分一目見て期待する動作とは違うことを実行するでしょう。 -.Sh "サブルーチン" -サブルーチンは次のように宣言されます: -.nf - - sub NAME BLOCK - -.fi -.PP -ルーチンに渡されたすべての引数は、配列 @_ に入ります。 -これは、($_[0], $_[1], .\|.\|.) です。 -配列 @_ はローカル配列ですが、その値は実際のスカラパラメータへの参照 -になります。 -サブルーチンの戻り値は、最後の式が評価されたときの値で、配列値にも -スカラ値にもなり得ます。 -また、リターン文は戻り値を指定してサブルーチンを抜けることにも -使われます。 -ローカル変数を作成するには、 -.I local -演算子を参照して下さい。 -.PP -サブルーチンは、 -.I do -演算子かまたは & 演算子を使って呼ばれます。 -.nf - -.ne 12 -例: - - sub MAX { - local($max) = pop(@_); - foreach $foo (@_) { - $max = $foo \|if \|$max < $foo; - } - $max; - } - - .\|.\|. - $bestday = &MAX($mon,$tue,$wed,$thu,$fri); - -.ne 21 -例: - - # 行を取得し、空白で始まる行は - # 続きの行として結合されます。 - sub get_line { - $thisline = $lookahead; - line: while ($lookahead = <STDIN>) { - if ($lookahead \|=~ \|/\|^[ \^\e\|t]\|/\|) { - $thisline \|.= \|$lookahead; - } - else { - last line; - } - } - $thisline; - } - - $lookahead = <STDIN>; # 最初の行を取得します - while ($_ = do get_line(\|)) { - .\|.\|. - } - -.fi -.nf -.ne 6 -引数に名前を付けるには、ローカルリストへの配列の代入を使います: - - sub maybeset { - local($key, $value) = @_; - $foo{$key} = $value unless $foo{$key}; - } - -.fi -代入は値をコピーするので、これは参照呼び出しを値呼び出しに換える効果も -あります。 -.Sp -サブルーチンは再帰的に呼び出せます。 -サブルーチンが & の型を使って呼び出されるとき、引数リストは省略 -できます。 -省略されると、サブルーチンには @_ 配列がセットされません; -その代わり、呼び出し時に @_ 配列は、サブルーチンには可視となります。 -.nf - - do foo(1,2,3); # 三つの引数を渡します - &foo(1,2,3); # 上と同じです - - do foo(); # ヌルリストを渡します - &foo(); # 上と同じです - &foo; # 引数を渡しません\*(--より効率的 - -.fi -.Sh "参照渡し" -サブルーチンへ配列の値を渡すのではなく、その名前を渡して、サブルーチン -がローカルなコピーに対してではなくグローバルな配列を変更できるように -したいときがあるでしょう。 -perl では名前を持つすべてのオブジェクトに対して、その名前の前に * を -つけて参照できます: *foo のように。 -これが評価されると、ファイルハンドル、フォーマット、サブルーチンを含む、 -その名前を持つすべてのオブジェクトを表すスカラ値となります。 -local() 演算子に代入されたとき、その名前がそれに代入された * 値を -参照するようになります。 -例: -.nf - - sub doubleary { - local(*someary) = @_; - foreach $elem (@someary) { - $elem *= 2; - } - } - do doubleary(*foo); - do doubleary(*bar); - -.fi -*name への代入は今のところ local() の中でしか勧められません。 -実際には *name への代入はどこででもできますが、それ以前の *name への -参照が永遠に尾を引くかもしれません。 -これにより困ったことになるかもしれませんし、ならないかもしれません。 -.Sp -スカラはすでに参照渡しですが、このメカニズムを用いなくても、 -関心のある $_[nnn] への明示的な参照を行うことで、スカラの引数を -変更することができます。 -すべての要素をスカラで渡すことで、すべての配列の要素を変更することが -できますが、push や pop、配列のサイズの変更には * メカニズムを -使わなければなりません。 -どんな場合でも、* メカニズムは多分、より効率が良いはずです。 -.Sp -*name 値は表示不能なバイナリデータを含むので、print の引数または printf -や sprintf の %s 引数として使われると、表示を綺麗にするため '*name' と -いう値になります。 -.Sp -通常 LIST メカニズムはすべての配列値をマージしてしまって、個々の配列を -取り出せなくなってしまうので、配列を変更したくないとしても、 -このメカニズムは一つの LIST にたくさんの配列を渡すのに便利です。 -.Sh "正規表現" -パターンマッチで使われるパターンは、バージョン 8 regexp ルーチンで供給 -されているものと同じ正規表現です。 -(実際、このルーチンは Henry Spencer の自由に再配布可能な再実装 V8 ルーチン -から抜き取って使われています。) -それに加えて、\ew は英数字 (\*(L"_\*(R" を含む) にマッチし、 -\eW は非英数字にマッチします。 -単語境界は \eb に、非単語境界は \eB に。 -空白文字は \es に、非空白文字は \eS に。 -数字は \ed に、非数字は \eD にマッチします。 -\ew, \es, \ed はキャラクタクラスでも使えます。 -また、\en, \er, \ef, \et, \eNNN は通常と同じ意味となります。 -キャラクタクラスの中では、\eb は単語境界ではなく、 -バックスペースを表します。 -選択候補は、| で区切ります。 -括弧構造 \|(\ .\|.\|.\ \|) を使うと、\e<数字> はその数字番目の -部分文字列にマッチします。 -(パターンの外では、数字の前に \e の代わりに常に $ を用いなければ -なりません。$<数字> (と $\`, $&, $\') の有効範囲は、閉じたブロックの -終りか、eval 文字列か、次のパターンマッチまでとなります。 -\e<数字> 記述は、ときに現在のパターンの外に作用しますが、それに頼って -はいけません。) -括弧は好きなだけたくさん使ってかまいません。9 個以上の部分文字列が -あると、変数 $10, $11, ... が対応する部分文字列を参照します。 -後方参照の前に少なくともその数の左括弧があると、パターンの中では、 -\e10, \e11 等が部分文字列を後方参照します。 -そうでなければ (以前との互換性のために) \e10 は \e010 のバックスペースと -同じ、\e11 は \e011 のタブと同じというようになります。 -(\e1 から \e9 は常に後方参照です。) -.PP -$+ は、最後の括弧でマッチしたものを返します。 -$& は、マッチした文字列全体を返します。 -($0 が同じものを返していましたが、今は違います。) -$\` はマッチした文字列の前の全文字列を返します。 -$\' はマッチした文字列の後の全文字列を返します。 -例: -.nf - - s/\|^\|([^ \|]*\|) \|*([^ \|]*\|)\|/\|$2 $1\|/; # 最初の二語を交換 - -.ne 5 - if (/\|Time: \|(.\|.\|):\|(.\|.\|):\|(.\|.\|)\|/\|) { - $hours = $1; - $minutes = $2; - $seconds = $3; - } - -.fi -デフォルトで、^ 文字は文字列の先頭に、$ 文字は文字列の最後 -(または最後の改行文字の前) にマッチすることが保障されており、 -.I perl -は文字列が一行しか含んでいないという仮定のもとで、 -ある最適化を行なっています。 -改行が埋め込まれた場合の ^ や $ の振舞いは、矛盾を生じるでしょう。 -しかし、^ が文字列内の任意の改行の後に、$ が改行の前にマッチするよう -な、文字列を複数行バッファとして使いたい場合があるかもしれません。 -少々のオーバヘッドを覚悟すれば、変数 $* に 1 をセットすることで、 -それができます。 -$* を 0 に設定し直せば、 -.I perl -は元の動作に戻ります。 -.PP -複数行の置換を用意にするために、. 文字は改行文字にはマッチしません -(たとえ $* が 0 であっても)。 -特に次の例では、改行文字が $_ 文字列に残ります: -.nf - - $_ = <STDIN>; - s/.*(some_string).*/$1/; - -改行文字が要らないなら、次のどれかを試して下さい。 - - s/.*(some_string).*\en/$1/; - s/.*(some_string)[^\e000]*/$1/; - s/.*(some_string)(.|\en)*/$1/; - chop; s/.*(some_string).*/$1/; - /(some_string)/ && ($_ = $1); - -.fi -正規表現のどの要素の後でも中括弧で囲んだ数字を {n,m} の形で -置くことができ、n で要素がマッチする最小の回数を、m で最大の回数を -指定します。 -{n} の形は、{n,n} と同等で、正確に n 回にマッチします。 -{n,} の形は、n 回以上にマッチします。 -(中括弧が他のコンテキストの中に出て来た場合は、通常の文字として -扱われます。) -* 修飾子は {0,} と、+ 修飾子は {1,} と、? 修飾子は {0,1} と -同等となります。 -n と m のサイズには制限がありませんが、大きい数字はより多くのメモリを -消費するでしょう。 -.Sp -.I perl -では、 -\eb, \ew, \en のような -バックスラッシュのつくメタキャラクタは、すべて英数字であること -に気がつかれることでしょう。 -他の正規表現言語とは違って、英数字でないバックスラッシュシンボルは -ありません。 -従って、\e\e, \e(, \e), \e<, \e>, \e{, \e} というようなものは皆、 -メタキャラクタではなく、文字そのものとして解釈されます。 -これにより、メタキャラクタに含まれるのではないかと心配になるような -文字列をパターンに使って、引用することが容易になります。 -英数字でないすべての文字の引用は、このようにします: -.nf - - $pattern =~ s/(\eW)/\e\e$1/g; - -.fi -.Sh "フォーマット" -.I write -演算子で使う出力レコードフォーマットは、次のように -宣言します: -.nf - -.ne 3 - format NAME = - FORMLIST - . - -.fi -NAME を省略すると、\*(L"STDOUT\*(R" フォーマットが定義されます。 -FORMLIST は複数行から成り、各行は次の三つの型のいずれかとなります: -.Ip 1. 4 -コメント -.Ip 2. 4 -一つの出力行のフォーマットを示す \*(L"picture\*(R" 行 -.Ip 3. 4 -picture 行に値を与える引数行 -.PP -picture 行は、その中で値が置換される特定のフィールドを除けば、 -見た目そのままに出力されます。 -各 picture フィールドは、@ か ^ で始まります。 -@ フィールド (配列の先頭の @ と混乱しないように) は通常の場合 -で、^ フィールドは基本的な複数行テキストブロックを埋めるのに -使われます。 -フィールドの長さは、<, >, | の繰り返しで埋めることで指定し、それぞれ -左寄せ、右寄せ、センタリングを意味します。 -右寄せの別な形として、# 文字を (それに . を付けても良い) -数字フィールドの指定として使うこともできます。 -(@ のかわりに ^ を使うと、undefined なフィールドが空白になります。) -これらのフィールドに与えられた値が改行を含むと、改行までのテキスト -のみが出力されます。 -特殊フィールド @* は複数行の値の出力に使われます。 -その行に書かれているのは @* だけでなくてはいけません。 -.PP -値は、次の行で指定され、picture フィールドと同じ順となります。 -値はコンマで区切られていなければなりません。 -.PP -@ でなく ^ で始まる picture フィールドは、特別な扱いになります。 -指定する値は、テキスト文字列が入っているスカラ変数名でなければ -いけません。 -.I perl -は、フィールドに入れられるだけたくさんのテキストを入れ、変数が次に参照 -されるときに続きが出力されるように、文字列の先頭からそのテキストを削ります。 -通常、テキストのブロックを出力するには、垂直なスタックの中にフィールド -の一続きを入れて使います。 -全部を入れるにはテキストが長すぎるとき、そうしたければ -最後のフィールドを .\|.\|. で終らせることもできます。 -変数 $: を好きな文字のリストにすることで、テキストを分割する文字を -変えることができます。 -.PP -^ フィールドを使うと、可変長のレコードを生成するので、テキストの -フォーマットを短くしたいとき、チルダ (~) 文字を行のどこかに入れて -空行を抑制することができます。 -(可読性を高めるため、普通はできれば行頭に入れるべきです。) -チルダは出力時には空白に変換されます。 -一つ目に続けて二つ目のチルダを書くと、行中のすべてのフィールドが -なくなるまで、その行を繰り返します。 -(いろいろな @ のフィールドを使うとき、与える式はいつも同じ値ではない方が -良いでしょう。) -.PP -例: -.nf -.lg 0 -.cs R 25 -.ft C - -.ne 10 -# /etc/passwd ファイルの形式 -format STDOUT_TOP = -\& Passwd File -Name Login Office Uid Gid Home ------------------------------------------------------------------- -\&. -format STDOUT = -@<<<<<<<<<<<<<<<<<< @||||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<< -$name, $login, $office,$uid,$gid, $home -\&. - -.ne 29 -# バグレポート形式 -format STDOUT_TOP = -\& Bug Reports -@<<<<<<<<<<<<<<<<<<<<<<< @||| @>>>>>>>>>>>>>>>>>>>>>>> -$system, $%, $date ------------------------------------------------------------------- -\&. -format STDOUT = -Subject: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -\& $subject -Index: @<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< -\& $index, $description -Priority: @<<<<<<<<<< Date: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< -\& $priority, $date, $description -From: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< -\& $from, $description -Assigned to: @<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< -\& $programmer, $description -\&~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< -\& $description -\&~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< -\& $description -\&~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< -\& $description -\&~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< -\& $description -\&~ ^<<<<<<<<<<<<<<<<<<<<<<<... -\& $description -\&. - -.ft R -.cs R -.lg -.fi -同じ出力チャネルに対して、write を使って出力を混ぜることはできます -が、$\- (ページの残り行数) を自分でいじらなければなりません。 -.PP -ほとんどが空白のフィールドがたくさんあるとき、 -レコード間で reset 演算子を使うことを考えるべきです。 -効率的であるというだけでなく、別のフィールドを加えてしまい、0 に -し忘れてしまうというバグを防ぐことができます。 -.Sh "プロセス間通信" -perl の プロセス間通信(IPC)の能力は Berkeley のソケット機構に -基づいています。 -ソケットが無ければ、このセクションは無視できます。 -この呼び出しは、同名のシステムコールに相当しますが、 -二つの理由で大抵引数は異なります。 -一つ目は、perl のファイルハンドルは C ファイル記述子とは -異なる動作をするということです。 -二つ目は、perl は文字列の長さを知っているので、その情報を渡さなくても -良いということです。 -以下がクライアントのサンプル (未テスト) です: -.nf - - ($them,$port) = @ARGV; - $port = 2345 unless $port; - $them = 'localhost' unless $them; - - $SIG{'INT'} = 'dokill'; - sub dokill { kill 9,$child if $child; } - - require 'sys/socket.ph'; - - $sockaddr = 'S n a4 x8'; - chop($hostname = `hostname`); - - ($name, $aliases, $proto) = getprotobyname('tcp'); - ($name, $aliases, $port) = getservbyname($port, 'tcp') - unless $port =~ /^\ed+$/; -.ie t \{\ - ($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname); -'br\} -.el \{\ - ($name, $aliases, $type, $len, $thisaddr) = - gethostbyname($hostname); -'br\} - ($name, $aliases, $type, $len, $thataddr) = gethostbyname($them); - - $this = pack($sockaddr, &AF_INET, 0, $thisaddr); - $that = pack($sockaddr, &AF_INET, $port, $thataddr); - - socket(S, &PF_INET, &SOCK_STREAM, $proto) || die "socket: $!"; - bind(S, $this) || die "bind: $!"; - connect(S, $that) || die "connect: $!"; - - select(S); $| = 1; select(stdout); - - if ($child = fork) { - while (<>) { - print S; - } - sleep 3; - do dokill(); - } - else { - while (<S>) { - print; - } - } - -.fi -これがサーバ側です: -.nf - - ($port) = @ARGV; - $port = 2345 unless $port; - - require 'sys/socket.ph'; - - $sockaddr = 'S n a4 x8'; - - ($name, $aliases, $proto) = getprotobyname('tcp'); - ($name, $aliases, $port) = getservbyname($port, 'tcp') - unless $port =~ /^\ed+$/; - - $this = pack($sockaddr, &AF_INET, $port, "\e0\e0\e0\e0"); - - select(NS); $| = 1; select(stdout); - - socket(S, &PF_INET, &SOCK_STREAM, $proto) || die "socket: $!"; - bind(S, $this) || die "bind: $!"; - listen(S, 5) || die "connect: $!"; - - select(S); $| = 1; select(stdout); - - for (;;) { - print "Listening again\en"; - ($addr = accept(NS,S)) || die $!; - print "accept ok\en"; - - ($af,$port,$inetaddr) = unpack($sockaddr,$addr); - @inetaddr = unpack('C4',$inetaddr); - print "$af $port @inetaddr\en"; - - while (<NS>) { - print; - print NS; - } - } - -.fi -.Sh "予約変数" -次の変数名は、 -.IR perl -にとって特別な意味があります。 -これらのうち幾つかはアルファベットのシンボルにもしても良かったのですが、 -reset \*(L"a\-zA\-Z\*(R" で予約変数まで消されてしまうようなことに -したくなかったのです。 -そのため、これらのおかしなシンボル名に悩まされなければならないでしょう。 -そのうち多くは筋が通ったニーモニック (記憶方法) で、シェルのものと -類似になっています。 -.Ip $_ 8 -入力およびパターン検索のデフォルト。 -次の組はそれぞれ同等です: -.nf - -.ne 2 - while (<>) {\|.\|.\|. # while の中でのみ同等 - while ($_ = <>) {\|.\|.\|. - -.ne 2 - /\|^Subject:/ - $_ \|=~ \|/\|^Subject:/ - -.ne 2 - y/a\-z/A\-Z/ - $_ =~ y/a\-z/A\-Z/ - -.ne 2 - chop - chop($_) - -.fi -(覚え方: 下線は実行されるとわかる。) -.Ip $. 8 -最後に読み込まれたファイルハンドルの現在の行番号。 -読み出し専用。 -明示的なファイルハンドルの close でのみ行番号がリセットされることを -覚えておいて下さい。 -<> は明示的な close を行なわないので、ARGV ファイル全部を通して行番号 -が増えていきます (eof の例を参照して下さい)。 -(覚え方: 多くのプログラムは . を現在行番号の意味で使う。) -.Ip $/ 8 -入力レコードの区切り文字。デフォルトは改行。 -ヌル文字列にセットされると空行を区切りとして扱うことも含めて、 -.IR awk -の RS 変数と同じ働きをします。 -複数文字にセットすると複数文字区切りにマッチさせることができます。 -ファイルに空行が連続してあるとき、 -この変数を "\en\en" にセットすると、"" にセットする場合と -少々異なる意味を持つことに注意して下さい。 -"" にセットすると、二つかそれ以上の連続した空行を一つの空行として -扱います。 "\en\en" にセットすると、空行の後にたとえ改行文字が -続いていても、次の段落に含まれているものと盲目的に解釈されます。 -(覚え方: / は詩をクォートするとき行境界の区切りとして使える。) -.Ip $, 8 -print 演算子のための出力フィールド区切り文字。 -通常は、print 演算子は単にコンマ区切りで指定したフィールドを -出力します。より -.IR awk -に似た挙動をさせるためには、フィールド間に出力する文字を -指定する -.IR awk -の OFS 変数と同じものを、この変数をセットして下さい。 -(覚え方: print文に , があるとき出力すべきもの。) -.Ip $"" 8 -$, と似ていますが、この変数の異なる点は、"" で囲まれた -文字列 (または同様な挿入文字) に挿入される配列値に適用されることです。 -デフォルトは空白文字です。 -(覚え方: これは明白。) -.Ip $\e 8 -print 演算子の出力レコードセパレータ文字。 -通常 print 演算子は、後に改行やレコードセパレータ文字を続いていないと -推定して、単にコンマ区切りの指定フィールドを出力します。 -より -.IR awk -に似た挙動をさせるためには、print の終りに出力する文字を指定する -.IR awk -の ORS 変数と同じものをこの変数にセットして下さい。 -(覚え方: print の終りに \en を加える代わりに $\e をセット。) -/ にも似ていますが、 -.IR perl -から \*(L"得る\*(R" ものです。) -.Ip $# 8 -数字の出力のための出力フォーマット。 -この変数は -.IR awk -の OFMT 変数を半分だけ受け継いでいます。 -しかし -.I awk -と -.I perl -では、実際に何が数字であるかという概念の異なることがしばしばあります。 -初期値も、%.6g でなく %.20g ですので、 -.IR awk -の値を得るには、明示的に $# をセットする必要があります。 -(覚え方: # は数字の記号。) -.Ip $% 8 -現在 select されている出力チャネルの現在のページ番号。 -(覚え方: % は nroff におけるページ番号。) -.Ip $= 8 -現在 select されている出力チャネルの現在のページ長 (出力可能行)。 -デフォルトは 60。 -(覚え方: = は平行線。) -.Ip $\- 8 -現在 select されている出力チャネルのページの残り行数。 -(覚え方: 1 ページの行数 \- 出力済み行数) -.Ip $~ 8 -現在 select されている出力チャネルの現在のレポートフォーマット名。 -デフォルトは、ファイルハンドル名。 -(覚え方: $^ の仲間。) -.Ip $^ 8 -現在 select されている出力チャネルの現在のページ先頭フォーマット名。 -デフォルトは、ファイルハンドル名に \*(L"_TOP\*(R" を加えたもの。 -(覚え方: 先頭ページを指す。) -.Ip $| 8 -0 でない値をセットすると、現在 select されている出力チャネルに -write や print が行なわれる毎にフラッシュします。 -デフォルトは 0。 -通常 -.I STDOUT -は、端末に出力するときは行バッファが使われ、それ以外では -ブロックバッファが使われることに注意して下さい。 -この変数をセットするのは、 -.I perl -スクリプトを rsh の基で走らせている時等、 -パイプに出力している時に、 -出力が起こる度に確認したい場合に便利です。 -(覚え方: パイプを常に動かしておきたい。) -.Ip $$ 8 -.I perl -が走らせているスクリプトのプロセス番号。 -(覚え方: シェルと同じ。) -.Ip $? 8 -最後に close したパイプや (\`\`) コマンドや -.I system -演算子の戻り値。 -これは、wait() システムコールが返すステータスなので、サブプロセスの -終了値は実際は ($? >> 8) です。 -プロセスを終了させたシグナルがあった場合、$? & 255 は -どのシグナルであるか、dump された core があるかどうかを返します。 -(覚え方: sh や ksh と同じ。) -.Ip $& 8 4 -最後に成功したパターンマッチでマッチした文字列。 -(ブロック内や現在のブロックで閉じた eval でのマッチは含まれません。) -(覚え方: あるエディタの & と同じ。) -.Ip $\` 8 4 -最後にパターンマッチに成功したパターンの前にある文字列。 -(ブロック内や現在のブロックで閉じた eval でのマッチは含まれません。) -(覚え方: \` は大抵クォートされた文字列の前。) -.Ip $\' 8 4 -最後にパターンマッチに成功したパターンの後ろにある文字列。 -(ブロック内や現在のブロックで閉じた eval でのマッチは含まれません。) -(覚え方: \' は大抵クォートされた文字列の後。) -例: -.nf - -.ne 3 - $_ = \'abcdefghi\'; - /def/; - print "$\`:$&:$\'\en"; # abc:def:ghi を出力 - -.fi -.Ip $+ 8 4 -最後に検索したパターンの最後の括弧にマッチします。 -これは、複数候補のパターンマッチでどちらにマッチするかわからない -ときに便利です。 -例: -.nf - - /Version: \|(.*\|)|Revision: \|(.*\|)\|/ \|&& \|($rev = $+); - -.fi -(覚え方: 正で、前方を見ること。) -.Ip $* 8 2 -文字列内で、複数行のマッチを行なうとき 1 をセットし、 -パターンマッチの最適化の目的で、単一行を含む文字列であると -.I perl -に決め打ちにさせるときに 0 とします。 -$* が 0 のときに複数の改行を含む文字列のパターンマッチをすると、 -混乱した結果となります。 -デフォルトは 0。 -(覚え方: * は複数のものにマッチする。) -この変数は、^ や $ の解釈に影響するだけであるということに -注意して下さい。 -改行のリテラルは、when $* == 0 としても検索できます。 -.Ip $0 8 -.I perl -起動したスクリプトのファイル名を保持しています。 -$0 修飾子への代入は、ps(1) プログラムの引数の部分を参照して下さい。 -(覚え方: sh や ksh と同じ) -.Ip $<数字> 8 -最後に行なったパターンマッチで対応する数字番目の括弧のサブパターン。 -入れ子になったブロック内で既に終了したパターンマッチの数は含まれません。 -(覚え方: \e数字と同じ。) -.Ip $[ 8 2 -配列中の最初の要素や部分文字列の最初の文字の添字。 -デフォルトは 0 ですが、index() や substr() 関数の -添字のつけ方や評価に関して、 -.I perl -を -.I awk -(や Fortran) -の動作にさせるには、この変数に 1 をセットすることでできます。 -(覚え方: [ は添字の始まり。) -.Ip $] 8 2 -\*(L"perl -v\*(R" で出力される文字列。 -これは、perl インタープリタが正しいバージョンの範囲でスクリプトを -実行しているかどうかを決めるために、スクリプトの始めの方で使われます。 -数値のコンテキストで使われると、バージョン + パッチレベル / 1000 を -返します。 -例: -.nf - -.ne 8 - # getcがつかえるかどうかを調べます - ($version,$patchlevel) = - $] =~ /(\ed+\e.\ed+).*\enPatch level: (\ed+)/; - print STDERR "(No filename completion available.)\en" - if $version * 1000 + $patchlevel < 2016; - -また、数値で使われると、 - - warn "No checksumming!\en" if $] < 3.019; - -.fi -(覚え方: このバージョンの perl は right(正しい、右) 括弧に入ってるか? ) -.Ip $; 8 2 -多次元配列エミュレーションの際の添字の区切り。 -連想配列の要素を次のように参照するとき、 -.nf - $foo{$a,$b,$c} - -実際には - - $foo{join($;, $a, $b, $c)} - -を意味しますが、 - - @foo{$a,$b,$c} # スライス\*(--@ に注意 - -と書いてはいけません。 - - ($foo{$a},$foo{$b},$foo{$c}) - -.fi -を意味することになってしまうからです。 -デフォルトは "\e034" で、 -.IR awk -の SUBSEP と同じです。 -キーとしてバイナリデータを使うと、$; として安全な値はないだろうという -ことに気をつけて下さい。 -(覚え方: コンマ (文法上添字の区切り) はセミコロンの半分。 -これは、ちょっとひどいね。でも、$, は他のもっと重要なことに -取られているので。) -.Ip $! 8 2 -数値のコンテキストで使うと、通常の警告の文字列と共に errono の -現在の値を返します。 -(これは、システムエラーのような特別なエラーを除くと、$! の値に -依存した動作をさせてはいけないということを意味します。) -文字列のコンテキストで使うと、相当するシステムエラー文字列を返します。 -errno をセットするために $! に代入することができます。 -例えば、エラー番号 n に対して $! が文字列を返したいときや、 -die 演算子に終了値をセットしたいときなどです。 -(覚え方: 一体何が爆発したの? ) -.Ip $@ 8 2 -最後に評価したコマンドからくる perl の文法エラーメッセージ。 -ヌルなら、最後の評価が、正常に解析、実行されたことになります -(起動された演算は普通の形で失敗したかもしれません)。 -(覚え方: 文法エラーはどこに \*(L"アット (at where)\*(R" ?) -.Ip $< 8 2 -現在のプロセスの実 uid。 -(覚え方: setuid で走らせているとき、*どこから* きた uid か。) -.Ip $> 8 2 -現在のプロセスの実効 uid。 -例: -.nf - -.ne 2 - $< = $>; # 実効 uid に実 uid をセットします - ($<,$>) = ($>,$<); # 実 uid と実効 uid を取り換えます - -.fi -(覚え方: setuid で走らせているとき、*行く先の* uid。) -注意: $< と $> は setreuid() をサポートしているマシンでだけ -交換できます。 -.Ip $( 8 2 -現在のプロセスの実 gid。 -同時に複数グループのメンバとなることをサポートしたマシンで、 -属しているグループの空白区切りのリストが得られます。 -最初の数は getgid() の返すもので、残りが getgroups() の返すものです。 -残りの中には最初の数値と同じものも含まれているかもしれません。 -(覚え方: 括弧は GROUP に使われる。 setgid スクリプトを走らせているとき、 -実 gid は LEFT(残っている、左) のグループ。) -.Ip $) 8 2 -現在のプロセスの実効 gid。 -同時に複数グループのメンバとなることをサポートしたマシンで、 -属しているグループの空白区切りのリストが得られます。 -最初の数は getegid() の返すもので、残りが getgroups() の返すものです。 -残りの中には最初の数値と同じものも含まれているかもしれません。 -(覚え方: 括弧は GROUP に使われる。 setgid スクリプトを走らせているとき、 -実効 gid はあなたの RIGHT(正しい、右の)グループ。) -.Sp -注意: $<, $>, $(, $) は、相当する set[re][ug]id() ルーチンを -サポートしているマシンでだけセットできます。 -$( と $) は setregid() をサポートしているマシンでだけ交換できます。 -.Ip $: 8 2 -format の (^ で始まる) 継続フィールドを埋めるように文字列を分ける -際の直前の文字列セット。 -デフォルトは "\ \en-" で、空白やハイフンで分けられます。 -(覚え方: 詩では \*(L"コロン\*(R" は行の一部) -.Ip $^D 8 2 -デバッグフラグの現在の値。 -(覚え方: -.B \-D -スイッチの値。) -.Ip $^F 8 2 -最大システムファイル記述子数。通常は 2。 -システムファイル記述子は、子プロセスに渡されますが、 -それより数字が上のファイル記述子は渡されません。 -open する間は、たとえ open に失敗したとしても、 -システムファイル記述子は保存されます。 -open が試みられる前に、通常の記述子は close されます。 -.Ip $^I 8 2 -ファイルをその場で変更する場合の拡張子の値。 -その場で変更できないようにするには、この変数を undef します。 -(覚え方: -.B \-i -スイッチの値) -.Ip $^L 8 2 -改ページするために出力するフォーマット。デフォルトは \ef です。 -.Ip $^P 8 2 -デバッガが、自分自身をデバッグしないためにクリアする内部フラグ。 -これをクリアしておくと、デバッグを不可能にさせられると考えられます。 -.Ip $^T 8 2 -スクリプトが走り始めた時刻を、epoch からの秒で保持します。 -.B \-M , -.B \-A , -.B \-C -ファイルテストで返された値は、この変数の値に基づいています。 -.Ip $^W 8 2 -警告スイッチの現在の値。 -(覚え方: -.B \-w -スイッチに関係する。) -.Ip $^X 8 2 -argv[0] から来る、起動された perl 自身の名前。 -.Ip $ARGV 8 3 -<> から読み込んでいるとき、読み込み中のファイル名を保持します。 -.Ip @ARGV 8 3 -配列 ARGV は、スクリプトに渡されたコマンドライン引数を保持します。 -$ARGV[0] はコマンド名ではなく、最初の引数なので、$#ARGV は一般に -引数の数 -1 です。 -コマンド名については、$0 を参照して下さい。 -.Ip @INC 8 3 -配列 INC は、 -.I perl -スクリプトが \*(L"do EXPR\*(R" や \*(L"require\*(R" で評価されるときに -探されるべきディレクトリのリストを保持します。 -初期値として、 -.B \-I -コマンドラインスイッチの引数、 -これに続きデフォルトの -.I perl -ライブラリ (おそらく \*(L"/usr/share/perl\*(R")、 -これに続きカレントディレクトリを示す \*(L".\*(R" です。 -.Ip %INC 8 3 -連想配列 INC は、\*(L"do\*(R" や \*(L"require\*(R" を介してインクルー -ドされる各ファイル名のためのエントリを含んでいます。 -キーは、指定したファイル名で、値は実際にファイルが見つかった -位置の値です。 -この配列は、\*(L"require\*(R" コマンドが与えるファイルが既に -インクルード済みかどうかを決めるのに使われます。 -.Ip $ENV{expr} 8 2 -連想配列 ENV は、現在の環境変数を保持しています。 -ENV へ値を設定すると、子プロセスの環境が変わります。 -.Ip $SIG{expr} 8 2 -連想配列 SIG は、各シグナルハンドラをセットするのに使われます。 -例: -.nf - -.ne 12 - sub handler { # 第一引数はシグナル名 - local($sig) = @_; - print "Caught a SIG$sig\-\|\-shutting down\en"; - close(LOG); - exit(0); - } - - $SIG{\'INT\'} = \'handler\'; - $SIG{\'QUIT\'} = \'handler\'; - .\|.\|. - $SIG{\'INT\'} = \'DEFAULT\'; # デフォルト動作に戻す - $SIG{\'QUIT\'} = \'IGNORE\'; # SIGQUIT を無視する - -.fi -SIG 配列は、perl スクリプトで実際にシグナル用にセットされた値を -保持しています。 -.Sh "パッケージ" -perl は、パッケージ間で異なる名前空間持つメカニズムを用意しており、 -各々の変数がぶつからないように、パッケージを守っています。 -デフォルトで、perl スクリプトはパッケージ \*(L"main\*(R" として -コンパイルを始めます。 -.I package -宣言を使うことによって、名前空間を切り替えることができます。 -パッケージ宣言の有効範囲は、宣言それ自身から、閉じたブロックの終端まで -です (local() 演算子と同じ有効範囲)。 -普通 \*(L"require\*(R" 演算子によりインクルードされたファイルの中の -最初の宣言として使われます。 -複数箇所で同一パッケージに入ることが出来ます; -ブロック中でコンパイラがどのシンボルテーブルを使うかに影響するだけです。 -他のパッケージの変数やファイルハンドルは、識別子の前にパッケージ名と -シングルクォートを付けることで、参照できます。 -パッケージ名がヌルの場合、\*(L"main\*(R" と解釈されます。 -.PP -文字で始まる識別子は、パッケージシンボルテーブルに保存されます。 -それ以外のすべてのシンボルは、パッケージ \*(L"main\*(R" に保持されます。 -更に、識別子 STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV, INC, SIG は、 -たとえ組み込みの変数、関数と異なる目的で使われたとしても、 -強制的にパッケージ \*(L"main\*(R" に属するものとして扱われます。 -仮に、\*(L"m\*(R", \*(L"s\*(R", \*(L"y\*(R" と呼ばれるパッケージを -持っていたとすると、パターンマッチ、代入、変換として解釈されるので、 -識別子を適した形で使うことができないことに注意しましょう。 -.PP -eval された文字列は、eval がコンパイルされたパッケージ内で -コンパイルされます。 -(しかし、$SIG{} への代入は、main パッケージで指定された -シグナルハンドラと解釈されます。パッケージ内でシグナルハンドラを -持ちたい場合、シグナルハンドラ名を適切に指定して下さい。) -例えば、perl ライブラリ内の perldb.pl を調べてみましょう。 -これは始めに DB パッケージに切り替わり、デバッガがデバッグしようとして -いるスクリプト内の変数を変更しないようになっています。 -しかし、いろいろな時点で、main パッケージのコンテキストのいろいろな -式を評価するために、これは main パッケージに一時的に戻って来ています。 -.PP -パッケージのシンボルテーブルは、パッケージ名の前に下線のついた連想配列に -蓄えられることになります。 -連想配列の各エントリの値は、*name 表記を使うときに参照しようと -しているものになります。 -実際、次の例は同じ効果 (もちろん main パッケージの場合) がありますが、 -最初のものの方がコンパイル時にシンボルテーブルを見るので、 -より効率が良くなります: -.nf - -.ne 2 - local(*foo) = *bar; - local($_main{'foo'}) = $_main{'bar'}; - -.fi -例えば、以下によりパッケージ内のすべての変数を出力できます。 -これは perl ライブラリの dumpvar.pl から取っています: -.nf -.ne 11 - package dumpvar; - - sub main'dumpvar { - \& ($package) = @_; - \& local(*stab) = eval("*_$package"); - \& while (($key,$val) = each(%stab)) { - \& { - \& local(*entry) = $val; - \& if (defined $entry) { - \& print "\e$$key = '$entry'\en"; - \& } -.ne 7 - \& if (defined @entry) { - \& print "\e@$key = (\en"; - \& foreach $num ($[ .. $#entry) { - \& print " $num\et'",$entry[$num],"'\en"; - \& } - \& print ")\en"; - \& } -.ne 10 - \& if ($key ne "_$package" && defined %entry) { - \& print "\e%$key = (\en"; - \& foreach $key (sort keys(%entry)) { - \& print " $key\et'",$entry{$key},"'\en"; - \& } - \& print ")\en"; - \& } - \& } - \& } - } - -.fi -たとえサブルーチンがパッケージ dumpvar でコンパイルされるとしても、 -サブルーチン名がパッケージ \*(L"main\*(R" に挿入されるように、 -サブルーチン名の前にパッケージ名をつけなければならないことに注意して -下さい。 -.Sh "スタイル" -各々のプログラマは、フォーマットに関してもちろん自分自身の好みが -あるでしょうが、自分のプログラムを読み易くするための一般的な -ガイドラインがあります。 -.Ip 1. 4 4 -あることを特別な方法で*できる*からといって、そうしなければならない -ということはありません。 -.I perl -は、一つのことをするときに、幾つかの方法があるように設計されている -ので、最も読み易いものを選ぶように考えて下さい。 -例えば - - open(FOO,$foo) || die "Can't open $foo: $!"; - -は、 - - die "Can't open $foo: $!" unless open(FOO,$foo); - -よりも良いです。なぜなら、後者の方法は文の主題を修飾子内に隠しているからです。 -一方、 - - print "Starting analysis\en" if $verbose; - -は - - $verbose && print "Starting analysis\en"; - -より良いです。主となるのは、ユーザが -v を打ったかどうかでは -ないからです。 -.Sp -同様に、演算子がデフォルトの引数を仮定しているからといって、 -それはデフォルトを用いなければならないということではありません。 -デフォルトというものは、ちょっとしたプログラムを書く、怠け者の -システムプログラマのためにあります。 -読み易いプログラムをしたければ、引数を付けるようにして下さい。 -.Sp -同じようなこととして、 -あちこちで括弧を省略 -.I できる -ということは、以下のように書けということではありません: -.nf - - return print reverse sort num values array; - return print(reverse(sort num (values(%array)))); - -.fi -疑わしいときは、括弧をつけて下さい。 -もしかすると、物好きな輩が、vi で % キーを叩くかもしれません。 -.Sp -たとえ疑わしくなかったとしても、自分の後でそのコードを管理する人間の -精神衛生上好ましいですし、その人が間違ったところに括弧をつける可能性も -大いにあります。 -.Ip 2. 4 4 -無理にこじつけて、ループの先頭や終わりで終了しようとしないで下さい。 -.I perl -には、真ん中からでも抜けられるように "last" 演算子が -用意されているのですから。 -少々はみ出しても、より見易くなるようにして下さい: -.nf - -.ne 7 - line: - for (;;) { - statements; - last line if $foo; - next line if /^#/; - statements; - } - -.fi -.Ip 3. 4 4 -ループラベルを使うのを恐がらないで下さい\*(--多重ループの抜けだしがで -きるようにするためだけでなく、可読性を高めるためにあるのですから。 -最後の例を参照して下さい。 -.Ip 4. 4 4 -可搬性のため、すべてのマシンには実装されていない機能を使うときは、 -失敗しないかどうか、eval の中で構成を確かめてみて下さい。 -どのバージョンやパッチレベルで特定の仕様が実装されているかを -知っているなら、$] を調べて、実装されているかどうかを確認できます。 -.Ip 5. 4 4 -覚え易い識別子を選んで下さい。 -.Ip 6. 4 4 -一貫性を持たせましょう。 -.Sh "デバッグ" -.I perl -に -.B \-d -スイッチを付けて起動すると、デバッグモニタの基でスクリプトが走ります。 -最初の実行文の前で一時停止し、以下のようなコマンド入力を促します: -.Ip "h" 12 4 -ヘルプメッセージを出力する。 -.Ip "T" 12 4 -スタックトレース。 -.Ip "s" 12 4 -シングルステップ。 -次の文の始めに達するまでを実行します。 -.Ip "n" 12 4 -次。 -サブルーチンコール内では止まらずに、次の文に達するまで実行します。 -.Ip "f" 12 4 -終了。 -現在のサブルーチンが終了するまで、文を実行し続けます。 -.Ip "c" 12 4 -継続。 -次のブレークポイントに達するまで実行します。 -.Ip "c line" 12 4 -指定した行まで実行します。 -指定した行に、一回きりのブレークポイントを挿入します。 -.Ip "<CR>" 12 4 -最後に実行した n または s を繰り返します。 -.Ip "l min+incr" 12 4 -min 行目から incr+1 行を表示します。 -min を省略すると、最後に表示した残りから始めます。 -incr を省略すると、前回の incr 値が使われます。 -.Ip "l min-max" 12 4 -指定範囲内の行を表示します。 -.Ip "l line" 12 4 -指定行を表示します。 -.Ip "l" 12 4 -次のウィンドウを表示します。 -.Ip "-" 12 4 -前のウィンドウを表示します。 -.Ip "w line" 12 4 -その行と前後のウィンドウを表示します。 -.Ip "l subname" 12 4 -サブルーチンを表示します。 -長いサブルーチンの場合は、始めの方だけを表示します。 -それ以上表示するには、\*(L"l\*(R" を使って下さい。 -.Ip "/pattern/" 12 4 -正規表現の前方検索。最後の / は省略可能です。 -.Ip "?pattern?" 12 4 -正規表現の後方検索。最後の ? は省略可能です。 -.Ip "L" 12 4 -ブレークポイントまたはアクションの設定された行を表示します。 -.Ip "S" 12 4 -すべてのサブルーチン名を表示します。 -.Ip "t" 12 4 -トレースモードを on/off するトグル。 -.Ip "b line condition" 12 4 -ブレークポイントをセットします。 -line を省略すると、実行されようとしている行にセットされます。 -condition が指定されると、 -ブレークポイントの文に達する毎に condition が評価され、 -condition が真のときだけブレークします。 -ブレークポイントは実行文の先頭にだけセットできます。 -.Ip "b subname condition" 12 4 -ブレークポイントをサブルーチンの最初の実行文にセットします。 -.Ip "d line" 12 4 -ブレークポイントを削除します。 -line を省略すると、実行しようとしている行のブレークポイントが -削除されます。 -.Ip "D" 12 4 -すべてのブレークポイントを削除します。 -.Ip "a line command" 12 4 -行にアクションをセットします。 -バックスラッシュの直後に改行すれば、複数行コマンドも入力できます。 -.Ip "A" 12 4 -すべての行のアクションを削除します。 -.Ip "< command" 12 4 -デバッガがプロンプトを出す前に実行するアクションをセットする。 -バックスラッシュの直後に改行すれば、複数行コマンドも入力できます。 -.Ip "> command" 12 4 -コマンドを入力してスクリプト実行に移る時に、 -プロンプトの後に実行するアクションをセットします。 -バックスラッシュの直後に改行すれば、複数行コマンドも入力できます。 -.Ip "V package" 12 4 -パッケージ内のすべての変数をリストします。 -デフォルトは、メインパッケージです。 -.Ip "! number" 12 4 -デバッグコマンドの再実行を行ないます。 -number が省略されると、直前のコマンドを再実行します。 -.Ip "! -number" 12 4 -幾つか前のコマンドを再実行します。 -.Ip "H -number" 12 4 -最後の n 個のコマンドを表示します。 -1 文字より長いコマンドをリストします。 -number を省略すると、すべてをリストします。 -.Ip "q or ^D" 12 4 -終了します。 -.Ip "command" 12 4 -コマンドを perl の文として実行します。 -足りないセミコロンは補われます。 -.Ip "p expr" 12 4 -\*(L"print DB'OUT expr\*(R" と同じことです。 -DB'OUT ファイルハンドルは、どこに STDOUT がリダイレクトされているか -に関わらず、/dev/tty にオープンされます。 -.PP -デバッガを変更したいときは、perldb.pl ファイルを perl のライブラリ -から、カレントディレクトリにコピーして、必要に応じて修正して下さい。 -(コマンドラインに -I. を付けなければならないでしょう。) -初期化コードを含む .perldb ファイルを設定することで、カスタマイズが -できます。例えば、以下のようなエイリアスを作ることができます: -.nf - - $DB'alias{'len'} = 's/^len(.*)/p length($1)/'; - $DB'alias{'stop'} = 's/^stop (at|in)/b/'; - $DB'alias{'.'} = - 's/^\e./p "\e$DB\e'sub(\e$DB\e'line):\et",\e$DB\e'line[\e$DB\e'line]/'; - -.fi -.Sh "setuid スクリプト" -.I perl -は、安全な setuid スクリプトや setgid スクリプトを簡単に書けるように -デザインされています。 -スクリプトの各行が何回も置換されるシェルとは違って、 -.I perl -は、隠された \*(L"わけの判らないもの\*(R" を少なくして、より伝統的な -評価機構を使っています。 -それに加え、この言語は組み込み機構をより多く備えていて、目的を達成する -ために外部の (すなわち信頼できない可能性がある) プログラムに -頼らなければならないことは、ほとんどありません。 -.PP -パッチが当たっていない 4.2 または 4.3bsd カーネルでは、 -setuid スクリプトは本質的に危険をはらんでいますが、このカーネルの -機能は無効にできます。 -この場合、 -perl スクリプトに (無意味な) setuid/gid ビットが付いていると、 -.I perl -は setuid と setgid 機構をエミュレートできます。 -カーネルの機能が無効でない場合、 -.I perl -は setuid スクリプトが安全でないことをうるさく訴えるでしょう。 -カーネルの setuid スクリプト機能を無効にするか、そうでなければ -スクリプトに C のラッパをかぶせる必要があるでしょう。 -.PP -perl が setuid スクリプトを実行しているとき、明らかなトラップに -はまらないように特別な注意を払います。 -(いくつかの点で、perl スクリプトは同等の C プログラムより安全です。) -コマンドライン引数と環境変数と入力は、\*(L"汚れ\*(R" とみなされ、 -サブシェルを起動するコマンドや、ファイル、ディレクトリ、プロセスを -変更するようなコマンドの中では、直接にも間接的にも使われません。 -それ以前に汚れた値を参照したような式の中でセットされた変数も、 -また汚れていることなります。 -(汚れた値が変数に影響することが、たとえ論理的に不可能だとしても) -.br -例えば: -.nf - -.ne 5 - $foo = shift; # $foo は汚れています - $bar = $foo,\'bar\'; # $bar も汚れています - $xxx = <>; # 汚れています - $path = $ENV{\'PATH\'}; # 汚れていますが、以下を見て下さい - $abc = \'abc\'; # 汚れていません - -.ne 4 - system "echo $foo"; # 危険です - system "/bin/echo", $foo; # 安全です (shを使わないので) - system "echo $bar"; # 危険です - system "echo $abc"; # PATH がセットされるまで、 - # 安全ではありません - -.ne 5 - $ENV{\'PATH\'} = \'/bin:/usr/bin\'; - $ENV{\'IFS\'} = \'\' if $ENV{\'IFS\'} ne \'\'; - - $path = $ENV{\'PATH\'}; # 汚れていません - system "echo $abc"; # もはや汚れていません! - -.ne 5 - open(FOO,"$foo"); # OK - open(FOO,">$foo"); # 駄目です - - open(FOO,"echo $foo|"); # 駄目だけど.. - open(FOO,"-|") || exec \'echo\', $foo; # OK - - $zzz = `echo $foo`; # 危険。 zzz は汚れています。 - - unlink $abc,$foo; # 危険 - umask $foo; # 危険 - -.ne 3 - exec "echo $foo"; # 危険 - exec "echo", $foo; # 安全 (sh を使いません) - exec "sh", \'-c\', $foo; # 安全と見なされてしまう、嗚呼 - -.fi -汚れは、各スカラ値と関係するので、配列の要素は汚れているものも、 -汚れていないものもあります。 -.PP -何か安全でないことをしようとすると、 -\*(L"Insecure dependency\*(R" とか \*(L"Insecure PATH\*(R" というような -致命的エラーになります。 -それでも、危険なシステムコールや exec を書くことができますが、 -上記の最後の例のようなことを明示的に行なった場合に限るということを -覚えておいて下さい。 -サブパターンを参照することでも、汚れの機構を避けることが -できます \*(--\c -.I perl -は、$1, $2 などを使った部分文字列の参照では、自分のしていることを -知っているはずだと解釈します。 -次のようなパターンの場合です: -.nf - - $ARGV[0] =~ /^\-P(\ew+)$/; - $printer = $1; # 汚れていません - -.fi -これは、\ew+ がシェルのメタキャラクタにマッチしないので、 -まず安全です。 .+ を使うと危険でしょうが、 -.I perl -はそこまで調べないので、パターン指定には注意を払うべきです。 -これは、ファイル操作をしたいときに ($> を $< と同じにしなければ)、 -ユーザが与えるファイル名を汚さないための唯一の機構です。 -.PP -汚れた値を使うことを気にしないような他の操作でもトラブルを起こす場合が -あります。 -ユーザが与えたファイル名を扱うファイルテストは、慎重に使って下さい。 -できれば、$> = $< というようにセットした後で open して下さい。 -.I perl -では、汚れたファイルをオープンして読みだすことが制限されないので、 -出力する内容については注意して下さい。 -汚れの機構は、ばかな間違いを防ぐように作られているのであって、 -考える必要がなくなるようにするためではありません。 -.SH 環境 -.Ip HOME 12 4 -chdir に引数がないときに使われます。 -.Ip LOGDIR 12 4 -chdir に引数が無く、HOME がセットされていないときに使われます。 -.Ip PATH 12 4 -サブプロセスを実行するとき、および \-S が使われたときは -スクリプトを探す際に使われます。 -.Ip PERLLIB 12 4 -標準ライブラリやカレントディレクトリを見る前に、perl ライブラリ -ファイルを探すディレクトリのコロン区切りのリストです。 -.Ip PERLDB 12 4 -デバッガコードを得るのに使われるコマンドのことです。セットされて -いないと、 -.br - - require 'perldb.pl' - -を使います。 -.PP -これらを別にすると、 -.I perl -は、スクリプト実行時と子プロセスに渡された環境変数しか使いません。 -しかし、setuid で走っているスクリプトは、だまされないようにするために -何より先に以下の行を実行しておいた方が良いでしょう: -.nf - -.ne 3 - $ENV{\'PATH\'} = \'/bin:/usr/bin\'; # 必要なパスを入れましょう - $ENV{\'SHELL\'} = \'/bin/sh\' if $ENV{\'SHELL\'} ne \'\'; - $ENV{\'IFS\'} = \'\' if $ENV{\'IFS\'} ne \'\'; - -.fi -.SH 作者 -Larry Wall <lwall@netlabs.com> -.br -MS-DOS への移植 Diomidis Spinellis <dds@cc.ic.ac.uk> -.SH 関連ファイル -/tmp/perl\-eXXXXXX -.B \-e -コマンドのためのテンポラリファイル -.SH 関連項目 -a2p awk から perl への変換プログラム -.br -s2p sed から perl への変換プログラム -.SH 診断 -コンパイルエラーは、エラーの行番号と次にあるべきトークンか、または -調べられたトークンの型を教えてくれます。 -( -.B \-e -スイッチで -.I perl -に渡されたスクリプトの場合、各 -.B \-e -が一行に数えられます。) -.PP -setuid スクリプトには、更に \*(L"Insecure dependency\*(R" のような -エラーメッセージを生じるという制約があります。 -setuid スクリプトのセクションを参照して下さい。 -.SH トラップ -.IR awk -に慣れたユーザは、以下のことに特に注意を払わなければなりません: -.Ip * 4 2 -.I perl -では、(ブロックの終わりを除く) すべての単文の後にセミコロンが必要です。 -改行は文の区切りではありません。 -.Ip * 4 2 -if や while には、中括弧 {} が必要です。 -.Ip * 4 2 -.IR perl -では、変数は $ か @ で始まります。 -.Ip * 4 2 -配列の添字は、$[ をセットしなければ 0 で始まります。 -substr() と index() の文字位置も同様です。 -.Ip * 4 2 -配列の添字が数字であるか文字列であるかを決めなければなりません。 -.Ip * 4 2 -連想配列は、参照するだけでは存在することになりません。 -.Ip * 4 2 -比較の際には、文字列比較か、数値比較かを決めなければなりません。 -.Ip * 4 2 -入力行を読み込んだだけでは、split は行なわれません。自分で split して、 -配列に入れなければなりません。 -そして、 -.I split -演算子は、異なる引数を取ります。 -.Ip * 4 2 -現在の入力行は、通常 $0 ではなく $_ です。 -一般に改行コードは除かれません。 -($0 は実行されたプログラム名です。) -.Ip * 4 2 -$<数字> は、フィールドの参照ではありません\*(--最後にマッチした -パターンの部分文字列を参照します。 -.Ip * 4 2 -.I print -文は $, と $\e を設定しなければ、フィールド区切りやレコード区切りを -出力しません。 -.Ip * 4 2 -ファイルに出力する前には、オープンしなければなりません。 -.Ip * 4 2 -範囲演算子は \*(L".\|.\*(R" であって、コンマではありません。 -(コンマ演算子は、C と同じ動作です。) -.Ip * 4 2 -マッチ演算子は、\*(L"~\*(R" でなく \*(L"=~\*(R" です。 -(\*(L"~\*(R" は C と同じく補数の演算子です。) -.Ip * 4 2 -指数演算子は、\*(L"^\*(R" でなく \*(L"**\*(R" 演算子です。 -(\*(L"^\*(R" は、C と同じく XOR 演算子です。) -.Ip * 4 2 -結合演算子は \*(L".\*(R" であり、ヌル文字列ではありません。 -(ヌル文字列を使うと 3 番目の / が除算演算子と解釈されるため、 -\*(L"/pat/ /pat/\*(R" が解析不能になります。\*(--トークン解析は、実際 -のところ /, ?, < のような演算子ではコンテキストにやや敏感です。 -そして、実は、. 自身は数字の始めになり得ます。) -.Ip * 4 2 -.IR next , -.IR exit, -.I continue -の動作は異なります。 -.Ip * 4 2 -次の変数の動作は異なります。 -.nf - - Awk \h'|2.5i'Perl - ARGC \h'|2.5i'$#ARGV - ARGV[0] \h'|2.5i'$0 - FILENAME\h'|2.5i'$ARGV - FNR \h'|2.5i'$. \- 何か - FS \h'|2.5i'(何でもよい) - NF \h'|2.5i'$#Fld かそのようなもの - NR \h'|2.5i'$. - OFMT \h'|2.5i'$# - OFS \h'|2.5i'$, - ORS \h'|2.5i'$\e - RLENGTH \h'|2.5i'length($&) - RS \h'|2.5i'$/ - RSTART \h'|2.5i'length($\`) - SUBSEP \h'|2.5i'$; - -.fi -.Ip * 4 2 -疑わしいときは、 -.I awk -のプログラムを a2p に通して、出て来たもの見て下さい。 -.PP -C に洗脳されたプログラマは、次のことを特に心に留めておかなければなりま -せん: -.Ip * 4 2 -if や while には、中括弧 {} が必要です。 -.Ip * 4 2 -\*(L"else if\*(R" でなく、\*(L"elsif\*(R" を使わなければなりません。 -.Ip * 4 2 -.I break -や -.I continue -は、それぞれ -.I last -や -.IR next -になります。 -.Ip * 4 2 -switch 文はありません。 -.Ip * 4 2 -.IR perl -では、 -変数は $ か @ で始まります。 -.Ip * 4 2 -printf には * は実装されていません。 -.Ip * 4 2 -コメントは、/* でなく # で始まります。 -.Ip * 4 2 -何者のアドレスを得ることもできません。 -.Ip * 4 2 -ARGV は大文字でなければなりません。 -.Ip * 4 2 -link, unlink, rename 等のシステムコールは、成功時に 0 でな -く、非 0 を返します。 -.Ip * 4 2 -シグナルハンドラは、数字ではなくシグナル名を扱います。 -.PP -経験豊かな -.I sed -プログラマは、次のことを心に留めておかなければなりません: -.Ip * 4 2 -置換の後方参照では、\e でなく $ を使います。 -.Ip * 4 2 -パターンマッチメタキャラクタ (, ), | の前にはバックスラッシュをつけません。 -.Ip * 4 2 -範囲演算子は、コンマでなく .\|. です。 -.PP -鋭い shell プログラマは、次のことを心に留めておかなければなりません: -.Ip * 4 2 -`` 演算子のコマンド内では、'' にくくられていないと変数置換が行なわれます。 -.Ip * 4 2 -`` 演算子は csh と違って、戻り値の変換をしません。 -.Ip * 4 2 -シェル (特に csh) は、各コマンド行で複数レベルの置換を行ないます。 -.I perl -は、"", ``, <>, // のような決まった構造においてのみ、置換が行なわれます。 -.Ip * 4 2 -シェルは、スクリプトを一度に少しだけ解釈します。 -.I perl -は、すべてのプログラムを実行前にコンパイルします。 -.Ip * 4 2 -引数は、$1, $2,.. ではなく、@ARGV を介して利用できます。 -.Ip * 4 2 -環境は、変数として自動的に利用可能とはなりません。 -.SH 訂正と追加 -perl の本、 -.I Programming\0Perl -には以下のような省略と抜けがあります。 -.PP -5 ページの例 -.nf - - eval "/usr/bin/perl - -は、以下でなければいけません。 - - eval "exec /usr/bin/perl - -.fi -.PP -195 ページの System V の sum 相当のプログラムは、極めて小さなファイル -でしか動作しません。大きなファイルでは、以下を使って下さい。 -.nf - - undef $/; - $checksum = unpack("%32C*",<>) % 32767; - -.fi -.PP -alarm と sleep に関する記述は、シグナル SIGALARM と言っていますが、 -SIGALRM でなければなりません。 -.PP -$/ の初期値をセットする -.B \-0 -スイッチは、この本が出版後に perl に追加されました。 -.PP -.B \-l -スイッチでは、自動行末処理を行なうようになっています。 -.PP -qx// 構造は バックスラッシュ `` と同義です。 -.PP -$0 は、 -.I ps (1) -の引数表示を変更するために、代入可能となりました。 -.PP -新しい @###.## フォーマットは、フォーマットの記述から -偶然省略されました。 -.PP -s///ee が置換式の多重評価を生じることが、出版時に -知られていませんでした。これは、仕様と解釈されるべきです。 -.PP -(LIST) x $count は、配列の繰り返しを実行します。 -.PP -正規表現には、括弧の数に制限がなくなっています。 -.PP -ダブルクォート "" のコンテキストでは、更に以下のエスケープがサポート -されています: -\ee, \ea, \ex1b, \ec[, \el, \eL, \eu, \eU, \eE -最後の 5 つの制御コードは、大文字小文字の変換です。 -.PP -.B $/ -変数には、複数の区切り文字をセットできます。 -.PP -通常のパターンマッチに g 修飾子が使えます。 -これにより、文字列から複数のマッチを検索することで、 -パターンマッチを繰り返します。 -.PP -$^T を除いて、すべての $^X 変数が増えています。 -.PP -FILEHANDLE に対するデフォルトのページ先頭フォーマットは、top でなく -FILEHANDLE_TOP になっています。 -.PP -eval {} と sort {} 構造は、version 4.018 で追加されました。 -.PP -pack と unpack の v と V (リトルエンディアン) テンプレートオプションは、 -vertion 4.019 で追加されました。 -.SH バグ -.PP -.I perl -型のキャスト、atof()、sprintf() のようないろいろな操作は、 -マシンの定義に左右されます。 -.PP -あるストリームで、stdio が各 read や write の間に seek や eof を -必要とする場合、 -.IR perl -はそのようにします。 -(これは、sysread() と syswrite() には適用されません。) -.PP -どの組み込みデータタイプも勝手なサイズ制限は持っていません -(メモリサイズは別です) が、それでもいくらかは限界はあります: -識別子は 255 文字以上にはできませんし、 -\-S を使うとき、PATH の要素は 255 を超えてはいけません。 -正規表現は、内部的に 32767 バイトを超えられません。 -.PP -.I perl -は、実は -病理学的折衷主義のがらくたリスター (Pathologically Eclectic Rubbish Lister) -なんですが、私がそう言ったとは誰にも話さないで下さい。 -.rn }` '' diff --git a/ja_JP.eucJP/man/man1/pkg_update.1 b/ja_JP.eucJP/man/man1/pkg_update.1 deleted file mode 100644 index bb66b56917..0000000000 --- a/ja_JP.eucJP/man/man1/pkg_update.1 +++ /dev/null @@ -1,84 +0,0 @@ -.\" -.\" Copyright 2000 Paul Richards -.\" -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" %FreeBSD: src/usr.sbin/pkg_install/update/pkg_update.1,v 1.3.2.1 2001/08/16 15:56:16 ru Exp % -.\" -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/pkg_update.1,v 1.4 2001/08/18 23:50:23 horikawa Exp $ -.\" -.Dd December 27, 2000 -.Dt PKG_UPDATE 1 -.Os -.Sh 名称 -.Nm pkg_update -.Nd インストールされている package を更新する -.Sh 書式 -.Nm -.Op Fl nv -.Op Fl r Ar oldpkg -.Ar newpkg.tgz -.Sh 解説 -.Nm -コマンドは既にインストールされている package -(訳注: FreeBSD の package system におけるパッケージを指す場合にこう表記します) -を更新するために用います。 -.Nm -は、置きかえ前のバージョンが持っていた依存関係を、 -新しくインストールされるバージョンに渡す処理も行います。 -通常 -.Nm -は、現在インストールされているすべての package のバージョンを、 -より新しいバージョンで置き換えるために用います。 -あるいは -.Fl r -オプションでバージョンを指定すれば、 -特定の package を古いバージョンに戻すこともできます。 -.Pp -以下のオプションが利用できます: -.Bl -tag -width indent -.It Fl n -動作を表示しますが、実際には実行しません。 -.It Fl r Ar oldpkg -package を指定したバージョンのものに置き換えます。 -通常 -.Nm -はインストールされている package をすべて新しいバージョンに -置き換えようとします。これは常に望ましい動作であるとは限りません。 -なぜなら package によっては、 -複数のバージョンが同時にインストールされていることもありうるからです。 -このオプションを指定すると、 -特定のバージョンに置き換えることができるようになります。 -.It Fl v -詳細な出力を行います。 -.El -.Sh 関連項目 -.Xr pkg_add 1 , -.Xr pkg_create 1 , -.Xr pkg_delete 1 , -.Xr pkg_info 1 , -.Xr pkg_version 1 -.Sh 作者 -.An Paul Richards Aq paul@FreeBSD.org -.Sh バグ -今のところ既知のものはありません。 diff --git a/ja_JP.eucJP/man/man1/rdist.1 b/ja_JP.eucJP/man/man1/rdist.1 deleted file mode 100644 index 8cbc5f7d59..0000000000 --- a/ja_JP.eucJP/man/man1/rdist.1 +++ /dev/null @@ -1,449 +0,0 @@ -.\" Copyright (c) 1985, 1990, 1993 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the University of -.\" California, Berkeley and its contributors. -.\" 4. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" @(#)rdist.1 8.3 (Berkeley) 3/17/94 -.\" %FreeBSD: src/usr.bin/rdist/rdist.1,v 1.13.2.4 2001/12/21 10:07:20 ru Exp % -.\" -.\" $FreeBSD$ -.\" -.Dd March 17, 1994 -.Dt RDIST 1 -.Os -.Sh 名称 -.Nm rdist -.Nd リモートファイル配布プログラム -.Sh 書式 -.Nm -.Op Fl nqbRhivwyD -.Op Fl P Ar rshcmd -.Op Fl f Ar distfile -.Op Fl d Ar var=value -.Op Fl m Ar host -.Op Ar name ...\& -.Nm -.Op Fl nqbRhivwyD -.Op Fl P Ar rshcmd -.Fl c -.Ar name ...\& -.Oo Ar login Ns @ Oc Ns Xo -.Ar host Ns Op : Ns Ar dest -.Xc -.Sh 解説 -.Nm -は、複数のホストに対し、ファイルの内容を同一に維持するためのプログラムです。 -本プログラムによるファイルコピーでは、可能な限り所有者、グループ、 -アクセスモード、そして更新時刻を保存しようとします。 -そして、現在実行中のプログラムの更新も可能です。 -.Nm -は、コマンドを -.Ar distfile -から読み出し、その内容に従ってファイルやディレクトリの更新を制御します。 -.Pp -第 1 の書式特有のオプション: -.Pp -.Bl -tag -width indent -.It Fl -.Ar distfile -に -.Sq Fl -を指定した場合、標準入力からデータを入力します。 -.It Fl f Ar distfile -指定した -.Ar distfile -を使用します。 -.El -.Pp -.Fl f -オプションも -.Sq Fl -オプションも指定されない場合には、本プログラムは最初に -.Dq Pa distfile -を、次に -.Dq Pa Distfile -を探し、入力として使用します。 -コマンド行にて何の指定も与えられない場合には、 -.Nm -は、 -.Ar distfile -に記述されたすべてのファイルとディレクトリを更新します。 -それ以外の場合では、引数は、更新対象となるファイル名あるいは -実行されるコマンドのラベルと解釈されます。 -ラベルやファイル名が衝突する場合には、すべてラベルとして取り扱います。 -これらの名前は、指定したコマンドを用いて指定したファイルを更新するのに -用いられます。 -.Pp -第 2 の書式特有のオプション: -.Pp -.Bl -tag -width Fl -.It Fl c -.Nm -に、残りの引数を小規模の -.Ar distfile -として解釈するように指示します。 -.Pp -このオプションを使用した場合と等価な distfile は、以下のようになります。 -.Pp -.Bd -ragged -offset indent -compact -.Pq Ar name ...\& -.Li -> -.Op Ar login Ns @ -.Ar host -.Bd -ragged -offset indent -compact -.Li install -.Op Ar dest ; -.Ed -.Ed -.El -.Pp -両方の書式に共通のオプション: -.Pp -.Bl -tag -width Ic -.It Fl P Ar rshcmd -.Xr rsh 1 -と同様な機能を持つ他のプログラムをリモートサーバへの転送に使用します。 -指定したプログラムはリモートサーバへバイナリ透過な経路を使用できる必要が -あり、コマンド引数の書式が -.Xr rsh 1 -と互換でなければなりません。 -.It Fl d Ar var=value -.Ar var -に対して -.Ar value -を代入することを定義します。 -.Fl d -オプションは、変数を定義したり、 -.Ar distfile -中の変数を変更したりするのに用いられます。 -.Ar value -には、空白文字列、名前、もしくは括弧で囲まれて、タブやスペースで区切ら -れた名前の列挙が指定可能です。 -.It Fl h -シンボリックリンクを追いかけます。リンクしてあるファイルの場合、リンクファ -イルそのものでなく、リンク先にある実体をコピーします。 -.It Fl i -解決できないリンクを無視します。 -.Nm -は、通常はリンクファイルについてもコピーを行ない、リンクが解決出来ない場合 -には、その旨をユーザに通知します。 -.It Fl m Ar host -ファイルを更新するホストを制限します。 -複数の -.Fl m -引数を指定する事で、 -.Ar distfile -に記述のあるホスト名の中から複数のホスト名を選択して与えることが可能です。 -.It Fl n -実行しないで、コマンド自身を表示します。本オプションは -.Ar distfile -のデバッグに有効です。 -.It Fl q -QUIETモードに入ります。更新されるファイルについては、通常は標準出力に -表示されますが、 -.Fl q -オプションはこの出力を抑制します。 -.It Fl R -無関係なファイルを削除します。ディレクトリを更新する場合に、 -リモートホスト上に存在するファイルが、配布元のディレクトリ中に存在しないなら、 -該当するファイルを削除します。本オプションは、配布元と配布先で完全にディ -レクトリ配下の内容を一致させたい場合に有効です。 -.It Fl v -すべてのホストのファイルが最新の物であるかの確認を行ないます。すべての -古いファイルについては一覧が表示されますが、そのファイルが変更されたり、 -そのファイルに関してシステムからメールが届いたりすることはありません。 -.It Fl w -WHOLE モードを有効にします。指定されたファイル名全体が、配布先ディレクトリ名の -後に付加されます。通常は、ファイル名からディレクトリ名を取り除いた -最後の部分のみがファイル名を変更する時に使われます。 -本オプションは、ディレクトリ構造をフラットにせず、配布元のディレクトリ -構造をそのまま配布先に持っていきたい場合に用いられます。例えば、 -( dir1/f1 dir2/f2 )のように表されるファイルを、dir3 というディレクトリに -配布した場合、配布先では dir3/f1 や dir3/f2 ではなく、 -dir3/dir1/f1 や dir3/dir2/f2 が作成されます。 -.It Fl y -YOUNGERモードを有効にします。通常、ファイルの更新は、 -.Ar mtime -と -.Ar size -( -.Xr stat 2 -参照) -が一致しない場合に行なわれます。しかし、 -.Fl y -オプションが有効になっている場合には、 -.Nm -は、配布元のファイルより新しいファイルは更新しません。 -通常本オプションは、他のホストに存在する、より新しいファイルを置き換えない -目的で用いられます。 -配布元より新しいファイルが配布先にあった場合には、その旨を通知する -メッセージが表示されます。 -.It Fl D -デバッグモード。 -.El -.Pp -.Ar distfile -は、コピーされるファイル、配布先ホスト、そして更新のための手順を指定 -するエントリを含みます。各エントリは、以下の形式のいずれかに分類され -ます。 -.Pp -.Bd -literal -offset indent -compact -<variable name> `=' <name list> -[label:]<source list> `\->' <destination list> <command list> -[label:]<source list> `::' <time_stamp file> <command list> -.Ed -.Pp -一番目の形式は、値を定義するのに用いられます。 -二番目の形式は、他のホストへファイルを配布するのに用いられます。 -三番目の形式は、指定した日付以降に更新されたファイルの一覧を作成するのに -用いられます。 -.Ar source list -は、配布元のファイルやディレクトリの一覧を指定します。 -.Ar destination list -は、ファイルの配布先のホスト一覧です。配布元ファイルリスト (source -list) 中の各ファイルが、更新を行なおうとしているホストにおいて古いもの -である(二番目の形式)か、または、指定のファイルのタイムスタンプより新し -い場合(三番目の形式)には、変更対象リストに追加されます。 -.Pp -ラベルの使用は、任意です。ラベルについては、部分的な変更を行う場合 -に、コマンドを識別するために用いられます。 -.Pp -改行、タブ、そして空白は、セパレータとしてのみ用いられ、それ以外の場で -用いられた場合には無視されます。コメントは、`#' で始まり改行で終ります。 -.Pp -`$' で始まり、1文字もしくは `{''}' でくくられた名前の変数については、処理中に -その値に置き換えられます(最後に出てくる例を参照して下さい)。 -.Pp -配布元ファイルリストと配布先ホストリストの一覧は、以下の形式を取ります。 -.Bd -literal -offset indent -<名前> -.Ed -または -.Bd -literal -offset indent -compact -`(' <空白で区切られた 0 個以上の名前> `)' -.Ed -.Pp -シェルのメタ文字であるところの `[', `]', `{', `}', `*', そして `?' -は、(配布元のホスト上でのみ) -.Xr csh 1 -同様に解釈され、展開されます。 -これは、バックスラッシュを用いて回避する事が出来ます。 -`~' 文字もまた、 -.Xr csh 1 -同様に展開されますが、配布元と配布先のホストで別々に展開されます。 -.Fl w -オプションが `~' ではじまるファイル名とともに用いられた場合、ホームディ -レクトリを除くすべてのファイル/ディレクトリ名が配布先の名前に加えられます。 -`/' や `~' 以外の文字ではじまるファイル名は、配布先のユーザのホームディ -レクトリをルートディレクトリとみなして、指定されたファイルの名前を -追加して配布先でのファイル名を作成します。 -.Pp -コマンドリストは、以下の形式に従った、0 個以上のコマンドからなります。 -.Bd -ragged -offset indent -compact -.Bl -column except_patx pattern\ listx -.It "`install' <options> opt_dest_name `;' -.It "`notify' <name list> `;' -.It "`except' <name list> `;' -.It "`except_pat' <pattern list> `;' -.It "`special' <name list> string `;' -.El -.Ed -.Pp -.Ic install -コマンドは、古いファイルやディレクトリをコピーするのに用いられます。 -各配布元のファイルは、配布先ホストリスト中の各ホストへコピーさ -れます。ディレクトリも同様にして、再帰的にコピーされます。 -.Ar opt_dest_name -は、ファイル名を変更するための任意的なパラメータです。 -.Ic install -コマンドがコマンドリストに存在しない場合や、配布先での -ファイル名が指定されていない場合、配布元のファイル名がそ -のまま配布先でのファイル名として採用されます。 -パス名に含まれるディレクトリが配布先のホスト上に存在しない -場合には、そのディレクトリを作成します。 -不慮の事故を回避するために、配布先のホスト上に空でないディレクトリがあっ -ても、通常のファイルやシンボリックリンクに置き換えたりはしません。 -しかし、`\-R'オプションを付加して実行した場合には、配布元のディレクト -リに当該ファイルが存在しなければ、空でないディレクトリでも削除されます。 -.Ar option -には、`\-R', `\-h', `\-i', `\-v', `\-w', `\-y', `\-b' -があり、それらが配布元ファイルリストに記述されたファイルに対 -してのみ適用される事を除いて、コマンドライン中に指定した事と同じ意味と -なります。 -配布先ホストにおけるログイン名は、配布元でのログイン名と同じですが、配 -布先のログイン名が ``login@host" という形式で指定されている場合にはこの -限りではありません。 -.Pp -.Ic notify -コマンドは、更新されたファイル一覧(および、発生した何らかのエラー)をメール -によって通知する場合に用いられます。 -指定のメールアドレス中に `@' がない場合には、配布先のホスト名がメールア -ドレスに付加されます(例: name1@host, name2@host, ...)。 -.Pp -.Ic except -コマンドは、 -.Ar name list -に列挙されているファイルを除き、配布元ファイルリストに記述されているすべての -ファイルを更新するのに用いられます。 -本コマンドは、特定ファイルを除くすべてのファイルをコピーするのに用い -られます。 -.Pp -.Ic except_pat -コマンドは、 -.Ic except -コマンドと似ていますが、 -.Ar pattern list -として正規表現を用いたリストを指定できるところが異なります -(詳細については、 -.Xr re_format 7 -を参照して下さい)。 -ファイル名に含まれる文字列が、正規表現のパターンに一致すると、そのファ -イルは無視されます。 -`\e' が文字をクオートする事に注意して下さい。正規表現に含めるためには、 -2 個続ける必要があります。 -.Ar pattern list -の中の変数は展開されますが、シェルのファイルパターンマッチ方法とは異なります。 -`$' を含めるためには、`\e' を用いてエスケープする必要があります。 -.Pp -.Ic special -コマンドは、 -.Ar name list -にて指定されたファイルを更新、または、コピーした後に、配布先の -ホスト上で実行される -.Xr sh 1 -コマンドを指定するのに用いられます。 -.Ar name list -が省略された場合には、シェルコマンドは各ファイルの更新が終了する度に -実行されます。シェル変数 `FILE' には、 -文字列 -.Ar string -で指定したコマンドを実行する前に、直前に処理したファイル名が格納されます。 -文字列 -.Ar string -を、`"'で囲む事で、 -.Ar distfile -において複数行にわたって記述する事が出来ます。 -シェルに対する複数の実行コマンドは、`;'で区切られる必要があります。 -指定されたコマンドは、ファイルの更新を行なおうとしている配布先ホストの -当該ユーザのホームディレクトリで実行されます。 -.Ar special -コマンドは、プログラムがファイルを更新した後にプライベートデータベース -を再構築する用途をはじめとして、いろいろな場面で用いる事が出来ます。 -.Pp -以下に示す例は簡単な一例です。 -.Bd -literal -offset indent -HOSTS = ( matisse root@arpa ) - -FILES = ( /bin /lib /usr/bin /usr/games -\t/usr/include/{*.h,{stand,sys,vax*,pascal,machine}/*.h} -\t/usr/lib /usr/man/man? /usr/ucb /usr/local/rdist ) - -EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc -\tsendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont ) - -${FILES} -> ${HOSTS} -\tinstall -R ; -\texcept /usr/lib/${EXLIB} ; -\texcept /usr/games/lib ; -\tspecial /usr/lib/sendmail "/usr/lib/sendmail -bz" ; - -srcs: -/usr/src/bin -> arpa -\texcept_pat ( \e\e.o\e$ /SCCS\e$ ) ; - -IMAGEN = (ips dviimp catdvi) - -imagen: -/usr/local/${IMAGEN} -> arpa -\tinstall /usr/local/lib ; -\tnotify ralph ; - -${FILES} :: stamp.cory -\tnotify root@cory ; -.Ed -.Sh 関連ファイル -.Bl -tag -width /tmp/rdist* -compact -.It Pa distfile -入力コマンドファイル -.It Pa /tmp/rdist* -更新リストのために用いられる一時ファイル -.El -.Sh 関連項目 -.Xr csh 1 , -.Xr sh 1 , -.Xr stat 2 , -.Xr re_format 7 -.Sh 歴史 -.Nm -コマンドは、 -.Bx 4.3 -から登場しました。 -.Sh 診断 -.Nm -のバージョン不一致についての通知は、実際にはシェルを起動する際の -何らかの問題に起因して発生します。例えば、ユーザの所属グループがあまり -多すぎるなどが挙げられます。 -.Pp -.Nm -は、 -.Xr rcmd 3 -タイプのリモートサービス実行が、静かに成功することに依存します。 -よくある誤りとしては、非対話の初期化スクリプト、例えば -.Pa .cshrc -が出力を行なってしまうことがあります -(出力を行う他のプログラムを実行するものの、 -そのプログラムが端末に接続されていないということもあります -- -よくある原因が -.Xr stty 1 -です)。 -このような余計な出力のために、 -.Nm -が失敗して次のようなエラーメッセージが表示されます: -.Pp -.Dl rdist: connection failed: version numbers don't match -.Sh バグ -配布元ファイルは、 -.Nm -コマンドが起動される配布元ホストに存在しなければなりません。 -.Pp -ディレクトリ配下のすべてのファイルが更新された後に -.Ic special -コマンドを実行 -するのは困難です。 -.Pp -変数の置換は、name list に対してのみ働きます。より一般的なマクロ -の機能があるべきでしょう。 -.Pp -.Nm -は、負 (1970 年 1 月 1 日以前の日付)の mtime を持つファイルに対してのアクセスを -行うと異常終了します。 -.Pp -空でないディレクトリを通常ファイルやシンボリックリンクで置換できる、 -`force' オプションがあるべきでしょう。内容自体は一致しているファイルのモード -や所有者を更新する方法も必要でしょう。 diff --git a/ja_JP.eucJP/man/man1/skey.1 b/ja_JP.eucJP/man/man1/skey.1 deleted file mode 100644 index b574e69cef..0000000000 --- a/ja_JP.eucJP/man/man1/skey.1 +++ /dev/null @@ -1,88 +0,0 @@ -.\" @(#)skey.1 1.1 10/28/93 -.\" %FreeBSD: src/lib/libskey/skey.1,v 1.4.2.2 2001/12/21 10:07:09 ru Exp % -.\" $FreeBSD$ -.\" -.Dd October 28, 1993 -.Dt KEY 1 -.Os -.Sh 名称 -.Nm S/key -.Nd "コンピュータシステムへのアクセスにワンタイムパスワードを使用するための手続き" -.Sh 解説 -.Nm -はコンピュータシステムへのアクセスを認証する際にワンタイムパスワードを -使用するための手続きです。 -MD4 アルゴリズムにより変換された 64 ビットの情報を使用します。 -ユーザは安全性が保証されたコンピュータで生成された 6 つの英単語の -形式で 64 ビットのパスワードを供給します。 -.Nm -プログラム -.Nm key -の使用例 -.Bd -literal -offset indent ->key 99 th91334 -Enter password: <あなたのシークレットパスワードをここに入力します> -OMEN US HORN OMIT BACK AHOY -> -.Ed -.Pp -.Nm -システムの部品となるプログラムは -.Nm keyinit , key , keyinfo -です。 -あなたの ID をセットアップするために -.Nm keyinit -が使用されます。 -ワンタイムパスワードを得るために毎回 -.Nm key -が使用されます。 -.Nm -データベースから情報を取り出すために -.Nm keyinfo -が使用されます。 -.Pp -.Nm keyinit -を実行すると、あなたのシークレットパスワードが -システムに通知されます。 -.Nm key -を実行するとあなたのシークレットパスワードを要求して、 -ワンタイムパスワードが生成されます。 -もしもあなたが -.Nm key -を実行する時にパスワードを打ち間違えると、 -何の問題も指摘されずに -うまく動かないパスワードのリストを得ることになってしまいます。 -.Pp -パスワードシーケンス番号は 99 から減算されていきます。 -もしあなたがこのことを知らないと、 -.Nm key -コマンドの使用法は -わかりにくいことでしょう。 -.Pp -.Nm key -プログラムがパスワードを大文字で与えたとしても、 -小文字でパスワードを入力することができます。 -.Pp -.Tn Macintosh -と汎用 -.Tn PC -で使用することができます。 -.Pp -.Fx -では、 -.Pa /etc/skey.access -により -どのホストやネットワークからのアクセスに対して -.Nm -パスワードの -使用義務を負わせるかを制御することができます。 -.Sh 関連項目 -.Xr keyinit 1 , -.Xr key 1 , -.Xr keyinfo 1 , -.Xr skey.access 5 -.Sh 作者 -.An Phil Karn -.An Neil M. Haller -.An John S. Walden -.An Scott Chasin diff --git a/ja_JP.eucJP/man/man1/uuconv.1 b/ja_JP.eucJP/man/man1/uuconv.1 deleted file mode 100644 index 8af67125e7..0000000000 --- a/ja_JP.eucJP/man/man1/uuconv.1 +++ /dev/null @@ -1,55 +0,0 @@ -''' %FreeBSD: src/gnu/libexec/uucp/uuconv/uuconv.1,v 1.2 1999/08/27 23:33:53 peter Exp % -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/uuconv.1,v 1.4 2001/05/14 01:07:30 horikawa Exp $ -.TH uuconv 1 "Taylor UUCP 1.06" -.SH 名称 -uuconv \- UUCP 設定ファイルの変換 -.SH 書式 -.B uuconv -\-i type \-o type [-p program] [standard UUCP options] -.SH 解説 -.B uuconv -プログラムは UUCP 設定ファイルを、あるフォーマットから別のフォーマットへと -変換するために使われます。これは、古い UUCP パッケージから乗り換えようと -している -管理者にとって便利でしょう。Taylor UUCP は古いフォーマットの設定ファイル -を読んで利用することができますが、古いフォーマットを -使っている場合には選択できない新機能があります。 -.PP -読み込むファイルの種類は `-i' もしくは `--input' オプションで指定します。 -書き出すファイルの種類は `-o' もしくは `--output' オプションで指定します。 -.PP -サポートされている設定ファイルの種類は `taylor'、`v2' と `hdb' です。 -`taylor' 設定ファイルの解説は(Taylor UUCP texinfo ドキュメントの)*Note -Configuration Files:: を参照してくだ -さい。他の形式は、伝統的な UUCP パッケージで利用されているも -ので、このマニュアルでは解説していません。 -.PP -`v2' もしくは `hdb' 形式の設定ファイルはコンパイル時に指定されたディレク -トリから読み込まれます (`Makefile' 中の `oldconfidir' で指定します)。 -`taylor' 形式の設定ファイルはデフォルトではコンパイル時に指定されたディ -レクトリから読み込まれますが、これは標準オプションである `-I' もしくは -`--config' オプションで上書き指定することができます。 -.PP -設定ファイルの出力は -.B uuconv -が実行されているディレクトリに書かれます。 -.PP -入力ファイルの情報によっては、指定した出力形式で表現できない場合もあります。 -そのような情報については -.B uuconv -は何も言わずに捨ててしまいます。ですから、 -.B uuconv -の出力は、使用する前に注意深くチェックしてください。 -このために -.B uuchk(8) -プログラムを使うことができます。 -.PP -デフォルトでは `uucp' 設定ファイルだけが変換されますが、`-p' もしくは -`--program' オプションを使うことで、指定した `cu' の設定情報も変換されま -す。 -.SH 関連項目 -cu(1), uucp(1) -.SH 作者 -Ian Lance Taylor (ian@airs.com). -このマニュアルは Taylor UUCP 1.06 texinfo ドキュメントに基づいています。 - diff --git a/ja_JP.eucJP/man/man1/uucp.1 b/ja_JP.eucJP/man/man1/uucp.1 deleted file mode 100644 index a3848631cb..0000000000 --- a/ja_JP.eucJP/man/man1/uucp.1 +++ /dev/null @@ -1,218 +0,0 @@ -''' %FreeBSD: src/gnu/libexec/uucp/uucp/uucp.1,v 1.7 1999/08/27 23:33:55 peter Exp % -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/uucp.1,v 1.5 2001/05/14 01:07:30 horikawa Exp $ -.TH uucp 1 "Taylor UUCP 1.06" -.SH 名称 -uucp \- Unix 間のコピー -.SH 書式 -.B uucp -[ options ] source-file destination-file -.PP -.B uucp -[ options ] source-file... destination-directory -.SH 解説 -.I uucp -コマンドはシステム間でのファイルのコピーを行います。各 -.I file -引数は、ローカルマシンのパス名か、 -.IP -system!path -.LP -の形式のリモートシステムのファイル名のどちらかになります。 -第一の書式では、最初のファイルの内容が二番目のファイルにコピーされます。 -第二の書式では、全てのソースファイルが宛先ディレクトリにコピーされます。 - -.I system1 -経由で -.I system2 -へ、あるいは、 -.I system1 -経由で -.I system2 -から転送されるファイルは、 -.IP -system1!system2!path -.LP -という形で表す事ができます。 - -.B \-W -あるいは -.B \--noexpand -オプションがなければ、/ あるいは ~ で始まらないパス名はその前に -カレントディレクトリのパス名が付けられます。 -このパスはリモートシステムに存在している必要はありません。~ のみで始まる -パス名は UUCP パブリックディレクトリと解釈され、~name で始まる -パス名は name というユーザのホームディレクトリと -解釈されます。~ は、適切なシステムで解釈されます。ある種のシェルは、~ を -.I uucp -が解釈する前にローカルのホームディレクトリと解釈してしまいます。 -これを避けるためには、~ をクォートしなければいけません。 - -シェルのメタキャラクタの ? * [ ] は、ローカルのシェルが解釈して -しまわない様にクォートされていれば、適切なシステムで解釈されます。 - -実際のコピーはすぐには実行されず、 -.I uucico -(8) デーモンのキューに蓄積されます。 -.B \-r -あるいは -.B \-\-nouucico -オプションがなければ、デーモンはすぐに実行されます。いずれの場合も、 -次にリモートシステムが呼び出された時にファイルがコピーされます。 -.SH オプション -以下のオプションが -.I uucp -で使用可能です。 -.TP 5 -.B \-c, \-\-nocopy -ローカルファイルをスプールディレクトリにコピーしません。 -もし、 -.I uucico -(8) デーモンにより実際のコピーを行う前に、そのローカルファイルが -消去されてしまった場合、コピーは失敗します。 -ファイルは -.I uucico -(8) デーモンと -.I uucp -を起動したユーザの両者から read 可能でなければなりません。 -.TP 5 -.B \-C, \-\-copy -ローカルファイルをスプールディレクトリにコピーします。 -デフォルトはこの設定です。 -.TP 5 -.B \-d, \-\-directories -コピーを行う際に、必要な全てのディレクトリを作成します。 -デフォルトはこの設定です。 -.TP 5 -.B \-f, \-\-nodirectories -もし、宛先パスに必要なディレクトリが存在しなければコピーを中止します。 -.TP 5 -.B \-R, \-\-recursive -ソースファイルにひとつでもディレクトリが含まれていた場合、その中身を -再帰的に宛先にコピーします。宛先は、ディレクトリでなければいけません。 -.TP 5 -.B \-g grade, \-\-grade grade -ファイル転送の優先度を指定します。高い優先度を持つジョブが -先に実行されます。優先度は、高い方から 0 ... 9 A ... Z a ... z -となっています。 -.TP 5 -.B \-m, \-\-mail -.I mail -(1) を使用して、ファイル転送の完了あるいは失敗を通知します。 -.TP 5 -.B \-n user, \-\-notify user -.I mail -(1) を使用して、リモートシステムの指定されたユーザに -ファイル転送の完了あるいは失敗を通知します。 -.TP 5 -.B \-r, \-\-nouucico -.I uucico -(8) デーモンを即時実行しません。後で処理されるように単にファイル転送をキューに -貯めるだけです。 -.TP 5 -.B \-j, \-\-jobid -ジョブの id を標準出力に表示します。ジョブの id を -.I uustat -(1) コマンドの -.B \-k -スイッチとともに指定する事により、ジョブを取り消す事ができます。 -複雑な操作をした場合、複数のジョブ id がそれぞれ独立の行として -表示される場合があります。例えば、 -.br -.in +0.5i -.nf -uucp sys1!~user1/file1 sys2!~user2/file2 ~user3 -.fi -.in -0.5i -を実行するとシステム -.I sys1 -向けのジョブと、システム -.I sys2 -向けのジョブの二つのジョブが発生します。 -.TP 5 -.B \-W, \-\-noexpand -リモートの相対ファイル名の前にカレントディレクトリを補完しません。 -.TP 5 -.B \-t, \-\-uuto -このオプションは -.I uuto -シェルスクリプトにより使用されます。このオプションがあると、 -.I uucp -は、最後の引数を -.I system!user -と解釈します。 -ファイルはリモートシステムの -.I ~/receive/USER/LOCAL -に送られます。ここで、 -.I USER -は最後の引数の user で、 -.I LOCAL -は、ローカルの UUCP システム名です。 -更に、 -.I uucp -は -.I \-\-notify user -オプションが指定されたとみなして動作します。 -.TP 5 -.B \-x type, \-\-debug type -特定のデバッグタイプを指定します。タイプとしては、 -abnormal、chat、handshake、uucp-proto、proto、port、 -config、spooldir、execute、incoming、outgoing があります。 -.I uucp -では、 -abnormal、config、spooldir および execute だけが意味を持ちます。 - -コンマで区切ることで複数のデバッグタイプが指定可能です。そして、 -.B \-\-debug -オプションは、1回のコマンド起動で複数回指定可能です。 -また、タイプとして数字を指定することも可能で、前述のリストから -指定した数のデバッグタイプを有効にします。 -例えば、 -.B \-\-debug 2 -は、 -.B \-\-debug abnormal,chat -と同じ意味です。 -.TP 5 -.B \-I file, \-\-config file -使用する初期設定ファイルを指定します。 -ただし、本オプションが使用可能かどうかは、 -.I uucp -がどのようにコンパイルされたかによります。 -.TP 5 -.B \-v, \-\-version -バージョンを表示し、終了します。 -.TP 5 -.B \-\-help -ヘルプを表示し、終了します。 -.SH 関連ファイル -関連ファイル名は、コンパイル時の指定ないしは初期設定ファイルにより -変化します。以下に挙げるものは、その一例です。 - -.br -/etc/uucp/config - 初期設定ファイル -.br -/var/spool/uucp - -UUCP スプールディレクトリ -.br -/var/spool/uucp/Log - -UUCP ログファイル -.br -/var/spool/uucppublic - -デフォルトの UUCP パブリックディレクトリ -.SH 関連項目 -mail(1), uux(1), uustat(1), uucico(8) -.SH バグ -オプションのいくつかは、リモートシステムの -.I uucico -(8) デーモンによっては使用できません。 - -.I \-n -および -.I \-m -オプションは、ファイルをリモートシステムから別のリモートシステムへ -転送する場合は動作しません。 - -実行ビットを除いて、ファイルのモードは保存されません。転送されたファイルの -所有者は uucp ユーザになります。 -.SH 作者 -Ian Lance Taylor -<ian@airs.com> diff --git a/ja_JP.eucJP/man/man1/uulog.1 b/ja_JP.eucJP/man/man1/uulog.1 deleted file mode 100644 index f608d8ed5b..0000000000 --- a/ja_JP.eucJP/man/man1/uulog.1 +++ /dev/null @@ -1,87 +0,0 @@ -''' %FreeBSD: src/gnu/libexec/uucp/uulog/uulog.1,v 1.3 1999/08/27 23:33:57 peter Exp % -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/uulog.1,v 1.7 2001/07/04 05:31:24 horikawa Exp $ -.TH uulog 1 "Taylor UUCP 1.06" -.SH 名称 -uulog \- UUCP のログの記述を表示する -.SH 書式 -.B uulog -[-#] [-n lines] [-sf system] [-u user] [-DSF] [--lines lines] -[--system system] [--user user] [--debuglog] [--statslog] -[--follow] [--follow=system] [standard UUCP options] -.SH 解説 -.B uulog -プログラムは UUCP ログファイル中の記述を表示するために使われます。特定の -システム、もしくは特定のユーザに関する記述を選択することができます。この -プログラムを使うことで、過去に処理行列に投入したジョブに何が起ったのかを -調べることができます。 -.SH オプション -.B uulog -には次のオプションを与えることができます。 -.TP 5 -.B \-#, \-n lines, \-\-lines lines -ここで `#' は数字で、たとえば `-10' などと指定します。ログファイルの最後 -から、指定された行数が表示されます。デフォルトではファイル全てを表示しま -す。`-f'、`-F' もしくは `--follow' オプションを指定した場合は例外で、こ -の場合にはデフォルトで 10 行表示します。 -.TP 5 -.B \-s system, \-\-system system -指定されたシステムに関係する記述のみを表示します。 -.TP 5 -.B \-u user, \-\-user user -指定されたユーザに関係する記述のみを表示します。 -.TP 5 -.B \-D, \-\-debuglog -デバッグログファイルを表示します。 -.TP 5 -.B \-S, \-\-statslog -統計ログファイルを表示します。 -.B \-F, \-\-follow -オプションを指定するとログファイルを永遠に表示し続けます。ログファイルに -新しい行が追加されると、それを表示します。 -.TP 5 -.B \-f system, \-\-follow=system -ログファイルを永遠に表示し続けます。ただし、指定されたシステムに関する記 -述のみを表示します。 -.TP 5 -.B \-X type -.TP 5 -.B \-\-debug type -.TP 5 -.B \-I file -.TP 5 -.B \-\-config file -.TP 5 -.B \-v, \-\-version -.TP 5 -.B \-\-help -標準的な UUCP オプションです。 -ただし -.B uulog -はデバッグ種別を指定するのに一般の `-x' ではなく `-X' を使うことに注意し -てください。 -.PP -ある程度 -.B uulog -の操作は UUCP プログラムによって生成されるログファイルの形式に依存します。 -これはコンパイル時にオプションで指定されます。 -UUCP プログラムが HDB 形式のログファイルを用いるようにコンパイルされてい -た場合 -.B uulog -は以下のように変更します。 -.PP -新しいオプション `-x' と `--uuxqtlog' は -.B uuxqt -ログファイルを表示するのに使われます。 -.PP -全てのオプションを省略することはできません。 -`--system'、 `-f'、 `--follow=system'、 `-D'、 `--debuglog'、 `-S'、 -`--statslog'、 `-x' もしくは `--uuxqtlog' のうち一つは用いられなければな -りません。 -.PP -システムに関係なく全てのログファイルを表示するために `--system ANY' オプ -ションを用いることができます。 -.SH 関連項目 -uucp(1) -.SH 作者 -Ian Lance Taylor (ian@airs.com) -このマニュアルは Taylor UUCP 1.06 texinfo ドキュメントに基づいています。 diff --git a/ja_JP.eucJP/man/man1/uuname.1 b/ja_JP.eucJP/man/man1/uuname.1 deleted file mode 100644 index d3b6bab684..0000000000 --- a/ja_JP.eucJP/man/man1/uuname.1 +++ /dev/null @@ -1,48 +0,0 @@ -''' %FreeBSD: src/gnu/libexec/uucp/uuname/uuname.1,v 1.2 1999/08/27 23:33:58 peter Exp % -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/uuname.1,v 1.5 2001/05/14 01:07:30 horikawa Exp $ -.TH uuname 1 "Taylor UUCP 1.06" -.SH 名称 -uuname \- 既知のリモート UUCP サイトの一覧を出力する -.SH 書式 -.B uuname -[-a] [-l] [standard UUCP options] -.SH 解説 -.B uuname -プログラムは、デフォルトでは、 -そのシステムが知っている全リモートシステムの一覧を出力します。 -そのシステムのローカルシステム名を得るために使用することも可能です。 -主にシェルスクリプトの中で利用価値があります。 -.SH オプション -以下のオプションを -.B uuname -に指定可能です。 -.TP 5 -.B \-a, \-\-aliases -リモートシステムのエイリアスと正式名を全て出力します。 -エイリアスは -.I sys -ファイルに指定することが可能です。 -.TP 5 -.B \-l, \-\-local -全リモートシステム名ではなく、 -ローカルシステムの UUCP 名を表示します -.TP 5 -.B \-x type -.TP 5 -.B \-\-debug type -.TP 5 -.B \-I file -.TP 5 -.B \-\-config file -.TP 5 -.B \-v, \-\-version -.TP 5 -.B \-\-help -標準 UUCP オプション。 -.SH 関連項目 -uucp(1) -.SH 作者 -Ian Lance Taylor (ian@airs.com). -このマニュアルは Taylor UUCP 1.06 Texinfo ドキュメントに基いています。 - - diff --git a/ja_JP.eucJP/man/man1/uupick.1 b/ja_JP.eucJP/man/man1/uupick.1 deleted file mode 100644 index 46b6ce79ed..0000000000 --- a/ja_JP.eucJP/man/man1/uupick.1 +++ /dev/null @@ -1,73 +0,0 @@ -''' %FreeBSD: src/gnu/libexec/uucp/uupick/uupick.1,v 1.2 1999/08/27 23:34:00 peter Exp % -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/uupick.1,v 1.4 2001/05/14 01:07:30 horikawa Exp $ -.TH uupick 1 "Taylor UUCP 1.06" -.SH 名称 -uupick \- uuto が転送したファイルを取り出す -.SH 書式 -.B uupick -[\-s] [standard UUCP options] -.SH 解説 -.B uupick -プログラムは、 -.B uuto(1) -プログラムが転送したファイルを簡単に取り出すために使用します。 -.B uuto(1) -で転送されたファイルごとに、 -.B uupick -は、送信元システム、ファイル名、 -名前が参照しているのが -通常ファイルであるかディレクトリであるかを表示します。 -そして、ユーザがどうすべきかを指示するのを待ちます。 -ユーザは以下のいずれかのコマンドを入力せねばなりません: -.TP 5 -.I q -.B uupick -を終了します。 -.TP 5 -.I RETURN -ファイルをスキップします。 -.TP 5 -.I m [directory] -ファイルもしくはディレクトリを指定したディレクトリに移動します。 -ディレクトリを指定しないと、ファイルはカレントディレクトリに移動されます。 -.TP 5 -.I a [directory] -このシステムからの全ファイルを指定したディレクトリに移動します。 -ディレクトリを指定しないと、ファイルはカレントディレクトリに移動されます。 -.TP 5 -.I p -ファイルを標準出力にリストします。 -.TP 5 -.I d -ファイルを削除します。 -.TP 5 -.I ! [command] -`command' をシェルエスケープとして実行します。 -.SH オプション -以下のオプションを -.B uupick -に指定可能です。 -.TP 5 -.B \-s, \-\-system system -このオプションを指定すると、 -.B uupick -が表示するファイルを、指定したシステムから転送されたものに限定します。 -.TP 5 -.B \-x type -.TP 5 -.B \-\-debug type -.TP 5 -.B \-I file -.TP 5 -.B \-\-config file -.TP 5 -.B \-v, \-\-version -.TP 5 -.B \-\-help -標準 UUCP オプション。 -.SH 関連項目 -uucp(1), uuto(1) -.SH 作者 -Ian Lance Taylor (ian@airs.com). -このマニュアルは Taylor UUCP 1.06 Texinfo ドキュメントに基いています。 - diff --git a/ja_JP.eucJP/man/man1/uustat.1 b/ja_JP.eucJP/man/man1/uustat.1 deleted file mode 100644 index 8d53d94106..0000000000 --- a/ja_JP.eucJP/man/man1/uustat.1 +++ /dev/null @@ -1,555 +0,0 @@ -''' %FreeBSD: src/gnu/libexec/uucp/uustat/uustat.1,v 1.9 1999/08/27 23:34:03 peter Exp % -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/uustat.1,v 1.8 2001/05/14 01:07:30 horikawa Exp $ -.TH uustat 1 "Taylor UUCP 1.06" -.SH 名称 -uustat \- UUCP システム状態のチェックや制御を行なう -.SH 書式 -.B uustat \-a -.PP -.B uustat \-\-all -.PP -.B uustat -[ -.B \-eKRiMNQ ] [ -.B \-sS -system ] [ -.B \-uU -user ] [ -.B \-cC -command ] [ -.B \-oy -hours ] [ -.B \-B -lines ] [ -.B \-\-executions -] [ -.B \-\-kill-all -] [ -.B \-\-rejuvenate-all -] [ -.B \-\-prompt -] [ -.B \-\-mail -] [ -.B \-\-notify -] [ -.B \-\-no-list -] [ -.B \-\-system -system ] [ -.B \-\-not-system -system ] [ -.B \-\-user -user ] [ -.B \-\-not-user -user ] [ -.B \-\-command -command ] [ -.B \-\-not-command -command ] [ -.B \-\-older-than -hours ] [ -.B \-\-younger-than -hours ] [ -.B \-\-mail-lines -lines ] -.PP -.B uustat -[ -.B \-kr -jobid ] [ -.B \-\-kill -jobid ] [ -.B \-\-rejuvenate -jobid ] -.PP -.B uustat \-q [ -.B \-sS -system ] [ -.B \-oy -hours ] [ -.B \-\-system -system ] [ -.B \-\-not-system -system ] [ -.B \-\-older-than -hours ] [ -.B \-\-younger-than -hours ] -.PP -.B uustat \-\-list [ -.B \-sS -system ] [ -.B \-oy -hours ] [ -.B \-\-system -system ] [ -.B \-\-not-system -system ] [ -.B \-\-older-than -hours ] [ -.B \-\-younger-than -hours ] -.PP -.B uustat \-m -.PP -.B uustat \-\-status -.PP -.B uustat \-p -.PP -.B uustat \-\-ps -.SH 解説 -.I uustat -コマンドは、UUCP システムに関するいろんな情報を表示します。 -また、本コマンドを用いることで、 -.I uucp -(1) や -.I uux -(1) で作成されたジョブを取り消したり、 -ジョブのタイムスタンプの若返りを行なったりすることが出来ます。 - -デフォルトでは、 -.I uustat -は、コマンド -を起動したユーザが要求したジョブをすべて表示します。これは、 -.B \-\-user -オプションで自分を指定した場合の動作と同じです。 - -.B \-a, -.B \-\-all, -.B \-e, -.B \-\-executions, -.B \-s, -.B \-\-system, -.B \-S, -.B \-\-not-system, -.B \-u, -.B \-\-user, -.B \-U, -.B \-\-not-user, -.B \-c, -.B \-\-command, -.B \-C, -.B \-\-not-command, -.B \-o, -.B \-\-older-than, -.B \-y, -.B \-\-younger-than -のいずれかのオプションが指定されると、 -指定条件の組み合わせに合致するすべてのジョブを表示します。 - -.B \-K -または -.B \-\-kill-all -オプションは、要求してから 7 日間経過した全てのジョブのような、 -選択したグループのジョブを削除出来ます。 -.SH オプション -.I uustat -では、以下のオプションが使用可能です。 -.TP 5 -.B \-a, \-\-all -キューイングされたすべてのファイル転送要求を表示します。 -.TP 5 -.B \-e, \-\-executions -ファイル転送要求ではなく、 -コマンド実行要求を表示します。キューイングされたコマンド実行要求は、 -.I uucico -(8) ではなく -.I uuxqt -(8) にて処理されます。 -キューイング中のコマンド実行要求には、リモートシステムから転送される -ファイルを待っているものもあります。これらの要求は、 -.I uux -(1) を起動することで作成されます。 -.TP 5 -.B \-s system, \-\-system system -指定したシステムに対するジョブをすべて表示します。本オプションは、 -1 回のコマンド起動時に複数指定することが可能です。 -この場合、指定したシステムに対応するジョブが全て表示されます。 -.B \-\-list -オプションと共に指定したときは、指定したシステムのジョブだけが表示されます。 -.TP 5 -.B \-S system, \-\-not-system system -指定したシステム向け以外のジョブをすべて表示します。本オプションは、 -1 回のコマンド起動時に複数指定することが可能です。 -この場合、指定しなかったシステムのジョブが全て表示されます。 -.B \-\-list -オプションと共に指定したときは、 -指定しなかったシステムのジョブだけが表示されます。 -なお、本オプションは、 -.B \-s -や -.B \-\-system -とは同時に指定してはいけません。 -.TP 5 -.B \-u user, \-\-user user -指定したユーザのジョブをすべて表示します。本オプションは、 -1 回のコマンド起動時に複数指定することが可能です。 -この場合、指定したユーザのジョブが全て表示されます。 -.TP 5 -.B \-U user, \-\-not-user user -指定したユーザのジョブを除くジョブをすべて表示します。本オプションは、 -1 回のコマンド起動時に複数指定することが可能です。 -この場合、指定しなかったユーザのジョブが全て表示されます。 -なお、本オプションは、 -.B \-u -や -.B \-\-user -とは同時に指定してはいけません。 -.TP 5 -.B \-c command, \-\-command command -指定したコマンドの実行を要求するジョブをすべて表示します。 -.B command -を -.I ALL -と指定した場合、すべての (単なる -.I uucp -ファイル転送ではない) コマンドの実行を要求するジョブ -を表示します。本オプションは、1回のコマンド起動時に複数指定することが -可能です。 -この場合、指定したコマンドの実行を要求するジョブが全て表示されます。 -.TP 5 -.B \-C command, \-\-not-command command -指定したコマンド以外の実行を要求するジョブをすべて表示します。 -.B command -が -.I ALL -と指定した場合、 -単なる -.I uucp -ファイル転送要求がすべて表示されます。 -本オプションは、1 回のコマンド起動時に複数指定することが -可能です。 -この場合、指定したコマンドの実行を要求しないジョブが全て表示されます。 -なお、本オプションは、 -.B \-c -や -.B \-\-command -と同時に指定してはいけません。 -.TP 5 -.B \-o hours, \-\-older-than hours -キューイングされてから指定した時間 (単位: 時間) 以上超過した -ジョブを全て表示します。 -.B \-\-list -オプションと共に指定した場合は、 -そのシステムに関するもっとも古いジョブが、指定した時間より -古いという条件を満たすシステムの名前だけを表示します。 -.TP 5 -.B \-y hours, \-\-younger-than hours -キューイングされてから経過した時間が指定した時間 (単位: 時間) を -超過していないジョブを全て表示します。 -.B \-\-list -オプションと共に指定した場合は、 -そのシステムに関するもっとも古いジョブが指定した時間より -新しいという条件を満たすシステムの名前だけを表示します。 -.TP 5 -.B \-k jobid, \-\-kill jobid -指定したジョブを削除します。 -ジョブ id は、デフォルトの出力結果から取得可能です。また、 -.I uucp -(1) や -.I uux -(1)にて -.B \-j -や -.B \-\-jobid -オプションを付加して実行することで、 -当該ジョブのジョブ id を取得することも出来ます。 -ジョブの削除を行なうことが出来るのは、ジョブを要求したユーザ、UUCP -システム管理者、もしくはスーパユーザです。 -.B \-k -や -.B \-\-kill -オプションは、1回のコマンド実行で複数回指定することが可能です。 -.TP 5 -.B \-r jobid, \-\-rejuvenate jobid -指定したジョブのジョブ時刻を、本コマンドを起動した時刻に変更します。 -このことにより、 -.B \-o, -.B \-\-older-than, -.B \-y, -.B \-\-younger-than -の各オプションの出力結果に影響が出ます。 -このオプションの使用により、 -クリーンアップデーモンにより削除されるのを免れることができます。 -ジョブ id は、デフォルトの出力結果から取得可能 -です。また、 -.I uucp -(1) や -.I uux -(1)にて -.B \-j -や -.B \-\-jobid -オプションを付加して実行することで、当該ジョブのジョブ id を取得する -ことも出来ます。 -本操作を行なうことが出来るのは、ジョブを要求したユーザ、UUCP システム管理者、 -もしくはスーパユーザです。 -.B \-r -や -.B \-\-rejuvenate -オプションは、1回のコマンド実行で複数回指定することが可能です。 -.TP 5 -.B \-q, \-\-list -要求がキューイングされている全てのリモートシステムに対する要求の -ステータス、そして対話のステータスを表示します。 -.B \-s, -.B \-\-system, -.B \-S, -.B \-\-not-system, -.B \-o, -.B \-\-older-than, -.B \-y, -.B \-\-younger-than -の各オプションはシステムの表示を制限するために用います。 -要求がキューイングされていないシステムは表示されません。 -.TP 5 -.B \-m, \-\-status -すべてのリモートシステムとの対話のステータスを表示します。 -.TP 5 -.B \-p, \-\-ps -UUCP ロックまたはポートを保持するすべての処理のステータスを表示します。 -.TP 5 -.B \-i, \-\-prompt -各ジョブについて、削除するかどうかを問い合わせるよう指示します。その -問い合わせに対してユーザが -.I y -もしくは -.I Y -を先頭に含む文字列を入力した場合 (y もしくは Y だけでも)、そのジョブ -は削除されます。 -.TP 5 -.B \-K, \-\-kill-all -各ジョブを自動的に削除します。本機能は、 -.B \-\-mail -や -.B \-\-notify -オプションと組み合わせて使用することで、自動メンテナンスを行なう -スクリプトを作成するのに役立ちます。 -.TP 5 -.B \-R, \-\-rejuvenate-all -指定したジョブを自動的に若返らせます。本オプションは -.B \-\-kill-all -と同時に指定できません。 -.TP 5 -.B \-M, \-\-mail -各ジョブについて、UUCP システム管理者に対してメールを送ります。もし -ジョブが ( -.B \-\-kill-all -や -.B \-\-prompt -を用いることで) 削除された場合、その旨がメールに明記されます。 -.B \-\-comment -オプションで指定したコメントについても、そのメールの中に含まれます。 -ジョブが実行された場合、標準入力から入力された最初の部分がメールの -メッセージに含まれます。 -メールに含まれる行数は、 -.B \-\-mail-lines -オプションで設定可能です (デフォルトでは 100 行です)。 -標準入力からの入力データが NULL キャラクタを含む場合、そのファイルはバイナリ -ファイルであるとみなされ、メールには含まれません。 -.TP 5 -.B \-N, \-\-notify -各ジョブについて、要求を行なったユーザに対してメールを送ります。メール -の内容については、 -.B \-M -や -.B \-\-mail -オプションで説明したものと同一です。 -.TP 5 -.B \-W comment, \-\-comment comment -.B \-M, -.B \-\-mail, -.B \-N, -.B \-\-notify -の各オプションでメールを送る際に、そのメールに含めるコメントを指定します。 -.TP 5 -.B \-B lines, \-\-mail-lines lines -.B \-M, -.B \-\-mail, -.B \-N, -.B \-\-notify -のいずれかのオプションで、 -標準入力を用いるコマンドを実行するジョブの結果をメールで送るように -指定している場合、メールに含める標準入力の行数を指定します。 -デフォルトは 100 行です。 -.TP 5 -.B \-Q, \-\-no-list -.B \-i, -.B \-\-prompt, -.B \-K, -.B \-\-kill-all, -.B \-M, -.B \-\-mail, -.B \-N -.B \-\-notify -オプションと同時に使用します。ジョブの表示を行なわず、 -指定した動作のみ行います。 -.TP 5 -.B \-x type, \-\-debug type -特定のデバッグタイプを指定します。タイプとしては、abnormal, chat, -handshake, uucp-proto, proto, port, config, spooldir, execute, incoming, -outgoing がありますが、 -.I uustat -では、abnormal, config, spooldir ,execute のみが意味を持ちます。 -本オプションでは、 -コンマで区切ることで複数のデバッグタイプが指定可能です。そして、 -.B \-\-debug -オプションは、1 回のコマンド起動で複数回指定可能です。 -また、タイプとして数字を指定することも可能です。例えば、 -.B \-\-debug 2 -という指定は、 -.B \-\-debug abnormal,chat -と同じ意味です。 -.TP 5 -.B \-I file, \-\-config file -使用する設定ファイルの指定を行ないます。ただし、本オプションは、本コマンドの -コンパイル条件によっては使用できないことがあります。 -.TP 5 -.B \-v, \-\-version -バージョン情報を表示します。実行は行ないません。 -.TP 5 -.B \-\-help -ヘルプメッセージを表示します。実行は行ないません。 -.SH 使用例 -.br -.nf -uustat --all -.fi -全てのジョブのステータスを表示します。出力例を以下に示します。 -.br -.in +0.5i -.nf -bugsA027h bugs ian 04-01 13:50 Executing rmail ian@airs.com (sending 1283 bytes) -.fi -.in -0.5i -フォーマットは、以下の通りです。 -.br -.in +0.5i -.nf -jobid system user queue-date command (size) -.fi -.in -0.5i -ジョブ id は、 -.B \-\-kill -もしくは -.B \-\-rejuvenate -オプションで主に使用します。 -size は、リモートシステムにどれだけのデータが転送されるかを示します。 -また、ファイル受信要求の場合は表示されません。 -.B \-\-system, -.B \-\-not-system, -.B \-\-user, -.B \-\-not-user, -.B \-\-command, -.B \-\-not-command, -.B \-\-older-than, -.B \-\-younger-than -オプションは、ジョブの表示制御のために用いられます。 - -.br -.nf -uustat --executions -.fi -キューイングされたコマンド実行ジョブのステータスを表示します。出力 -例を以下に示します。 -.br -.in +0.5i -.nf -bugs bugs!ian 05-20 12:51 rmail ian -.fi -.in -0.5i -フォーマットは以下の通りです。 -.br -.in +0.5i -.nf -system requestor queue-date command -.fi -.in -0.5i -.B \-\-system, -.B \-\-not-system, -.B \-\-user, -.B \-\-not-user, -.B \-\-command, -.B \-\-not-command, -.B \-\-older-than, -.B \-\-younger-than -オプションは、ジョブの表示制御のために用いられます。 - -.br -.nf -uustat --list -.fi -全てのシステムについてキューイングされたコマンドのステータスを表示します。 -以下に出力例を示します。 -.br -.in +0.5i -.nf -bugs 4C (1 hour) 0X (0 secs) 04-01 14:45 Dial failed -.fi -.in -0.5i -システム、キューイングされたコマンド数、 -もっとも古いコマンドがキューイングされてからの時間、 -キューイングされたローカル実行数と -もっとも古いコマンドがローカル実行キューイングされてからの時間、 -最後の対話の日時とステータスが表示されています。 - -.br -.nf -uustat --status -.fi -全てのリモートシステムについて対話のステータスを表示します。出力例を以下に -示します。 -.br -.in +0.5i -.nf -bugs 04-01 15:51 Conversation complete -.fi -.in -0.5i -システム、最後の対話の日時とステータスが示されています。最後の対話が失敗した -場合、 -.I uustat -はシステムを呼び出そうとした回数を表示します。 -次のリトライ間隔までシステムを呼び出せないときには -.I uustat -は次にコールできる時刻を表示します。 - -.br -.nf -uustat --ps -.fi -UUCP ロックしている全てのプロセスのステータスを表示します。 -.I uustat -は単にロックしている各プロセス上で -.I ps -(1) を起動するだけなので、出力書式はシステムにより異なります。 - -.br -.in +0.5i -.nf -uustat --command rmail --older-than 168 --kill-all --no-list --mail --notify --comment "Queued for over 1 week" -.fi -.in -0.5i -これは 1 週間 (168 時間) 以上配送待ちになっているキューイングされている全ての -.I rmail -コマンドの実行を取り止めます。各コマンドに対し、UUCP 管理者と rmail の実行を -要求したユーザの双方にメールが送られます。メールには -.B \-\-comment -オプションで指定した文字列が含まれています。 -.B \-\-no-list -オプションはジョブの出力を端末に出力しません。このときプログラムから出力される -のはエラーメッセージだけです。 -.SH 関連ファイル -関連ファイル名は、コンパイル時の指定により変化します。以下に挙げるものは、 -一例です。 - -.br -/usr/lib/uucp/config - 初期化ファイル -.br -/usr/spool/uucp - -UUCP スプールディレクトリ -.SH 関連項目 -ps(1), rmail(8), uucp(1), uux(1), uucico(8), uuxqt(8) -.SH 作者 -Ian Lance Taylor -(ian@airs.com) diff --git a/ja_JP.eucJP/man/man1/uuto.1 b/ja_JP.eucJP/man/man1/uuto.1 deleted file mode 100644 index 8acfc5516f..0000000000 --- a/ja_JP.eucJP/man/man1/uuto.1 +++ /dev/null @@ -1,41 +0,0 @@ -''' %FreeBSD: src/gnu/libexec/uucp/uuto/uuto.1,v 1.2 1999/08/27 23:34:04 peter Exp % -''' based on the uucp texinfo documentation -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/uuto.1,v 1.4 2001/05/14 01:07:30 horikawa Exp $ -.TH uuto 1 "Taylor UUCP 1.06" -.SH 名称 -uuto \- リモートシステムのユーザにファイルを送る -.SH 書式 -.B uuto -[uucp options] files... system!user -.SH 解説 -.B uuto -プログラムは、 -リモートシステムのあるユーザに簡単にファイルを送るために使用します。 -リモートシステムにファイルが到着したときにリモートユーザにメールが届くように -手配しますので、リモートユーザは -.B uupick -プログラムを使用して簡単にファイルを取り出すことができます。 -.B uuto -はなんらセキュリティを提供しないことに注意してください -- -リモートシステム上のユーザであれば誰でも、 -このファイルの内容を見ることができます。 -.PP -最後の引数はファイルの送り先のシステムとユーザ名を指定します。 -他の引数は送られるファイルやディレクトリです。 -.PP -.B uuto -プログラムは実際には簡単なシェルスクリプトであり、 -.B uucp -プログラムを適切な引数で起動します。 -.B uucp -に与えることができるオプションは -.B uuto -にも与えることができます。 -.SH 関連項目 -uucp(1) -.SH 作者 -Ian Lance Taylor (ian@airs.com). -このマニュアルは Taylor UUCP 1.06 Texinfo ドキュメントに基いています。 - - - diff --git a/ja_JP.eucJP/man/man1/uux.1 b/ja_JP.eucJP/man/man1/uux.1 deleted file mode 100644 index 2b6d89da26..0000000000 --- a/ja_JP.eucJP/man/man1/uux.1 +++ /dev/null @@ -1,265 +0,0 @@ -''' %FreeBSD: src/gnu/libexec/uucp/uux/uux.1,v 1.7 1999/08/27 23:34:05 peter Exp % -.\" $FreeBSD: doc/ja_JP.eucJP/man/man1/uux.1,v 1.5 2001/05/14 01:07:30 horikawa Exp $ -.TH uux 1 "Taylor UUCP 1.06" -.SH 名称 -uux \- UUCP を用いて、リモートマシン上でコマンドを実行する -.SH 書式 -.B uux -[ options ] command -.SH 解説 -リモートシステム上でコマンドを実行する時、 -またはリモートシステム上のファイルを用いて、 -ローカルシステム上でコマンドを実行する時に -.I uux -コマンドを用います。 -コマンドは即座に実行される訳ではなく、 -.I uucico -(8) デーモンがシステムを呼び出し、ジョブを実行するまではキューイングされます。 -デーモンは、 -.B \-r -または、 -.B \-\-nouucico -オプションを指定して本コマンドを実行しない限り、自動的に呼び出されます。 - -実際のコマンド実行は、 -.I uuxqt -(8) デーモンが行います。 - -引数に指定されたファイルは、リモートシステムから実際にコマンド実行を行う -システムに集めることができます。 -標準入力についても同様です。標準出力は、 -リモートシステム上のファイルに出力することができます。 - -リモートシステムでコマンドを実行する場合は、[システム名] ! の後に、 -[コマンド名] を記述します。 -システム名が空白の場合には、 -ローカルシステム上でのコマンドの実行であるとみなされます。 - -"!" マークを含む引数は、ファイル名を示しているものとみなされます。 -"!" マークの前にはファイルが存在するシステム名を、 -後にはファイルへのパス名を記 -述します。 -システム名が空白の場合には、ローカルシステム上のファイルであるとされます。 -この場合、コマンドの実行されるリモートシステムへファイル転送が発生します。 -ファイル名が絶対パス名でない場合、 -現在のローカルシステム上の作業ディレクトリ名がその前に付加されます。 -この場合、リモートシステム上で無効なパスとなってしまうかも知れません。 -また、パス名として ~/ が先頭に付加される場合、 -これはUUCPパブリックディレクトリ(通常は/usr/spool/uucppublic)からの -相対パスであるとみなされます。一般的に、~name/ で始まるディレクトリは、 -ユーザ name のホームディレクトリであるとして処理されます。 - -標準入出力は普通にリダイレクトされます。パス名の中に "!" を含む時は、 -そのファイルがリモートシステム上にあるものとして扱われます。 -リダイレクトキャラクタを引数の一部として扱う時には、 -シェルに解釈されずに -.I uux -に渡すことが出来るようにクオートしなくてはなりません。また、追加書き込み -のリダイレクション (>>) は使用できません。 - -指定された全てのファイルは、 -コマンド実行前に1つのディレクトリに集められます。 -このため、各ファイルは異なるベースネームを持つ必要があります。 -例えば -.br -.in +0.5i -.nf -uux 'sys1!diff sys2!~user1/foo sys3!~user2/foo >!foo.diff' -.fi -.in -0.5i -は、コマンド実行時に失敗します。なぜなら、sys2 の ~user1/foo と、sys3 の -~usr2/foo の両方のファイルを、 -sys1 の同一の名前のファイル foo にコピーするためです。 - -括弧で囲むことで "!" が解釈されるのをエスケープできます。これは -.I uucp -コマンドをリモートシステム上で実行する際に有用です。 - -コマンド名なしで実行(例: -.I uux sys!) -すると、システム sys の記録ファイル (原文: poll file) を作ります。 -.SH オプション -以下のオプションが -.I uux -で使用可能です。 -.TP 5 -.B \-, \-p, \-\-stdin -標準入力から読み込んで、それを実行するコマンドの標準入力の内容とします。 -.TP 5 -.B \-c, \-\-nocopy -ローカルファイルをスプールディレクトリにコピーしません。デフォルトはこの -設定です。もし、 -.I uucico -(8) デーモン実行前にそのローカルファイルが消去されてしまった場合、コピー -は失敗します。ファイルは、 -.I uucico -(8) デーモンと -.I uux -を起動したユーザの両者から read 可能でなければなりません。 -.TP 5 -.B \-C, \-\-copy -ローカルファイルをスプールディレクトリにコピーします。 -.TP 5 -.B \-l, \-\-link -ローカルファイルをスプールディレクトリの下にハードリンクします。ファイル -がスプールディレクトリとは異なる物理デバイス上に存在する場合、 -リンクは張れません。この場合、 -.B \-c -か、 -.B \-\-nocopy -オプションが指定されていない限り、スプールディレクトリの下に対象ファイル -がコピーされます(これは、 -.B \-\-link -が -.B \-\-nocopy -のかわりに -.B \-\-copy -をデフォルト設定すると言うことです)。 -ファイルが -.I uucico -(8) デーモンの処理前に変更された場合、 -転送されるファイルは変更後のファイルです。ファイルは、 -.I uucico -(8) デーモンと、 -.I uux -を起動したユーザの両者から read 可能でなければなりません。 -.TP 5 -.B \-g grade, \-\-grade grade -ファイル転送の優先度を設定します。高い優先度を持つジョブが先に実行されます。 -優先度は、高い方から 0 ... 9 A ... Z a ... z となっています。 -.TP 5 -.B \-n, \-\-notification=no -ジョブの結果を通知するメールを送りません。例えジョブが失敗してもです。 -.TP 5 -.B \-z, \-\-notification=error -エラー発生時に、ジョブの結果についてメールを送ります。 -Taylor UUCP -.I uuxqt -を含む多くの -.I uuxqt -デーモンでは、これがデフォルトの動作であり、 -.B \-\-notification=error -は何の効果もありません。しかし、 -.B \-\-notification=error -オプションを設定していないと、ジョブが成功した場合にメール -を送る -.I uuxqt -デーモンもあれば、 -.B \-\-notification=error -オプションを指定しないと、ジョブが失敗した時にメールを送ってくれないとい -う -.I uuxqt -デーモンもあります。 -.TP 5 -.B \-r, \-\-nouucico -.I uucico -(8) デーモンを即時実行しません。 -後で処理されるように要求をキューに貯めるだけです。 -.TP 5 -.B \-j, \-\-jobid -ジョブの id を標準出力に表示します。 -ジョブの id は、各ファイルコピー操作が実際に処理を開始するように要求された時、 -生成されます。これらのファイルコピー操作は、 -.B \-\-kill -スイッチとともに -.I uustat -(1)に ジョブ id を渡すことで取消可能かも知れませんが、 -そうするとジョブは完了不能となります。 -.TP 5 -.B \-a address, \-\-requestor address -指定したE-mailアドレスに対してジョブの結果報告を送ります。 -.TP 5 -.B \-x type, \-\-debug type -特定のデバッグタイプを指定します。タイプとしては、abnormal, chat, -handshake, uucp-proto, proto, port, config, spooldir, execute, incoming, -outgoing がありますが、 -.I uux -では、abnormal, config, spooldir, execute の4つだけが意味を持ちます。 - -コンマで区切ることで複数のデバッグタイプが指定可能です。そして、 -.B \-\-debug -オプションは、1回のコマンド起動で複数回指定可能です。 -また、タイプとして数字を指定することも可能です。例えば、 -.B \-\-debug 2 -という指定は、 -.B \-\-debug abnormal,chat -と同じ意味です。 -.TP 5 -.B \-I file, \-\-config file -使用する初期設定ファイルの指定を行ないます。 -ただし、本オプションが使用可能かどうかは、 -.I uux -がどのようにコンパイルされたかによります。 -.TP 5 -.B \-v, \-\-version -バージョンを表示し、終了します。 -.TP 5 -.B \-\-help -ヘルプを表示し、終了します。 -.SH 使用例 -.br -.nf -uux -z - sys1!rmail user1 -.fi -コマンド``rmail user1'' を、システム sys1 上で実行します。コマンドへの入力 -データは、標準入力が用いられます。ジョブが失敗した場合、 -.I mail -(1) コマンドによって通知します。 - -.br -.nf -uux 'diff -c sys1!~user1/file1 sys2!~user2/file2 >!file.diff' -.fi -システム sys1 とシステム sys2 上にあるファイルを取得し、 -.I diff -を実行した上で、カレントディレクトリのファイル file.diff に結果を -出力します。カレントディレクトリは、 -.I uuxqt -(8) デーモンによって write 可能である必要があります。 - -.br -.nf -uux 'sys1!uucp ~user1/file1 (sys2!~user2/file2)' -.fi -.I uucp -を、sys1 上で実行し、sys1 上のファイル file1 を sys2 上にコピーします。 -この例では、引数をクオートするために括弧を用いる方法を示しています。 -.SH 制限 -リモートシステムでは、実行が許可されないコマンドがあるかもしれません。 -多くのリモートシステムでは、 -.I rmail -と -.I rnews -に限って実行を許可しています。 - -実行されるかどうかは、リモートシステムの -.I uuxqt -(8) デーモンに依存するオプションがあります。 -.SH 関連ファイル -関連ファイル名は、 -コンパイル時の指定ないしは初期設定ファイルにより変化します。 -以下に挙げるものは、その一例です。 - -.br -/usr/lib/uucp/config - 初期設定ファイル -.br -/usr/spool/uucp - -UUCP スプールディレクトリ -.br -/usr/spool/uucp/Log - -UUCP ログファイル -.br -/usr/spool/uucppublic - -デフォルトの UUCP パブリックディレクトリ -.SH 関連項目 -mail(1), uustat(1), uucp(1), uucico(8), uuxqt(8) -.SH バグ -複数のシステムにまたがって、ファイル参照をすることは出来ません。 - -.B \-\-jobid -オプションを使うと、ジョブ id が非常に多く出力されてしまいます。 -また、リモートファイルを必要とするローカルなコマンドの実行を -キャンセルする良い方法は存在しません。 -.SH 作者 -Ian Lance Taylor -(ian@airs.com) |