argra****@users*****
argra****@users*****
2008年 6月 8日 (日) 04:59:01 JST
Index: docs/perl/5.10.0/perlsub.pod diff -u docs/perl/5.10.0/perlsub.pod:1.1 docs/perl/5.10.0/perlsub.pod:1.2 --- docs/perl/5.10.0/perlsub.pod:1.1 Wed May 14 05:37:28 2008 +++ docs/perl/5.10.0/perlsub.pod Sun Jun 8 04:59:01 2008 @@ -140,12 +140,12 @@ =end original Perl での関数呼び出しと戻り値のモデルは単純です。全ての関数は引数を、 -平坦で一つのスカラーのリストで受け取り、同様に全ての関数は呼び出し元に -対して平坦で一つのスカラーのりストで返すというものです。 +平坦で一つのスカラのリストで受け取り、同様に全ての関数は呼び出し元に +対して平坦で一つのスカラのりストで返すというものです。 これらの呼び出しリストと戻り値リストにある全ての配列とハッシュは、 潰されてそのアイデンティティを失います。 しかし、これを避けるために常にリファレンスで渡すことができます。 -呼び出しリストと戻り値リストの両方とも好きなだけの数のスカラーを +呼び出しリストと戻り値リストの両方とも好きなだけの数のスカラを 保持することができます(明確な return 文のない関数はしばしばサブルーチンと 呼ばれますが、Perl の定義上はこれらの間に何の違いもありません)。 @@ -171,7 +171,7 @@ したがって、ある関数を二つの引数を付けて呼び出したならば、 その引数は C<$_[0]> と C<$_[1]> に格納されます。 配列 C<@_> は local 配列ですが、その要素は実際の -スカラーパラメーターの別名です。 +スカラパラメータの別名です。 たとえば C<$_[0]> が更新された場合、対応する引数が更新されます (更新できない場合にはエラーとなります)。 引数が、配列やハッシュの(関数が呼び出された時点では存在してない) @@ -196,10 +196,10 @@ サブルーチンから脱出するために使われた C<return> 文が 使われることもありますし、サブルーチン呼び出しのコンテキストによって -適切なコンテキスト(リスト、スカラー、無効)で評価される戻り値の指定を +適切なコンテキスト(リスト、スカラ、無効)で評価される戻り値の指定を 省略する事が可能です。 もし何の戻り値も指定しなければ、サブルーチンはリストコンテキストにおいては -空リストを返し、スカラーコンテキストにおいては未定義値を返し、 +空リストを返し、スカラコンテキストにおいては未定義値を返し、 無効コンテキストではなにも返しません。 =begin original @@ -212,12 +212,11 @@ =end original -If no C<return> is found and if the last statement is an expression, its -value is returned. If the last statement is a loop control structure -like a C<foreach> or a C<while>, the returned value is unspecified. The -empty sub returns the empty list. +C<return> がなく、最後の文が式だった場合、その値が返されます。 +最後の文が C<foreach> や C<while> のようなループ制御構造だった場合、 +返される値は不定です。 +空のサブルーチンは空リストを返します。 X<subroutine, return value> X<return value> X<return> -(TBT) =begin original @@ -352,7 +351,7 @@ =end original -C<upcase_in()> 関数を安全なものにするには、パラメーターそのものを +C<upcase_in()> 関数を安全なものにするには、パラメータそのものを 書き換えるのではなくそのコピーを返すように記述するようにします: ($v3, $v4) = upcase($v1, $v2); # this doesn't change $v1 and $v2 @@ -374,10 +373,10 @@ =end original -この(プロトタイプがついていない)関数が自分に対して本当のスカラーが +この(プロトタイプがついていない)関数が自分に対して本当のスカラが 渡されたのか配列が渡されたのかを気にしていないということに注意してください。 Perl は一つの巨大な平坦な(リストの中にリストが含まれることはない、 -ということ) C<@_> パラメーターリストとして全ての引数を見るのです。 +ということ) C<@_> パラメータリストとして全ての引数を見るのです。 これは Perl の単純な引数渡しの形式のやり方の一つです。 この C<upcase()> 関数は、以下のような呼び出しをした場合でも C<upcase()> の 定義を変更することなく完璧に動作します: @@ -551,8 +550,7 @@ =end original -Synopsis: -(TBT) +概要: my $foo; # declare $foo lexically local my (@wid, %get); # declare list of variables local @@ -658,7 +656,7 @@ my() に対するパラーメータリストには、お望みとあらば変数を初期化するための 代入を行うことができます(変数に対して初期値が与えられなければ、 その変数は未定義値を使って生成されます)。 -一般的にこの機能はサブルーチンに対する入力パラメーターに名前を付けるために +一般的にこの機能はサブルーチンに対する入力パラメータに名前を付けるために 使われています。例を挙げましょう: $arg = "fred"; # "global" variable @@ -683,7 +681,7 @@ C<my> は、あなたが代入を行いたいと考えている何かに対する修飾子です。 ですから、引数リストの中にある変数に対して代入を行うときには C<my> は -それらの変数がスカラーとして見えているのか配列として見えているかという +それらの変数がスカラとして見えているのか配列として見えているかという 状態を変えることはありません。ですから、 my ($foo) = <STDIN>; # WRONG? @@ -705,7 +703,7 @@ =end original -これはスカラーコンテキストを与えます。しかし、以下のような宣言を +これはスカラコンテキストを与えます。しかし、以下のような宣言を 行った場合、一つの変数だけが有効です: my $foo, $bar = 1; # WRONG @@ -804,9 +802,8 @@ 同様に、この条件構造文では、$answer のスコープはその宣言から条件構造文の C<elsif> と C<else> ブロックを含む残りの部分まで拡張されますが、 それを越えることはありません。 -See L<perlsyn/"Simple statements"> for information -on the scope of variables in statements with modifiers. -(TBT) +就職子付きの文の変数のスコープに関する情報については +L<perlsyn/"Simple statements"> を参照してください。 =begin original @@ -1012,10 +1009,10 @@ =end original -There are two ways to build persistent private variables in Perl 5.10. -First, you can simply use the C<state> feature. Or, you can use closures, -if you want to stay compatible with releases older than 5.10. -(TBT) +Perl 5.10 で永続的プライベート変数を構築するには二つの方法があります。 +一つ目は単に C<state> 機能を使うことです。 +あるいは、5.10 よりも古いリリースとの互換性を維持したいなら、クロージャを +使うことです。 =head3 Persistent variables via state() @@ -1028,11 +1025,11 @@ =end original -Beginning with perl 5.9.4, you can declare variables with the C<state> -keyword in place of C<my>. For that to work, though, you must have -enabled that feature beforehand, either by using the C<feature> pragma, or -by using C<-E> on one-liners. (see L<feature>) -(TBT) +perl 5.9.4 から、C<my> の代わりに C<state> キーワードを使って変数を +宣言できます。 +しかし、これを働かせるには、C<feature> プラグマを使うか、一行野郎では +C<-E> を使うことで予めこの機能を有効にしなければなりません。 +(L<feature> を参照してください) =begin original @@ -1041,9 +1038,8 @@ =end original -For example, the following code maintains a private counter, incremented -each time the gimme_another() function is called: -(TBT) +例えば、以下のコードはプライベートなカウンタを管理し、gimme_another() 関数が +呼び出されるたびにカウンタを増加させます: use feature 'state'; sub gimme_another { state $x; return ++$x } @@ -1055,9 +1051,8 @@ =end original -Also, since C<$x> is lexical, it can't be reached or modified by any Perl -code outside. -(TBT) +また、C<$x> はレキシカルなので、その外側の Perl コードからアクセスすることは +できません。 =begin original @@ -1076,6 +1071,8 @@ =head3 Persistent variables with closures +(クロージャでの永続変数) + =begin original Just because a lexical variable is lexically (also called statically) @@ -1324,6 +1321,8 @@ =head3 Grammatical note on local() X<local, context> +(local() の文法的注意) + =begin original A C<local> is simply a modifier on an lvalue expression. When you assign to @@ -1333,7 +1332,7 @@ =end original C<local> は左辺値に対する単なる修飾子です。 -局所化された変数に代入を行ったとき、C<local> はそのリストがスカラーとして +局所化された変数に代入を行ったとき、C<local> はそのリストがスカラとして 見えているのか配列として見えているかということを変えることはありません。 ですから、 @@ -1356,11 +1355,13 @@ =end original -これはスカラーコンテキストを与えます. +これはスカラコンテキストを与えます. =head3 Localization of special variables X<local, special variable> +(特殊変数のローカル化) + =begin original If you localize a special variable, you'll be giving a new value to it, @@ -1380,8 +1381,7 @@ =end original -This feature allows code like this to work : -(TBT) +この機能は以下のようなコードが動作するようにします: # Read the whole contents of FILE in $slurp { local $/ = undef; $slurp = <FILE>; } @@ -1410,7 +1410,7 @@ =end original -Similarly, but in a way more difficult to spot, the following snippet will +同様ですが、in a way more difficult to spot, the following snippet will die in perl 5.9.0 : (TBT) @@ -1426,8 +1426,7 @@ =end original -See next section for an alternative to this situation. -(TBT) +この状況への代替案については次の節を参照してください。 =begin original @@ -1455,14 +1454,15 @@ =head3 Localization of globs X<local, glob> X<glob> +(グロブのローカル化) + =begin original The construct =end original -The construct -(TBT) +以下のような構造は local *name; @@ -1514,6 +1514,8 @@ =head3 Localization of elements of composite types X<local, composite type element> X<local, array element> X<local, hash element> +(複合型の要素のローカル化) + =begin original It's also worth taking a moment to explain what happens when you @@ -1628,8 +1630,8 @@ =end original -サブルーチンと、代入の右側のスカラー/リストコンテキストは -サブルーチン呼び出しがスカラーに置き換えられたかのようにして +サブルーチンと、代入の右側のスカラ/リストコンテキストは +サブルーチン呼び出しがスカラに置き換えられたかのようにして 決定されます。例として、以下を考えると: data(2,3) = get_data(3,4); @@ -1640,7 +1642,7 @@ =end original -両方のサブルーチンはスカラーコンテキストで呼び出され、一方: +両方のサブルーチンはスカラコンテキストで呼び出され、一方: (data(2,3)) = get_data(3,4); @@ -1673,9 +1675,7 @@ =end original -They appear to be convenient, but there are several reasons to be -circumspect. -(TBT) +これは便利なようですが、慎重になるべきいくつかの理由があります。 =begin original @@ -1772,7 +1772,7 @@ =end original 型グロブは評価されたときにその名前を持つ全てのオブジェクト(ファイルハンドル、 -フォーマット、サブルーチンも含まれます)を表すスカラー値を生成します。 +フォーマット、サブルーチンも含まれます)を表すスカラ値を生成します。 代入が行われたとき、C<*> は代入したものを反映するようになります。例えば: sub doubleary { @@ -1795,9 +1795,9 @@ =end original -スカラーは既に参照渡しされているので、陽に C<$_[0]> などで参照して -この機構を使わなくてもスカラー引数を変更することができます。 -全ての要素がスカラーとして渡された配列の要素はすべて +スカラは既に参照渡しされているので、陽に C<$_[0]> などで参照して +この機構を使わなくてもスカラ引数を変更することができます。 +全ての要素がスカラとして渡された配列の要素はすべて 変更することができますが、C<push>、C<pop>、もしくは配列のサイズを 変更するためには C<*> 機構(もしくは同等のリファレンス機構)を 使う必要があります。 @@ -1835,7 +1835,7 @@ C<my> があるにも関らず、今でも C<local> 演算子を使うべき場所が三ヶ所あります。 実際にはその三ヶ所においては、C<my> ではなく、B<必ず> C<local> を -使わなければなりません +使わなければなりません。 =over 4 @@ -1859,9 +1859,9 @@ =end original C<@ARGV> だとか句読点変数(punctuation variables)のようなグローバル変数では、 -局所化のために C<local()> を使わなければなりません。以下のブロックは -F</etc/motd> を読み込み、等価記号を使って行の塊を分割し、その結果を -C<@Fields> に格納します。 +局所化のために C<local()> を使わなければなりません。 +以下のブロックは F</etc/motd> を読み込み、等価記号を使って行の塊を分割し、 +その結果を C<@Fields> に格納します。 { local @ARGV = ("/etc/motd"); @@ -1918,7 +1918,7 @@ =end original -無名シンボルテーブルをせいせいする方法については、Symbol モジュールを +無名シンボルテーブルを生成する方法については、Symbol モジュールを 参照してください。 =begin original @@ -1966,8 +1966,8 @@ =end original -一つの要素だけを局所化することが可能です。通常はこれは動的に -行われます。 +一つの要素だけを局所化することが可能です。 +通常はこれは動的に行われます。 { local $SIG{INT} = 'IGNORE'; @@ -2067,7 +2067,8 @@ とはいうものの、これは通常のリストを返す機構を使っています。 ハッシュを渡そうとしたり、ハッシュを返そうとすると何が起きるのでしょうか? そうです、引数の一つだけを使い引数の連結が行われることを気にしなければ -通常の呼び出し規約と同じことです。ただし、少々高くつきます。 +通常の呼び出し規約と同じことです。 +ただし、少々高くつきます。 =begin original @@ -2090,8 +2091,8 @@ =end original -これらの構文は単純にうまくいきません。戻り値は C<@a>や C<%a>だけに -セットされて、C<@b> や C<%b> はクリアーされます。 +これらの構文は単純にうまくいきません。 +戻り値は C<@a>や C<%a>だけにセットされて、C<@b> や C<%b> はクリアされます。 それに加え、この関数は引数として二つの配列、二つのハッシュを受け取りません。 受け取るのは常に C<@_> に格納されている(二つの引数の内容が連結された)一つの 長いリストなのです。 @@ -2298,9 +2299,8 @@ バックスラッシュが付けられたプロトタイプキャラクターは、実引数が そのキャラクターで始まるものでなければならないことを表します。 -C<@_> の一部として渡された引数は、 -そのサブルーチン呼び出しにおいて与えられた実引数に -C<\> を適用したリファレンスとなります。 +C<@_> の一部として渡された引数は、そのサブルーチン呼び出しにおいて +与えられた実引数に C<\> を適用したリファレンスとなります。 =begin original @@ -2309,9 +2309,7 @@ =end original -You can also backslash several argument types simultaneously by using -the C<\[]> notation: -(TBT) +C<\[]> 記法を使うことで、複数の引数型を同時にバックスラッシュ指定できます: sub myref (\[$@%&*]) @@ -2321,8 +2319,7 @@ =end original -will allow calling myref() as -(TBT) +というのは以下のように myref() を呼び出すのを許し: myref $var myref @array @@ -2337,9 +2334,8 @@ =end original -and the first argument of myref() will be a reference to -a scalar, an array, a hash, a code, or a glob. -(TBT) +myref() の最初の引数は スカラ、配列、ハッシュ、コード、グロブのいずれかへの +リファレンスです。 =begin original @@ -2354,7 +2350,7 @@ バックスラッシュが付けられていないキャラクターは特別な意味を持っています。 バックスラッシュを付けられていない すべての C<@> とC<%> は残りの引数全てを とってしまい、さらにリストコンテキストを強制します。 -C<$> で表される引数はスカラーコンテキストを強制されます。 +C<$> で表される引数はスカラコンテキストを強制されます。 第一引数として渡された場合、C<&>は C<sub> キーワードや連続したカンマを 要求しないような無名サブルーチンを要求します。 @@ -2369,9 +2365,9 @@ =end original -c<*>は、スロットにある裸の単語、定数、スカラー式、型グロブ、 +c<*>は、スロットにある裸の単語、定数、スカラ式、型グロブ、 型グロブに対するリファレンスを許しています。 -その値はサブルーチンにとって単純なスカラーとすることも +その値はサブルーチンにとって単純なスカラとすることも 型グロブに対するリファレンスにもなります。 そのような引数を常に型グロブリファレンスに変換したい場合は、 Symbol::qualify_to_ref() を以下のように使います: @@ -2401,10 +2397,8 @@ =end original -As the last character of a prototype, or just before a semicolon, you can -use C<_> in place of C<$>: if this argument is not provided, C<$_> will be -used instead. -(TBT) +プロトタイプの最後の文字、あるいはセミコロンの直前に、C<$> の代わりに +C<_> を使えます: 引数が与えられない場合、C<$_> が代わりに使われます。 =begin original @@ -2551,7 +2545,7 @@ 新しい関数にプロトタイプを付けるのがおそらく最善であり、古い関数に対して プロトタイプを付けることはよくありません。 なぜなら、(プロトタイプを付けたことによって)リストコンテキストと -スカラーコンテキストを黙って変えてしまうようなことに関して +スカラコンテキストを黙って変えてしまうようなことに関して 特に注意しなければならないからです。 たとえば以下の例のようなただ一つの引数を取ると決めた関数を考えてみましょう: @@ -2588,8 +2582,9 @@ これにはいささかびっくりすることになるかもしれません。 これまでそうであったような、要素を持った C<@foo> が渡されることはありません。 その代わり、C<func()> は C<1>、つまり C<@foo> の要素の数を得るようになります。 -そして C<split> はスカラーコンテキストで呼び出され、パラメーターリスト -C<@_> に落書きを始めてしまいます。あいたた。 +そして C<split> はスカラコンテキストで呼び出され、パラメータリスト +C<@_> に落書きを始めてしまいます。 +あいたた。 =begin original @@ -2620,7 +2615,7 @@ C<()> というプロトタイプを持った関数はインライン展開される可能性を 持っています。 最適化と定数畳み込み後の結果が一つの定数か、何のリファレンスも持たない -レキシカルスコープのスカラーであったならば、その関数が C<&> を使わずに +レキシカルスコープのスカラであったならば、その関数が C<&> を使わずに 呼びされたときに呼び出しのその場に置かれます。 C<&> を使って呼び出された関数は決してインライン展開されることは ありません(ほとんどの定数を宣言するための簡単な方法は @@ -2898,7 +2893,7 @@ 前述の C<REGlob> の例は、perl の C<glob> 演算子をオーバーライドするのに 必要な全てのことを実装してはいません。 -組み込みの C<glob> はそれがスカラーコンテキストで使われたのか +組み込みの C<glob> はそれがスカラコンテキストで使われたのか リストコンテキストで使われたのかによって異なる動作をしますが、 先程の例の C<REGlob> ではそうなっていません。 perl の組み込みのものの多くがこのようにコンテキストによって違う動作をし、 @@ -2995,8 +2990,8 @@ =end original -Finally, some built-ins (e.g. C<exists> or C<grep>) can't be overridden. -(TBT) +最後に、いくつかの組み込み関数(C<exists> や C<grep>) は +オーバーライドできません。 =head2 Autoloading X<autoloading> X<AUTOLOAD> @@ -3033,9 +3028,8 @@ パッケージのグローバルな変数 $AUTOLOAD の中に現れます。 この名前は通常の引数として渡されることはありません。 なぜなら、その、あー、なんというかこれが理由です。 -(As an exception, a method call to a nonexistent -C<import> or C<unimport> method is just skipped instead.) -(TBT) +(例外として、存在しない C<import> か C<unimport> メソッドへの呼び出しは +単に無視されます。) =begin original