argra****@users*****
argra****@users*****
2007年 11月 20日 (火) 04:33:11 JST
Index: docs/perl/5.8.8/perlsyn.pod diff -u docs/perl/5.8.8/perlsyn.pod:1.3 docs/perl/5.8.8/perlsyn.pod:1.4 --- docs/perl/5.8.8/perlsyn.pod:1.3 Wed Nov 14 02:55:00 2007 +++ docs/perl/5.8.8/perlsyn.pod Tue Nov 20 04:33:11 2007 @@ -48,13 +48,12 @@ =end original Perl の多くの文法要素は B<省略可能> です。 -Rather than -requiring you to put parentheses around every function call and -declare every variable, you can often leave such explicit elements off -and Perl will figure out what you meant. This is known as B<Do What I -Mean>, abbreviated B<DWIM>. It allows programmers to be B<lazy> and to -code in a style with which they are comfortable. -(TBT) +全ての関数をかっこで括ったり、全ての変数を宣言したりすることを +要求するのではなく、しばしばそのような明示的な要素を置いておいて、 +Perl にあなたが意味しているところを見つけ出させることができます。 +これは B<Do What I Mean> と知られ、頭文字を取って B<DWIM> と呼ばれます。 +これによって、プログラマを B<怠惰> にでき、彼らが快適だと思うスタイルで +コーディングできるようにします。 =begin original @@ -78,6 +77,8 @@ =head2 Declarations X<declaration> X<undef> X<undefined> X<uninitialized> +(宣言) + =begin original The only things you need to declare in Perl are report formats and @@ -97,14 +98,14 @@ (サブルーチンすら宣言が不要な場合もあります)。 変数は、C<undef> 以外の定義された値を代入されるまでは未定義値(C<undef>)と なります。 -When used as a number, -C<undef> is treated as C<0>; when used as a string, it is treated as -the empty string, C<"">; and when used as a reference that isn't being -assigned to, it is treated as an error. If you enable warnings, -you'll be notified of an uninitialized value whenever you treat -C<undef> as a string or a number. Well, usually. Boolean contexts, -such as: -(TBT) +数値として使われる場合、C<undef> は C<0> として扱われます; +文字列として使われる場合、これは空文字列 C<""> として扱われます; +リファレンストして使われる場合、これは何も代入されていないので、エラーとして +扱われます。 +警告を有効にしているなら、C<undef> を文字列や数値として扱おうとすると +未初期価値を指摘されます。 +ええ、普通は。 +次のような真偽値コンテキストなら: my $a; if ($a) {} @@ -117,7 +118,7 @@ =end original -とすると(定義済みかどうかではなく、真を考慮するので)警告から免れます。 +(定義済みかどうかではなく、真かどうかを考慮するので)警告から免れます。 未定義の左辺値を操作する、C<++>, C<-->, C<+=>, C<-=>, C<.=> のような 演算子でも: @@ -184,7 +185,8 @@ myname() 関数は、リスト演算子のように働くのであり、単項演算子としてでは ないということに注意してください。 -ですから、こういった場合に C<||> の代わりに C<or> を使うことに注意しましょう。 +ですから、こういった場合に C<||> の代わりに C<or> を使うことには +注意してください。 しかし、サブルーチンを C<sub myname ($)> のように宣言しているのであれば、 C<or> でも C<||> でもうまく行きます。 @@ -199,7 +201,7 @@ サブルーチンの宣言は C<require> 文を使って詰め込むこともできますし、 C<use> 文を使って自分の名前空間にロードしたりインポートしたりすることが できます。 -詳細は L<perlmod> を参照してください。 +これに関する詳細は L<perlmod> を参照してください。 =begin original @@ -220,6 +222,8 @@ =head2 Comments X<comment> X<#> +(コメント) + =begin original Text from a C<"#"> character until the end of the line is a comment, @@ -234,6 +238,8 @@ =head2 Simple Statements X<statement> X<semicolon> X<expression> X<;> +(単純文) + =begin original The only kind of simple statement is an expression evaluated for its @@ -261,6 +267,8 @@ =head2 Truth and Falsehood X<truth> X<falsehood> X<true> X<false> X<!> X<not> X<negation> X<0> +(真偽値) + =begin original The number 0, the strings C<'0'> and C<''>, the empty list C<()>, and @@ -282,6 +290,8 @@ X<statement modifier> X<modifier> X<if> X<unless> X<while> X<until> X<foreach> X<for> +(文修飾子) + =begin original Any simple statement may optionally be followed by a I<SINGLE> modifier, @@ -290,8 +300,8 @@ =end original -任意の単純文には、B<一つ> の修飾子を終端のセミコロンの直前 -(もしくはブロックの終端の直前)に付けることができます。 +任意の単純文には、B<一つ> の修飾子を終端のセミコロンの直前(もしくは +ブロックの終端の直前)に付けることができます。 使うことのできる修飾子は以下の通りです。 if EXPR @@ -332,7 +342,7 @@ =end original -C<foreach> 修飾子は反復子です。 +C<foreach> 修飾子は反復子です: LIST の値それぞれ毎に文を実行します(実行中は C<$_> がそれぞれの値の エイリアスとなります)。 @@ -364,9 +374,9 @@ =end original -修飾子 C<while> と C<until> もまた、一般的な "while loop" の意味を -持っています(条件が最初に評価される)が、do ブロック(もしくは現在では -使用を推奨されていない do サブルーチン文)に適用されるときは例外で、 +修飾子 C<while> と C<until> は、一般的な "C<while> loop" の意味を +持っています(条件が最初に評価される)が、C<do>-ブロック(もしくは現在では +使用を推奨されていない C<do>-サブルーチン文)に適用されるときは例外で、 このときは条件が評価されるよりも前に、一度ブロックが実行されます。 このため、次のようなループを記述することができます。 @@ -392,7 +402,8 @@ 申し訳ない。 こういった場合に対処するのに別のブロックを内側に入れたり(C<next> の場合)、 別のブロックで囲む(C<last> の場合)という方法が常に使えます。 -C<next> では単に中かっこを二重にします。 +C<next> では単に中かっこを二重にします: +X<next> X<last> X<redo> do {{ next if $x == $y; @@ -440,6 +451,8 @@ X<statement, compound> X<block> X<bracket, curly> X<curly bracket> X<brace> X<{> X<}> X<if> X<unless> X<while> X<until> X<foreach> X<for> X<continue> +(複合文) + =begin original In Perl, a sequence of statements that defines a scope is called a block. @@ -451,8 +464,8 @@ Perl では、スコープを定義するような文の並びをブロックと呼びます。 ブロックはそれを含むファイルによって範囲が定められることがあります -(ファイルが require されたときか、プログラム全体としての場合)が、 -(eval における)文字列の展開によって範囲が定められることもあります。 +(ファイルが require されたときか、プログラム全体としての場合)し、 +文字列の展開によって範囲が定められる(eval の場合)こともあります。 =begin original @@ -470,7 +483,7 @@ =end original -以下に挙げる複合文を制御フローとして使うことができます。 +以下に挙げる複合文を制御フローとして使うことができます: if (EXPR) BLOCK if (EXPR) BLOCK else BLOCK @@ -496,9 +509,9 @@ しかし注意して欲しいのは、C や Pascal とは異なり、ブロックを取るように 定義されていて文を取るではないということです。 -つまり、中かっこは I<必要なもの> で、曖昧な文が許されないということです。 +つまり、中かっこは I<必要なもの> です -- 曖昧な文が許されません。 中かっこなしの条件文を使いたいのであれば、いくつかのやり方があります。 -以下にその例を示します。 +以下の全ては同じことです: if (!open(FOO)) { die "Can't open $FOO: $!"; } die "Can't open $FOO: $!" unless open(FOO); @@ -518,8 +531,7 @@ C<if> 文は明解です。 ブロックは常に中かっこで区切られるので、C<if> と C<else> の対応が 曖昧になるようなことは決してありません。 -C<unless> を C の C<if> のように使いたいのであれば、 -検査を反転します。 +C<unless> を C の C<if> のように使いたいのであれば、検査を反転します。 =begin original @@ -541,14 +553,14 @@ C<while> 文は、式が真(評価した結果が空文字列 C<""> でも C<0> でも C<"0"> でもない)である間、ブロックを実行します。 C<until> 文は、式が偽である間、ブロックを実行します。 -ラベルは省略可能ですが、ある場合には、コロンを伴った識別子になります。 +LABEL は省略可能ですが、ある場合には、コロンを伴った識別子になります。 LABEL は C<next>、C<last>、C<redo> といったループ制御文のループを規定します。 LABEL が省略された場合、ループ制御文はそれを含むループの中で最も内側の ループを参照します。 これは、実行時に LABEL を検出するための呼び出しスタックの動的な後戻り検索を 含むことができます。 -そのような推奨されない振る舞いは、C<use warnings> プラグマや -B<-w> フラグを使った場合には警告の引き金となります。 +そのような推奨されない振る舞いは、C<use warnings> プラグマや B<-w> フラグを +使った場合には警告を引き起こします。 =begin original @@ -568,13 +580,15 @@ =head2 Loop Control X<loop control> X<loop, control> X<next> X<last> X<redo> X<continue> +(loop 制御) + =begin original The C<next> command starts the next iteration of the loop: =end original -C<next> コマンドはループの次の繰り返しを開始します。 +C<next> コマンドはループの次の繰り返しを開始します: LINE: while (<STDIN>) { next LINE if /^#/; # discard comments @@ -589,7 +603,7 @@ =end original C<last> コマンドはループから即座に脱出します。 -C<continue> ブロックがあった場合、それは実行されません。 +C<continue> ブロックがあっても、それは実行されません: LINE: while (<STDIN>) { last LINE if /^$/; # exit when done with header @@ -639,7 +653,7 @@ =end original -もっとはっきりと書くと以下のようになります。 +これは Perl の省略記法で、もっとはっきりと書くと以下のようになります: LINE: while (defined($line = <ARGV>)) { chomp($line); @@ -728,6 +742,8 @@ =head2 For Loops X<for> X<foreach> +(for ループ) + =begin original Perl's C-style C<for> loop works like the corresponding C<while> loop; @@ -737,7 +753,7 @@ Perl の C 形式の C<for> ループは、対応する C<while> ループと同様に 動作します。 -つまり、 +つまり、以下のものは: for ($i = 1; $i < 10; $i++) { ... @@ -749,7 +765,7 @@ =end original -これは以下のものと同じです。 +以下のものと同じです: $i = 1; while ($i < 10) { @@ -768,9 +784,9 @@ =end original -小さな違いが一つあります: -C<for> の初期化部で C<my> を使って変数が宣言された場合、この変数のレキシカル -スコープは C<for> ループ (ループ本体と制御部) と完全に同じです。 +小さな違いが一つあります: C<for> の初期化部で C<my> を使って変数が +宣言された場合、この変数のレキシカルスコープは C<for> ループ +(ループ本体と制御部) と完全に同じです。 X<my> =begin original @@ -786,9 +802,9 @@ 通常の、配列に対する添え字付けのループのほかにも、C<for> は他の 多くの興味深いアプリケーションのために借用することができます。 -以下の例は、対話的なファイルのディスクリプターの終端を明示的に -検査してしまうとプログラムをハングアップしたように見えてしまう問題を -回避するものです。 +以下の例は、対話的なファイル記述子の終端を明示的に検査してしまうと +プログラムをハングアップしたように見えてしまう問題を回避するものです。 +X<eof> X<end-of-file> X<end of file> $on_a_tty = -t STDIN && -t STDOUT; sub prompt { print "yes? " if $on_a_tty } @@ -805,11 +821,10 @@ =end original -Using C<readline> (or the operator form, C<< <EXPR> >>) as the -conditional of a C<for> loop is shorthand for the following. This -behaviour is the same as a C<while> loop conditional. +C<for> ループの条件として C<readline> (または演算子形式の C<< <EXPR> >>) を +使う場合、以下のように省略形が使えます。 +この振る舞いは C<while> ループ条件と同じです。 X<readline> X<< <> >> -(TBT) for ( prompt(); defined( $_ = <STDIN> ); prompt() ) { # do something @@ -818,6 +833,8 @@ =head2 Foreach Loops X<for> X<foreach> +(foreach ループ) + =begin original The C<foreach> loop iterates over a normal list value and sets the @@ -833,15 +850,15 @@ =end original -C<foreach> ループは 通常のリスト値に対しての繰り返しを行い、変数 -VAR にリストの要素を繰り返し一回に一つずつセットします。 +C<foreach> ループは 通常のリスト値に対しての繰り返しを行い、変数 VAR に +リストの要素を繰り返し一回に一つずつセットします。 変数の前に C<my> というキーワードが置かれていた場合、その変数は レキシカルスコープを持ち、したがってそれはループの中でのみ可視となります。 このキーワードがなければ、変数はループに対してローカルとなり、ループを 抜けた後で以前の値が再度取得されます。 変数が事前に C<my> を使って宣言されていたならば、グローバルなものの 代わりにその変数を使いますが、それもループにローカルなものとなります。 -この暗黙の local 化は C<foreach> の中で I<のみ> 起きます。 +この暗黙のローカル化は C<foreach> の中で I<のみ> 起きます。 X<my> X<local> =begin original @@ -871,10 +888,10 @@ =end original -LIST の要素のいずれかが左辺値であった場合、ループの中で -VAR を変更することにより、対応する値を変更することができます。 -逆に、LIST の要素のうち 1 つでも左辺値でない場合は、この要素を -修正しようとしても失敗します。 +LIST の要素が左辺値であった場合、ループの中で VAR を変更することにより、 +対応する値を変更することができます。 +逆に、LIST の要素が左辺値でない場合は、この要素を修正しようとしても +失敗します。 言い換えると、C<foreach> ループの帰納変数がループの対象となっている リスト中の個々のアイテムに対するエイリアスになっているからです。 X<alias> @@ -936,7 +953,7 @@ =end original 以下の例は、C プログラマーが Perl でとあるアルゴリズムを記述するときに -使うであろうやり方です。 +使うであろうやり方です: for (my $i = 0; $i < @ary1; $i++) { for (my $j = 0; $j < @ary2; $j++) { @@ -956,7 +973,7 @@ =end original それに対して、次の例は Perl プログラマーが同じことをよりゆったりとして -行うやり方です。 +行うやり方です: OUTER: for my $wid (@ary1) { INNER: for my $jet (@ary2) { @@ -990,6 +1007,8 @@ =head2 Basic BLOCKs and Switch Statements X<switch> X<block> X<case> +(基本ブロックと switch 文) + =begin original A BLOCK by itself (labeled or not) is semantically equivalent to a @@ -1016,7 +1035,7 @@ =end original -BLOCK 構造は case 構造を行うのに都合が良いです。 +ブロック構造は case 構造を行うのに都合が良いです。 SWITCH: { if (/^abc/) { $abc = 1; last SWITCH; } @@ -1054,10 +1073,10 @@ =end original -after which one has switch and case. It is not as fast as it could be -because it's not really part of the language (it's done using source -filters) but it is available, and it's very flexible. -(TBT) +とした後で switch と case が使えます。 +本当に言語の一部と言うわけではない(これはソースフィルタを使って +実現されています)ので、それほど早くはないですが、ともかくこれは利用可能で、 +とても柔軟です。 =begin original @@ -1065,7 +1084,7 @@ =end original -先の BLOCK 構造の例に加え、次のように書くこともできます。 +先のブロック構造の例に加え、次のように書くこともできます。 SWITCH: { $abc = 1, last SWITCH if /^abc/; @@ -1108,7 +1127,7 @@ =end original -書式付けしてより“適切な”C<switch> 文のようにします。 +書式付けしてより「適切な」C<switch> 文のようにします: SWITCH: { /^abc/ && do { @@ -1218,7 +1237,7 @@ =end original -またはあなたが C<&&> 節が真であることに確信を持っているのなら、 +またはあなたが全ての C<&&> 節が真であることに確信を持っているのなら、 以下のように C<HTTP_USER_AGENT> 環境変数の値に応じて "switch" できます。 #!/usr/bin/perl @@ -1259,6 +1278,8 @@ =head2 Goto X<goto> +(goto 文) + =begin original Although not for the faint of heart, Perl does support a C<goto> @@ -1293,7 +1314,8 @@ また、最適化されて無くなってしまうような構造へ飛び込むこともできません。 動的スコープの中以外のほとんどの場所へは、サブルーチンの 外も含めて移動することができます。 -しかし、通常は C<last> や C<die> のような別のやり方を使ったほうが良いでしょう。 +しかし、通常は C<last> や C<die> のような別のやり方を使ったほうが +良いでしょう。 Perl の作者は、未だかつてこの形式の C<goto> を使うことが 必要だと感じたことはありません(Perl の場合です。C の場合はまた別の話です)。 @@ -1324,7 +1346,7 @@ =end original -C<goto>-&NAME は高度にmagicalで、名前付きサブルーチンの呼び出しを +C<goto>-&NAME は高度にマジカルで、名前付きサブルーチンの呼び出しを カレントで実行されているサブルーチンに置き換えます。 これは別のサブルーチンをロードして、最初の場所で呼び出された 別のサブルーチンを要求することをしようとする @@ -1353,6 +1375,8 @@ =head2 PODs: Embedded Documentation X<POD> X<documentation> +(POD: 組み込みドキュメント) + =begin original Perl has a mechanism for intermixing documentation with source code. @@ -1416,7 +1440,7 @@ 認識できるのに、pod トランスレータは pod 指示子で始まっている パラグラフのみに注目すべき(これは構文解析を簡単にするためです)で あるということに注意して下さい。 -つまり、以下の例にある secret stuff はコンパイラからも、 +つまり、以下の例にある "secret stuff" はコンパイラからも、 トランスレータからも無視されるということです。 $a=3; @@ -1465,7 +1489,7 @@ これを使うことによって、エラーメッセージや警告メッセージにある ファイル名や行番号を制御することができます (特に、C<eval()> で処理される文字列のために)。 -この仕組みの構文は C のプリプロセッサとほとんど同じで、正規表現 +この仕組みの構文は C のプリプロセッサとほとんど同じで、正規表現: # example: '# line 42 "new_filename.plx"' /^\# \s* @@ -1492,11 +1516,10 @@ =end original -There is a fairly obvious gotcha included with the line directive: -Debuggers and profilers will only show the last source line to appear -at a particular line number in a given file. Care should be taken not -to cause line number collisions in code you'd like to debug later. -(TBT) +行指示子にはかなり明らかな技があります。 +デバッガとプロファイラは、与えられたファイルの特定の行番号に対して現れた +最新のソース行のみを表示します。 +あとでデバッグしたいコードでは行番号の衝突が起きないように注意するべきです。 =begin original