Kentaro Shirakata
argra****@users*****
2006年 11月 2日 (木) 01:10:52 JST
Index: docs/perl/5.6.1/perltrap.pod diff -u docs/perl/5.6.1/perltrap.pod:1.1 docs/perl/5.6.1/perltrap.pod:1.2 --- docs/perl/5.6.1/perltrap.pod:1.1 Sun Jul 4 03:28:49 2004 +++ docs/perl/5.6.1/perltrap.pod Thu Nov 2 01:10:51 2006 @@ -1,3 +1,5 @@ +=encoding euc-jp + =head1 NAME perltrap - Perlの不注意による罠 @@ -14,7 +16,7 @@ =end original -最も大きな罠とは、C<use warnings> あるいは B<-w>スイッチを +最も大きな罠とは、C<use warnings> あるいは B<-w> スイッチを 使うのを忘れてしまうということです。 L<perllexwarn> と L<perlrun> を参照してください。 二番目に大きな罠とは、あなたのプログラム全体を @@ -24,6 +26,8 @@ =head2 Awk Traps +(awk の罠) + B<awk> に慣れた方は、以下のようなことに特に注意してください: =over 4 @@ -132,7 +136,6 @@ =item * - 以下の変数の働きが異なります。 Awk Perl @@ -164,6 +167,8 @@ =head2 C Traps +(C の罠) + =begin original Cerebral C programmers should take note of the following: @@ -176,25 +181,25 @@ =item * -C<if> や C<while>にはカーリーブレースが必要です。 +C<if> や C<while> にはカーリーブレースが必要です。 =item * -C<else if>ではなく、C<elsif>を使わなければなりません。 +C<else if> ではなく、C<elsif> を使わなければなりません。 =item * -CのC<break> と C<continue> は、Perlではそれぞれ C<last> と -C<next>となります。 -C とは異なり、これらは C<do { } while> 構文ではI<使えません>。 +C のC<break> と C<continue> は、Perlではそれぞれ C<last> と +C<next> となります。 +C とは異なり、これらは C<do { } while> 構文では I<使えません>。 =item * -switch文はありません(が、その場(on the fly)で作り上げることは簡単です)。 +switch 文はありません(が、その場(on the fly)で作り上げることは簡単です)。 =item * -Perlでは、変数は“$”か“@”か“%”で始まります。 +Perl では、変数は“$”か“@”か“%”で始まります。 =item * @@ -202,13 +207,13 @@ =item * -なにかのアドレスを得ることはできません。Perlには似たような演算子である +なにかのアドレスを得ることはできません。Perl には似たような演算子である バックスラッシュがありますが、これは参照を生成します。 =item * -C<ARGV> は大文字でなければなりません。C<$ARGV[0]> が Cでの C<argv[1]>に相当し、 -C<argv[0]>にあたるものはC<$0>です。 +C<ARGV> は大文字でなければなりません。C<$ARGV[0]> が C での C<argv[1]> に相当し、 +C<argv[0]> にあたるものは C<$0> です。 =item * @@ -219,25 +224,27 @@ =end original -link(), unlink(), rename()などのシステムコールは、成功時に -0ではなく非0の値を返します。(但し、system() は成功時に 0 を返します。) +link(), unlink(), rename() などのシステムコールは、成功時に +0 ではなく非 0 の値を返します。(但し、system() は成功時に 0 を返します。) =item * -シグナルハンドラーは、シグナル番号ではなくシグナル名を扱います。 +シグナルハンドラは、シグナル番号ではなくシグナル名を扱います。 使用できるシグナル名は、kill -l として確かめてください。 =back =head2 Sed Traps +(sed の罠) + =begin original Seasoned B<sed> programmers should take note of the following: =end original -熟練したB<sed>プログラマは以下のことに注意すべきです: +熟練した B<sed> プログラマは以下のことに注意すべきです: =over 4 @@ -252,12 +259,14 @@ =item * -範囲演算子はC<...>であって、カンマではありません。 +範囲演算子は C<...> であって、カンマではありません。 =back =head2 Shell Traps +(shell の罠) + =begin original Sharp shell programmers should take note of the following: @@ -275,7 +284,7 @@ =item * -バッククォート演算子はB<csh> とは違って、返された値を変換しません。 +バッククォート演算子は B<csh> とは違って、返された値を変換しません。 =item * @@ -291,7 +300,7 @@ =item * -引数は$1, $2 などではなく、@ARGV から得られます。 +引数は $1, $2 などではなく、@ARGV から得られます。 =item * @@ -302,6 +311,8 @@ =head2 Perl Traps +(Perl の罠) + =begin original Practicing Perl Programmers should take note of the following: @@ -316,7 +327,7 @@ 多くの演算子がリストコンテキストとスカラーコンテキストとで 振る舞いが変わることを忘れないでください。 -詳しくはL<perldata> を参照してください。 +詳しくは L<perldata> を参照してください。 =item * @@ -325,7 +336,6 @@ 文字列なのかが判断できません。文字列にはクォートを、 関数呼び出しには括弧をつければ、迷うこともないでしょう。 - =item * =begin original @@ -338,12 +348,12 @@ =end original -組込み関数のどれが(chop()やchdir())のような単項演算子で、 -どれが(print()やunlink())のような +組込み関数のどれが(chop() や chdir())のような単項演算子で、 +どれが(print() や unlink())のような リスト演算子であるかは見ただけではわかりません (プロトタイプがなければ、ユーザー定義サブルーチンは -リスト演算子としてB<のみ>定義でき、単項演算子にはできません)。 -L<perlop>とL<perlsub>を参照してください。 +リスト演算子として B<のみ> 定義でき、単項演算子にはできません)。 +L<perlop> と L<perlsub> を参照してください。 =item * @@ -356,8 +366,8 @@ <FH> 構造はファイルハンドルではなく、そのハンドルに対する行読み込みの 操作(readline operation)です。 -whileループの条件式の中にこのファイル読み込みだけがあった場合には -読み込まれたデータは$_に代入されます。 +while ループの条件式の中にこのファイル読み込みだけがあった場合には +読み込まれたデータは $_ に代入されます。 while (<FH>) { } while (defined($_ = <FH>)) { }.. @@ -365,7 +375,7 @@ =item * -C<=~>が必要なところでc<=>を使わない、ということを忘れないでください。 +C<=~> が必要なところで c<=> を使わない、ということを忘れないでください。 これら二つの構造はかなり違います。 $x = /foo/; @@ -384,7 +394,7 @@ =item * -モジュールにある exportされた変数のlocalizeをすると、その export された +モジュールにある export された変数を局所化すると、その export された 値は変更されません。 ローカル名は新しい値の別名(alias)となりますが、 外部名は元々の値の別名のままです。 @@ -393,6 +403,8 @@ =head2 Perl4 to Perl5 Traps +(Perl4 から Perl5 への罠) + =begin original Practicing Perl4 Programmers should take note of the following @@ -401,7 +413,7 @@ =end original 実践的な Perl4 プログラマは -以下に挙げる Perl4からPerl5への間に特有な罠に気をつけた +以下に挙げる Perl4 と Perl5 の違いに特有な罠に気をつけた 方が良いでしょう。 以下は順不同のリストです。 @@ -410,8 +422,8 @@ =item Discontinuance, Deprecation, and BugFix traps -修正されたperl4のバグや、なくなったperl4の仕様、 -perl5で仕様の変わったもの。 +修正された perl4 のバグや、なくなった perl4 の仕様、 +perl5 で仕様の変わったもの。 =item 構文解析に関する罠 @@ -445,7 +457,7 @@ =item Subroutine, Signal, Sorting Traps -シグナル及びシグナルハンドラー、一般的なサブルーチン、ソート、 +シグナル及びシグナルハンドラ、一般的なサブルーチン、ソート、 ソートのためのサブルーチンに関連した罠。 =item OS Traps @@ -454,7 +466,7 @@ =item DBM Traps -C<dbmopen()>の使用や、dbmの実装に関連した罠。 +C<dbmopen()> の使用や、dbm の実装に関連した罠。 =item Unclassified Traps @@ -471,21 +483,21 @@ =end original -もしここで挙げたリストにはないような変換の罠(conversion trap)の +もしここで挙げたリストにはないような変換の罠の 例を見つけたら、それを <F<perlb****@perl*****>> まで送ってください。 また、少なくともこれらのいくつかは C<use warnings> プラグマか B<-w> スイッチで捕捉できることに注意してください。 =head2 Discontinuance, Deprecation, and BugFix traps -perl4から、なくなったり修正されたことがら。 +perl4 から、なくなったり修正されたことがら。 =over 4 =item * Discontinuance -“_”で始まるシンボルはもはやpackage mainに強制的に結び付けられることは、 -C<$_>自身(とC<@->など)を除いてはなくなりました。 +“_”で始まるシンボルはもはや main パッケージに強制的に結び付けられることは、 +C<$_> 自身(と C<@-> など)を除いてはなくなりました。 package test; $_legacy = 1; @@ -518,17 +530,24 @@ # perl4 の出力: x=10 # perl5 の出力: Can't find string terminator "'" anywhere before EOF +=begin original + You can avoid this problem, and remain compatible with perl4, if you always explicitly include the package name: +=end original + +常にパッケージ名を含めることで、この問題を避けつつ、perl4 との +互換性を維持することができます: + $x = 10 ; print "x=${main'x}\n" ; -C<$:>の解析については、優先順位の罠 も参照してください。 +C<$:> の解析については、優先順位の罠 も参照してください。 =item * BugFix -C<splice()> の第二、第三引数は +C<splice()> の第 2、第 3 引数は (ラクダ本にある通り)リストコンテキストではなく スカラーコンテキストで評価されるようになりました。 @@ -594,8 +613,8 @@ =item * Discontinuance -配列ではないリストに対する繰り返し(iterating)で -あるときの C<foreach{}>の意味が変わりました。 +配列ではないリストに対する繰り返しで +あるときの C<foreach{}> の意味が変わりました。 以前はそういったリストはテンポラリな配列に代入されていましたが、 現在はそうではありません(効率上の理由です)。 これは、現在では値のコピーに対して繰り返しをするのではなく @@ -610,7 +629,7 @@ # perl4 の出力: ab:abc:bcd:def # perl5 の出力: 1:1:bcd:def -perl4と同じようにするには、自分で陽にテンポラリの配列へと +perl4 と同じようにするには、自分で陽にテンポラリの配列へと コピーしてからその配列に対して繰り返しを行います。例えば、 foreach $var (grep(/ab/, @ list)){ @@ -619,17 +638,17 @@ foreach $var (@tmp = grep(/ab/, @ list)){ -そうしないと、$varを変更したときに@listの値に影響が出ます -(これはループ変数にC<$_>を使っていて、かつ、 -C<$_>をlocalizeしていないようなサブルーチンを +そうしないと、$var を変更したときに @list の値に影響が出ます +(これはループ変数に C<$_> を使っていて、かつ、 +C<$_> を局所化していないようなサブルーチンを ループの中で呼ぶようなときに良く起こります)。 =item * Discontinuance -引数なしのC<split> の振る舞いは、C<split /\s+/> -($_が空白から始まっているときに先頭のフィールドが空になる) +引数なしの C<split> の振る舞いは、C<split /\s+/> +($_ が空白から始まっているときに先頭のフィールドが空になる) のときと同じというものから、C<split ' '> -($_が空白から始まっているときに先頭のフィールドが空にならない) +($_ が空白から始まっているときに先頭のフィールドが空にならない) のときと同じものになりました。 $_ = ' hi mom'; @@ -640,9 +659,9 @@ =item * BugFix -perl4では、B<-e>スイッチにアタッチされたテキストは無視されて、常に +perl4 では、B<-e> スイッチにアタッチされたテキストは無視されて、常に 後に続く引数からプログラムが取り出されていました。さらに、 -B<-e>スイッチの後に引数を渡さない場合も受け付けていました。 +B<-e> スイッチの後に引数を渡さない場合も受け付けていました。 これらの振る舞いは両方とも修正されました。 perl -e'print "attached to -e"' 'print "separate arg"' @@ -657,10 +676,10 @@ =item * Discontinuance -perl4ではC<push>の戻り値はドキュメントに書かれていませんでしたが、 +perl4 では C<push> の戻り値はドキュメントに書かれていませんでしたが、 実際には対象となるリストに最後にpushした値が返されていました。 -Perl5では、C<push>の戻り値はドキュメントに明記され、かつそれは -perl4から変更されました。これはpushした後のリストにある要素の数を +Perl5 では、C<push> の戻り値はドキュメントに明記され、かつそれは +perl4 から変更されました。これは push した後のリストにある要素の数を 返します。 @x = ('existing'); @@ -675,10 +694,18 @@ =item * Discontinuance +=begin original + In Perl 4, if in list context the delimiters to the first argument of C<split()> were C<??>, the result would be placed in C<@_> as well as being returned. Perl 5 has more respect for your subroutine arguments. +=end original + +Perl 4 では、リストコンテキストで C<split()> の最初の引数の +デリミタが C<??> だった場合、返される結果が C<@_> にも設定されました。 +Perl 5 ではサブルーチンの引数により多くの敬意を払います。 + =item * Discontinuance 幾つかのバグがうかつにも修正されているかもしれません :-) @@ -687,19 +714,21 @@ =head2 Parsing Traps +(パースの罠) + =begin original Perl4-to-Perl5 traps from having to do with parsing. =end original -パーズに関する Perl4-to-Perl5 の罠です。 +パースに関する Perl4 と Perl5 の違いの罠です。 =over 4 =item * Parsing -.と=の間にあるスペースに注意。 +. と = の間にあるスペースに注意。 $string . = "more string"; print $string; @@ -709,7 +738,7 @@ =item * Parsing -perl5では構文解析が改良されました。 +perl5 では構文解析が改良されました。 sub foo {} &foo @@ -730,7 +759,7 @@ =item * Parsing -C<$#array>構造の文字列展開で名前の周りにブレースがあるときには +C<$#array> 構造の文字列展開で名前の周りにブレースがあるときには 違いがあります。 @a = (1..3); @@ -745,14 +774,22 @@ # perl4 prints: {a} # perl5 prints: 2 - =back =head2 Numerical Traps +(数値の罠) + +=begin original + Perl4-to-Perl5 traps having to do with numerical operators, operands, or output from same. +=end original + +同じものに対する数値演算子、オペランド、出力に関する +Perl4 と Perl5 の違いの罠です。 + =over 5 =item * Numerical @@ -778,10 +815,10 @@ =item * Numerical -このspecific itemは削除されました。 -以前あったものでは、auto-increment演算子が符号付き整数の限界を越えたことを +ここに記述されていた項目は削除されました。 +以前あったものでは、オートインクリメント演算子が符号付き整数の限界を越えたことを 検知しないということを紹介していました。 -これは version 5.003_04で修正されましたが、大きな整数を取り扱うことに +これはバージョン 5.003_04 で修正されましたが、大きな整数を取り扱うことに 不安を感じているのであれば use Math::BigInt; @@ -790,9 +827,9 @@ =item * Numerical -数値の等価性の比較の結果を代入しても、perlではその比較の結果が -false(0)であったときにはうまくいきません。 -論理比較は、現在0ではなくnullを返します。 +数値の等価性の比較の結果を代入しても、perl ではその比較の結果が +偽 (0) であったときにはうまくいきません。 +論理比較は、現在 0 ではなく null を返します。 $p = ($test == 1); print $p,"\n"; @@ -805,12 +842,23 @@ =item * Bitwise string ops +=begin original + When bitwise operators which can operate upon either numbers or strings (C<& | ^ ~>) are given only strings as arguments, perl4 would treat the operands as bitstrings so long as the program contained a call to the C<vec()> function. perl5 treats the string operands as bitstrings. (See L<perlop/Bitwise String Operators> for more details.) +=end original + +数値としても文字列としても操作可能なビット操作演算子 (C<& | ^ ~>) が +文字列のみを引数として与えられた場合、 +perl4 は、プログラムが C<vec()> 関数の呼び出しを含んでいればオペランドを +ビット文字列として扱います。 +perl5 は文字列オペランドをビット文字列として扱います +(さらなる詳細については L<perlop/Bitwise String Operators> を参照してください)。 + $fred = "10"; $barney = "12"; $betty = $fred & $barney; @@ -831,12 +879,21 @@ =head2 General data type traps +(一般的なデータ型の罠) + +=begin original + Perl4-to-Perl5 traps involving most data-types, and their usage within certain expressions and/or context. +=end original + +ほとんどのデータ型と、それらの特定の表現やコンテキストでの +使い方に関する Perl4 と Perl5 の違いの罠です。 + =over 5 -=item * (Arrays) +=item * (配列) =begin original @@ -880,13 +937,19 @@ # perl4 の出力: # perl5 dies: hash %h defined +=begin original + Perl will now generate a warning when it sees defined(@a) and defined(%h). -=item * (Globs) +=end original + +Perl は defined(@a) と defined(%h) に警告を出すようになりました。 + +=item * (グロブ) -ある変数から別の変数へのグロブ(glob)の代入は、 -代入された変数が代入の後で局所化(localize)されているときには +ある変数から別の変数へのグロブの代入は、 +代入された変数が代入の後で局所化されているときには 失敗します。 @a = ("This is Perl 4"); @@ -897,7 +960,7 @@ # perl4 の出力: This is Perl 4 # perl5 の出力: -=item * (Globs) +=item * (グロブ) =begin original @@ -910,8 +973,8 @@ =end original -C<undef>のグロブへの代入はPerl5では何の影響も及ぼしません。 -Perl4では結び付けられたスカラーをundefineします +C<undef> のグロブへの代入は Perl5 では何の影響も及ぼしません。 +Perl4 では結び付けられたスカラーを undefine します (しかし SEGV を含め、なんらかの副作用があるかもしれません)。 Perl 5 はまた型グロブに C<undef> を代入すると警告されます。 (型グロブに C<undef> を代入するのは、型グロブに対して @@ -926,7 +989,7 @@ # perl5 prints: bar # perl5 warns: "Undefined value assigned to typeglob" if using -w -=item * (Scalar String) +=item * (スカラー文字列) (文字列に対する)単項の符号反転の意味が変わりました。 この変更は戻り値と、マジックインクリメントの両方に影響します。 @@ -939,9 +1002,9 @@ # perl4 の出力: aab : -0 : 1 # perl5 の出力: aab : -aab : aac -=item * (Constants) +=item * (定数) -perl4では定数を変更してしまいます。 +perl4 では定数を変更してしまいます。 $foo = "x"; &mod($foo); @@ -965,21 +1028,21 @@ # Modification of a read-only value attem****@foo***** line 12. # before: a -=item * (Scalars) +=item * (スカラー) -perl4とperl5とで全然違う動作: +perl4 と perl5 とで全然違う動作: print "$x", defined $x # perl 4: 1 # perl 5: <no output, $x is not called into existence> -=item * (Variable Suicide) +=item * (変数の自殺) -perl5では、変数の自殺(variable sucide)の振る舞いはより +perl5 では、変数の自殺(variable sucide)の振る舞いはより 首尾一貫したものとなりました。 -perl4ではスカラーのみがそうであるような振る舞いを、 -perl5ではハッシュとスカラーで示します。 +perl4 ではスカラーのみがそうであるような振る舞いを、 +perl5 ではハッシュとスカラーで示します。 $aGlobal{ "aKey" } = "global value"; print "MAIN:", $aGlobal{"aKey"}, "\n"; @@ -1016,6 +1079,8 @@ =head2 Context Traps - scalar, list contexts +(コンテキストの罠 - スカラーコンテキストとリストコンテキスト) + =over 5 =item * (リストコンテキスト) @@ -1029,7 +1094,7 @@ formatに対する引数リストの要素は、リストコンテキストで 評価されるようになりました。これは、今やリストの値が -展開(interpolate)できるようになったということです。 +展開できるようになったということです。 @fmt = ("foo","bar","baz"); format STDOUT= @@ -1044,8 +1109,8 @@ =item * (スカラーコンテキスト) C<caller()> 関数は呼び出し元がなく、スカラーコンテキストで呼ばれた -場合にはfalseを返すようになりました。これによりライブラリファイルが -(自分が)requireされたのかを判断することができます。 +場合には偽を返すようになりました。これによりライブラリファイルが +(自分が)require されたのかを判断することができます。 caller() ? (print "You rang?\n") : (print "Got a 0\n"); @@ -1103,8 +1168,16 @@ =head2 Precedence Traps +(評価順序の罠) + +=begin original + Perl4-to-Perl5 traps involving precedence order. +=end original + +評価順序に関する Perl4 と Perl5 の違いの罠です。 + =begin original Perl 4 has almost the same precedence rules as Perl 5 for the operators @@ -1113,8 +1186,8 @@ =end original -Perl4はほとんどの演算子でPerl5と同じ優先順位を持っています。 -しかしPerl4では、ドキュメントとは少々異なるような +Perl4 はほとんどの演算子で Perl5 と同じ優先順位を持っています。 +しかし Perl4 では、ドキュメントとは少々異なるような 一貫性に欠けるものがあります。 =over 5 @@ -1153,7 +1226,7 @@ =item * Precedence 代入演算子の優先順位は、代入と同じとなりました。 -perl4は間違って、この優先順位がassociated operatorと同じものに +perl4 は間違って、この優先順位が関連演算子と同じものに なっています。このため、式の中にあるのと同じように括弧でくくらなければ ならなくなりました。 @@ -1172,14 +1245,14 @@ $a += /foo/ ? 1 : 2; -これはCプログラマーが期待するであろう動作になりました。 +これは C プログラマーが期待するであろう動作になりました。 =item * Precedence open FOO || die; これはもはや正しくなくなりました。ここではファイルハンドルを -括弧で括る必要があります。さもなければ、perl5はこういった文を +括弧で括る必要があります。さもなければ、perl5 はこういった文を そのデフォルトの優先順位のまま放っておきます(以下の例参照)。 open(FOO || die); @@ -1189,7 +1262,7 @@ =item * Precedence -perl4は特殊変数C<$:>の優先順位に、perl5がC<$::>を main パッケージと +perl4 は特殊変数 C<$:> の優先順位に、perl5 が C<$::> を main パッケージと みなすのと同じ優先順位を与えます。 $a = "x"; print "$::a"; @@ -1199,12 +1272,12 @@ =item * Precedence -perlには、ファイルテスト演算子と代入演算子を組み合わせたときに -優先順位のバグがありました。したがって、Perl4の優先順位テーブルでは +perl には、ファイルテスト演算子と代入演算子を組み合わせたときに +優先順位のバグがありました。したがって、Perl4 の優先順位テーブルでは C<-e $foo .= "q"> は -C<((-e $foo) .= "q")>と解釈すべきなのに実際には -C<((-e $foo) .= "q")>と解釈していました。Perl5ではドキュメントに -ある通りの優先順位です。 +C<((-e $foo) .= "q")> と解釈すべきなのに実際には +C<((-e $foo) .= "q")> と解釈していました。 +Perl5 ではドキュメントにある通りの優先順位です。 -e $foo .= "q" @@ -1224,12 +1297,13 @@ =end original -perl4では、key()、each()、values()はシングルハッシュに対する -特別に高い演算子でした。しかしperl5では、これらの演算子は -通常の名前付き単項演算子となりました。ドキュメントにある通り、 -名前付き単項演算子は、C<+ - .>のような数学演算子や連結演算子よりも -低い優先順位を持っています。しかし、perl4では -これらの演算子よりもkey()などのほうが強く演算対象と結び付いていたのです。 +perl4 では、key()、each()、values() はシングルハッシュに対する +特別に高い評価順序を持った演算子でした。 +しかし perl5 では、これらの演算子は通常の名前付き単項演算子となりました。 +ドキュメントにある通り、名前付き単項演算子は、C<+ - .> のような +数学演算子や連結演算子よりも低い優先順位を持っています。 +しかし、perl4 ではこれらの演算子よりも key() などのほうが強く演算対象と +結び付いていたのです。 したがって、以下の例のようになります: %foo = 1..10; @@ -1238,12 +1312,14 @@ # perl4 prints: 4 # perl5 prints: Type of arg 1 to keys must be hash (not subtraction) -このperl4の振る舞いは便利であるかもしれませんが、一貫性に欠けます。 +この perl4 の振る舞いは便利であるかもしれませんが、一貫性に欠けます。 =back =head2 General Regular Expression Traps using s///, etc. +(s/// などを使ったときの一般的な正規表現の罠) + =begin original All types of RE traps. @@ -1258,7 +1334,7 @@ C<s'$lhs'$rhs'> はもはやいずれの辺にあっても展開されなくなりました。 以前は $lhs は展開し、$rhs を展開しませんでした。 -(文字列にあるリテラルの'$'にはいまでもマッチしません)。 +(文字列にあるリテラルの '$' にはいまでもマッチしません)。 $a=1;$b=2; $string = '1 2 $a $b'; @@ -1272,7 +1348,7 @@ C<m//g> は、その状態を正規表現ではなく検索対象の文字列に 結び付けるようになりました -(subに対するブロックのスコープが残っているのであれば、 +(sub に対するブロックのスコープが残っているのであれば、 検索文字列の状態は失われます)。 $_ = "ababab"; @@ -1287,7 +1363,7 @@ =item * 正規表現 現在のところ、C<m//o> 量指定子を無名サブルーチンの中にある正規表現で -使った場合、I<すべての>クロージャーはそのような無名サブルーチンから、 +使った場合、I<すべての> クロージャーはそのような無名サブルーチンから、 そういったクロージャの中で一番最初に使われたものの中で コンパイルされたかのような正規表現を生成します。 @@ -1306,15 +1382,15 @@ not ok not ok -この例の場合、build_match() は常にC<最初>にbuild_match()が呼ばれたときの +この例の場合、build_match() は常にC<最初>に build_match() が呼ばれたときの $left と $right の内容にマッチするようなサブルーチンを返します。 呼び出されたその時点での値ではありません。 =item * 正規表現 -マッチングの中で括弧が使われなかった場合、perl4では -C<$+>にはC<$&>と同じようにマッチした全体がセットされますが、 -Perl5ではそうではありません。 +マッチングの中で括弧が使われなかった場合、perl4 では +C<$+> には C<$&> と同じようにマッチした全体がセットされますが、 +Perl5 ではそうではありません。 "abcdef" =~ /b.*e/; print "\$+ = $+\n"; @@ -1333,7 +1409,7 @@ # perl4 の出力: 0 # perl5 の出力: -この新しい仕様に関してはL<数値に関する罠> も参照してください。 +この新しい仕様に関しては L<数値に関する罠> も参照してください。 =item * 正規表現 @@ -1366,7 +1442,7 @@ 同じスクリプトでこの例に付け加えことは、 置換後の文字列の実際の値です。 -C<[$opt]>はperl4ではキャラクタクラスであり、perl5では +C<[$opt]> は perl4 ではキャラクタクラスであり、perl5 では 配列の添え字となります。 $grpc = 'a'; @@ -1380,8 +1456,8 @@ =item * Regular Expression -perl5では、C<m?x?> はC<?x?>と同様に一回だけマッチします。perl4では、 -C</x/> や C<m!x!>と同じように何度でもマッチします。 +perl5 では、C<m?x?> は C<?x?> と同様に一回だけマッチします。 +perl4 では、C</x/> や C<m!x!> と同じように何度でもマッチします。 $test = "once"; sub match { $test =~ m?once?; } @@ -1411,7 +1487,7 @@ =end original -Perl4-to-Perl5 の罠に分類される一般的なものは +Perl4 と Perl5 の違いの罠に分類される一般的なものは シグナル、ソート、そしてそれらに関連する サブルーチンで、いくつかの OS 固有の罠を含めた サブルーチンの罠と同じ様なものです。 @@ -1420,7 +1496,7 @@ =item * (Signals) -文字列のように見える裸の単語(barewords)は、その名前が使うよりも前に +文字列のように見える裸の単語は、その名前が使うよりも前に サブルーチンの名前として定義されている場合にはサブルーチンとして みなされます。 @@ -1447,8 +1523,8 @@ =item * warn() won't let you specify a filehandle. -常にSTDERRに出力していたにもかかわらず、perl4ではwarn()はファイルハンドルの -指定を必要としていましたが、perl5では必要なくなりました。 +常に STDERR に出力していたにもかかわらず、perl4 では warn() はファイルハンドルの +指定を必要としていましたが、perl5 では必要なくなりました。 warn STDERR "Foo!"; @@ -1474,14 +1550,14 @@ =end original -HPUX及び一部のSysV OSでは、perl4のときには -シグナルが発生する度にそのシグナルハンドラー関数の中で -シグナルハンドラーを再設定しなければなりませんでした。 -perl5では、この再設定を正しく行うようになりました。 -ハンドラーを再設定しないということに依存したプログラムは +HPUX 及び一部の SysV OS では、perl4 のときには +シグナルが発生する度にそのシグナルハンドラ関数の中で +シグナルハンドラを再設定しなければなりませんでした。 +perl5 では、この再設定を正しく行うようになりました。 +ハンドラを再設定しないということに依存したプログラムは 作業しなおす必要があります。 -5.002以降のperlでは、SysVのときにはsigaction()を使います。 +5.002 以降の perl では、SysV のときには sigaction() を使います。 sub gotit { print "Got @_... "; @@ -1503,9 +1579,9 @@ =item * (SysV) -SysV OSでは、 +SysV OS では、 アペンドモード(C<<< >> >>>)でオープンしたファイルに対する -C<seek()>はfopen()マニュアルページにあるように正しく動作するように +C<seek()> は fopen() マニュアルページにあるように正しく動作するように なりました。例えば、アペンドモードでファイルをオープンした場合には 既にファイルにある情報を上書きすることはできません。 @@ -1536,14 +1612,14 @@ =end original -Perl4-to-Perl5の罠には、式や文、文脈(context)などにおける -展開(interpolated)に関するものがあります。 +Perl4 と Perl5 の違いの罠には、式や文、コンテキストなどにおける +展開に関するものがあります。 =over 5 =item * Interpolation -ダブルクォートで囲まれた文字列にある@は常に配列に展開されます。 +ダブルクォートで囲まれた文字列にある @ は常に配列に展開されます。 print "To: someo****@somew*****\n"; @@ -1562,12 +1638,12 @@ # perl4 の出力: foo is foo$, bar is bar@ # perl5 errors: Final $ should be \$ or $name -注意:perl5は、$barの終端にある@については“エラーにしません” +注意:perl5 は、$bar の終端にある @ については“エラーにしません” =item * Interpolation -Perlはダブルクォート中にあるブレースの内側の任意の式を -評価するようになりました(一般的には、C<$>やC<@>に続いて +Perl はダブルクォート中にあるブレースの内側の任意の式を +評価するようになりました(一般的には、C<$> や C<@> に続いて 開きのブレースがきたときです)。 @www = "buz"; @@ -1579,7 +1655,7 @@ # perl4 の出力: |@{w.w.w}|foo| # perl5 の出力: |buz|bar| -C<use strict;> を使って、perl5におけるこのような罠を避けることが +C<use strict;> を使って、perl5 におけるこのような罠を避けることが できることに注意してください。 =item * Interpolation @@ -1591,9 +1667,9 @@ =end original -"this is $$x" はプロセスIDを展開するようになっていましたが、 +"this is $$x" はプロセス ID を展開するようになっていましたが、 今は $x の参照外し(dereference)を試みます。 -それでもC<$$>自身は今でもきちんと動作します。 +それでも C<$$> 自身は今でもきちんと動作します。 $s = "a reference"; $x = *s; @@ -1605,10 +1681,10 @@ =item * Interpolation C<eval "EXPR"> を使ったその場(on the fly)でのハッシュの生成は -ハッシュの名前を指定するC<$>がプロテクトされているか、もしくは +ハッシュの名前を指定する C<$> がプロテクトされているか、もしくは 両方のカーリーブレースがプロテクトされていることを要求します。 -両方のカーリーブレースがプロテクトされている場合には、perl4と -perl5の結果は同じです。 +両方のカーリーブレースがプロテクトされている場合には、perl4 と +perl5 の結果は同じです。 $hashname = "foobar"; @@ -1620,14 +1696,15 @@ # perl4 の出力: Yup # perl5 の出力: Nope +以下のものを: eval "\$$hashname{'$key'} = q|$value|"; -を +次のように変更すると: eval "\$\$hashname{'$key'} = q|$value|"; -と変更すると結果はこうなります: +結果はこうなります: # perl4 の出力: Nope # perl5 の出力: Yup @@ -1636,17 +1713,15 @@ eval "\$$hashname\{'$key'\} = q|$value|"; - 結果はこうなります。 # perl4 の出力: Yup # perl5 の出力: Yup # これは両方のバージョンで同じ結果となります - =item * Interpolation -以前のバージョンにあったバグに依存しているようなperl4プログラム。 +以前のバージョンにあったバグに依存しているような perl4 プログラム。 perl -e '$bar=q/not/; print "This is $foo{$bar} perl5"' @@ -1672,13 +1747,13 @@ # perl4 prints: $baz{bar} # perl5 の出力: $ -perl5は存在しないC<$foo{bar}> を探しに行きますが、perl4は +perl5 は存在しない C<$foo{bar}> を探しに行きますが、perl4 は $foo を“baz”に展開しただけで満足します。 -C<eval>でもこの事に注意してください。 +C<eval> でもこの事に注意してください。 =item * Interpolation -C<eval>にC<qq()>された文字列を渡した場合 +C<eval> に C<qq()> された文字列を渡した場合 eval qq( foreach \$y (keys %\$x\) { @@ -1705,11 +1780,11 @@ =item * DBM -perl4で(もしくは他のdbm/ndbmツールで)作成したdbmデータベースを、 -perl5の元で同じスクリプトで扱おうとすると失敗します。 -perl5の作成において、拡張dbmの実装をC<tie>しないときに -C<dbmopen()>がデフォルトで使用する関数のために(perl4のときと同じ)同じdbm/ndbmを -リンクしていなければなりません。 +perl4 で(もしくは他の dbm/ndbm ツールで)作成した dbm データベースを、 +perl5 の元で同じスクリプトで扱おうとすると失敗します。 +perl5 の作成において、拡張 dbm の実装を C<tie> しないときに +C<dbmopen()> がデフォルトで使用する関数のために +(perl4 のときと同じ)同じ dbm/ndbm をリンクしていなければなりません。 dbmopen (%dbm, "file", undef); print "ok\n"; @@ -1738,6 +1813,8 @@ =head2 Unclassified Traps +(未分類の罠) + =begin original Everything else. @@ -1748,9 +1825,9 @@ =over 5 -=item * C<require>/C<do>の戻り値を使ったときの罠 +=item * C<require>/C<do> の戻り値を使ったときの罠 -doit.plというファイルが +doit.pl というファイルが sub foo { $rc = do "./do.pl"; @@ -1758,7 +1835,7 @@ } print &foo, "\n"; -であって、do.plが以下のような内容だったとすると、 +であって、do.pl が以下のような内容だったとすると、 return 3; @@ -1769,7 +1846,7 @@ C<do> を C<require> に置き換えても同じ振る舞いとなります。 -=item * 空文字列にLIMITを指定してC<split>を使った場合 +=item * 空文字列に LIMIT を指定して C<split> を使った場合 $string = ''; @list = split(/foo/, $string, 2) @@ -1788,4 +1865,3 @@ いつものように、バグとして公式に宣言されたものがあれば、 それは修正されて取り除かれるでしょう。 -