argra****@users*****
argra****@users*****
2014年 12月 26日 (金) 21:15:56 JST
Index: docs/perl/5.20.1/perlsub.pod diff -u docs/perl/5.20.1/perlsub.pod:1.1 docs/perl/5.20.1/perlsub.pod:1.2 --- docs/perl/5.20.1/perlsub.pod:1.1 Sun Oct 19 22:08:16 2014 +++ docs/perl/5.20.1/perlsub.pod Fri Dec 26 21:15:55 2014 @@ -33,8 +33,8 @@ =end original - sub NAME; # "先行" 宣言 - sub NAME(PROTO); # 同上。ただしプロトタイプ付き + sub NAME; # "先行" 宣言。 + sub NAME(PROTO); # 同上; ただしプロトタイプ付き sub NAME : ATTRS; # 属性付き sub NAME(PROTO) : ATTRS; # 属性とプロトタイプ付き @@ -49,8 +49,8 @@ =end original - sub NAME BLOCK # 宣言と定義 - sub NAME(PROTO) BLOCK # 同上。ただしプロトタイプ付き + sub NAME BLOCK # 宣言と定義。 + sub NAME(PROTO) BLOCK # 同上; ただしプロトタイプ付き sub NAME SIG BLOCK # シグネチャ付き sub NAME : ATTRS BLOCK # 属性付き sub NAME(PROTO) : ATTRS BLOCK # プロトタイプと属性付き @@ -187,8 +187,8 @@ =end original ルーチンに渡されるすべての引数は配列 C<@_> に置かれます。 -(They may also show up in lexical variables introduced by a signature; -see L</Signatures> below.) +(シグネチャによって導入されたレキシカル変数にも現れることがあります; +後述する L</Signatures> を参照してください。) したがって、ある関数を二つの引数を付けて呼び出したならば、 その引数は C<$_[0]> と C<$_[1]> に格納されます。 配列 C<@_> は local 配列ですが、その要素は実際の @@ -202,7 +202,6 @@ 作成されていました。) 配列 C<@_> 全体に対する代入は別名を破棄し、何の引数も更新しません。 X<subroutine, argument> X<argument> X<@_> -(TBT) =begin original @@ -257,8 +256,8 @@ =end original -Aside from an experimental facility (see L</Signatures> below), -Perlは名前付き仮引数を持っていません。 +実験的な機能 (後述の L</Signatures> 参照) を除いて、Perl は名前付き仮引数を +持っていません。 C<my()> にこれらのリストを代入することで行えます。 プライベートであると宣言されずに使われている変数は全てグローバル変数です。 プライベート変数に関する詳細はL<"Private Variables via my()"> と @@ -266,7 +265,6 @@ パッケージで(おそらくはファイルでも)分けられている関数のセットのための 保護された環境を作るには L<perlmod/"Packages"> を参照してください。 X<formal parameter> X<parameter, formal> -(TBT) =begin original @@ -457,7 +455,7 @@ 最近の Perl では C<&> は省略可能であり、サブルーチンがあらかじめ 宣言されている場合には括弧も省略できます。 defined() や undef() の引数として使ったような、単なる名前付き -サブルーチンであるときの C<&> は B<省略可能ではありません>。 +サブルーチンであるときの C<&> は I<省略可能ではありません>。 C<&$subref()> や C<&{$subref}()> のような、サブルーチンの名前や リファレンスを使った間接的なサブルーン呼び出しを行いたいたいときにも C<&> は省略することはできません; 但し C<< $subref->() >> の記法が問題を @@ -574,66 +572,40 @@ =end original -名前が全て大文字であるサブルーチンは、 -名前が全て小文字のモジュール名が (訳注: pragma 用として) 予約されているのと同じように -Perl のコアで予約されています。実行時にシステム自身によって -(通常はイベントをトリガーとして) 間接的に呼び出されるサブルーチンは、 -名前を全て大文字で書くのがしきたりです。 +名前が全て大文字であるサブルーチンは、名前が全て小文字のモジュール名が +(訳注: pragma 用として) 予約されているのと同じように +Perl のコアで予約されています。 +実行時にシステム自身によって (通常はイベントをトリガーとして) 間接的に +呼び出されるサブルーチンは、名前を全て大文字で書くのがしきたりです。 特殊で、あらかじめ決められていることをするサブルーチンは、 C<AUTOLOAD>, C<CLONE>, C<DESTROY> に、L<perltie> と L<PerlIO::via> で 説明されている関数全てを加えたものです。 -Subroutines whose name start with a left parenthesis are also reserved the -same way. The following is a list of some subroutines that currently do -special, pre-defined things. -(TBT) +名前が左かっこで始まるようなサブルーチンも同様に予約されています。 +以下は現在のところ特殊で事前に定義されていることがあるサブルーチンの一覧です。 =over =item documented later in this document -=begin original - -C<AUTOLOAD> - -=end original +(この文書で後述するもの) C<AUTOLOAD> -(TBT) =item documented in L<perlmod> -=begin original - -C<CLONE>, C<CLONE_SKIP>, - -=end original +(L<perlmod> に記述しているもの) C<CLONE>, C<CLONE_SKIP>, -(TBT) =item documented in L<perlobj> -=begin original - -C<DESTROY> - -=end original +(L<perlobj> に記述しているもの) C<DESTROY> -(TBT) =item documented in L<perltie> -=begin original - -C<BINMODE>, C<CLEAR>, C<CLOSE>, C<DELETE>, C<DESTROY>, C<EOF>, C<EXISTS>, -C<EXTEND>, C<FETCH>, C<FETCHSIZE>, C<FILENO>, C<FIRSTKEY>, C<GETC>, -C<NEXTKEY>, C<OPEN>, C<POP>, C<PRINT>, C<PRINTF>, C<PUSH>, C<READ>, -C<READLINE>, C<SCALAR>, C<SEEK>, C<SHIFT>, C<SPLICE>, C<STORE>, -C<STORESIZE>, C<TELL>, C<TIEARRAY>, C<TIEHANDLE>, C<TIEHASH>, -C<TIESCALAR>, C<UNSHIFT>, C<UNTIE>, C<WRITE> - -=end original +(L<perltie> に記述しているもの) C<BINMODE>, C<CLEAR>, C<CLOSE>, C<DELETE>, C<DESTROY>, C<EOF>, C<EXISTS>, C<EXTEND>, C<FETCH>, C<FETCHSIZE>, C<FILENO>, C<FIRSTKEY>, C<GETC>, @@ -641,68 +613,45 @@ C<READLINE>, C<SCALAR>, C<SEEK>, C<SHIFT>, C<SPLICE>, C<STORE>, C<STORESIZE>, C<TELL>, C<TIEARRAY>, C<TIEHANDLE>, C<TIEHASH>, C<TIESCALAR>, C<UNSHIFT>, C<UNTIE>, C<WRITE> -(TBT) =item documented in L<PerlIO::via> -=begin original - -C<BINMODE>, C<CLEARERR>, C<CLOSE>, C<EOF>, C<ERROR>, C<FDOPEN>, C<FILENO>, -C<FILL>, C<FLUSH>, C<OPEN>, C<POPPED>, C<PUSHED>, C<READ>, C<SEEK>, -C<SETLINEBUF>, C<SYSOPEN>, C<TELL>, C<UNREAD>, C<UTF8>, C<WRITE> - -=end original +(L<PerlIO::via> に記述しているもの) C<BINMODE>, C<CLEARERR>, C<CLOSE>, C<EOF>, C<ERROR>, C<FDOPEN>, C<FILENO>, C<FILL>, C<FLUSH>, C<OPEN>, C<POPPED>, C<PUSHED>, C<READ>, C<SEEK>, C<SETLINEBUF>, C<SYSOPEN>, C<TELL>, C<UNREAD>, C<UTF8>, C<WRITE> -(TBT) =item documented in L<perlfunc> -=begin original - -L<< C<import> | perlfunc/use >>, L<< C<unimport> | perlfunc/use >>, -L<< C<INC> | perlfunc/require >> - -=end original +(L<perlfunc> に記述しているもの) L<< C<import> | perlfunc/use >>, L<< C<unimport> | perlfunc/use >>, L<< C<INC> | perlfunc/require >> -(TBT) =item documented in L<UNIVERSAL> -=begin original - -C<VERSION> - -=end original +(L<UNIVERSAL> に記述しているもの) C<VERSION> -(TBT) =item documented in L<perldebguts> -=begin original - -C<DB::DB>, C<DB::sub>, C<DB::lsub>, C<DB::goto>, C<DB::postponed> - -=end original +(L<perldebguts> に記述しているもの) C<DB::DB>, C<DB::sub>, C<DB::lsub>, C<DB::goto>, C<DB::postponed> -(TBT) =item undocumented, used internally by the L<overload> feature +(文書化されておらず、L<overload> 機能によって内部で使われているもの) + =begin original any starting with C<(> =end original -any starting with C<(> -(TBT) +C<(> で始まるもの全て =back @@ -715,13 +664,15 @@ =end original -The C<BEGIN>, C<UNITCHECK>, C<CHECK>, C<INIT>, C<END> サブルーチンは +C<BEGIN>, C<UNITCHECK>, C<CHECK>, C<INIT>, C<END> サブルーチンは サブルーチンというよりは特殊コードブロックで、その中でも一つのパッケージに 複数作ることができ、明示的には B<呼び出せません> 。 L<perlmod/"BEGIN, UNITCHECK, CHECK, INIT and END"> を参照してください。 =head2 Signatures +(シグネチャ) + =begin original B<WARNING>: Subroutine signatures are experimental. The feature may be @@ -729,9 +680,9 @@ =end original -B<WARNING>: Subroutine signatures are experimental. The feature may be -modified or removed in future versions of Perl. -(TBT) +B<警告>: サブルーチンシグネチャは実験的です。 +この機能は将来のバージョンの Perl で変更されたり削除されたりすることが +あります。 =begin original @@ -745,14 +696,12 @@ =end original -Perl has an experimental facility to allow a subroutine's formal -parameters to be introduced by special syntax, separate from the -procedural code of the subroutine body. The formal parameter list -is known as a I<signature>. The facility must be enabled first by a -pragmatic declaration, C<use feature 'signatures'>, and it will produce -a warning unless the "experimental::signatures" warnings category is -disabled. -(TBT) +Perl は、サブルーチン本体の手続き的コードと分離された特殊な文法を +導入することで、サブルーチンの仮引数を指定できる実験的機能を持ちます。 +仮引数リストは I<シグネチャ> (signature) として知られます。 +この機能は、C<use feature 'signatures'> というプラグマ宣言で +有効化しなければならず、"experimental::signatures" 警告カテゴリが無効に +なっていない限り警告が生成されます。 =begin original @@ -768,16 +717,15 @@ =end original -The signature is part of a subroutine's body. Normally the body of a -subroutine is simply a braced block of code. When using a signature, -the signature is a parenthesised list that goes immediately before -the braced block. The signature declares lexical variables that are -in scope for the block. When the subroutine is called, the signature -takes control first. It populates the signature variables from the -list of arguments that were passed. If the argument list doesn't meet -the requirements of the signature, then it will throw an exception. -When the signature processing is complete, control passes to the block. -(TBT) +シグネチャはサブルーチンの本体の一部です。 +通常サブルーチンの本体は単に中かっこのブロックのコードです。 +シグネチャを使うとき、シグネチャは中かっこブロックの直前におかれた +かっこつきリストです。 +シグネチャはそのブロックのスコープのレキシカル変数を宣言します。 +サブルーチンが呼び出されるとき、シグネチャが最初に制御します。 +渡された引数リストからシグネチャ変数を作ります。 +引数リストがシグネチャの要求に一致しない場合、例外が投げられます。 +シグネチャ処理が完了したとき、制御はブロックに移ります。 =begin original @@ -786,9 +734,8 @@ =end original -Positional parameters are handled by simply naming scalar variables in -the signature. For example, -(TBT) +位置パラメータは単にシグネチャの名前付きスカラ変数で扱われます。 +例えば sub foo ($left, $right) { return $left + $right; @@ -803,11 +750,10 @@ =end original -takes two positional parameters, which must be filled at runtime by -two arguments. By default the parameters are mandatory, and it is -not permitted to pass more arguments than expected. So the above is -equivalent to -(TBT) +これは二つの位置パラメータを持ち、二つの引数によって実行時に +埋められなければなりません。 +デフォルトではパラメータは必須で、想定以上の引数を渡すことは許されません。 +従って前述のものは以下と等価です sub foo { die "Too many arguments for subroutine" unless @_ <= 2; @@ -824,9 +770,9 @@ =end original -An argument can be ignored by omitting the main part of the name from -a parameter declaration, leaving just a bare C<$> sigil. For example, -(TBT) +引数は、パラメータ宣言の名前のメイン部分を省略して裸の C<$> 印だけに +することで無視できます。 +例えば、 sub foo ($first, $, $third) { return "first=$first, third=$third"; @@ -839,9 +785,8 @@ =end original -Although the ignored argument doesn't go into a variable, it is still -mandatory for the caller to pass it. -(TBT) +無視された引数は変数には入りませんが、呼び出し元から渡されるときには +必須のままです。 =begin original @@ -850,9 +795,8 @@ =end original -A positional parameter is made optional by giving a default value, -separated from the parameter name by C<=>: -(TBT) +位置パラメータは、パラメータ名と C<=> で分けられたデフォルト値を与えることで +オプションにできます: sub foo ($left, $right = 0) { return $left + $right; @@ -868,12 +812,11 @@ =end original -The above subroutine may be called with either one or two arguments. -The default value expression is evaluated when the subroutine is called, -so it may provide different default values for different calls. It is -only evaluated if the argument was actually omitted from the call. -For example, -(TBT) +前述のサブルーチンは 1 引数か 2 引数で呼び出せます。 +デフォルト値式はサブルーチンが呼び出されるときに評価されます; 従って +呼び出し毎に異なったデフォルト値を提供できます。 +これは呼び出しで引数が実際に省略されたときにのみ評価されます。 +例えば、 my $auto_id = 0; sub foo ($thing, $id = $auto_id++) { @@ -889,11 +832,11 @@ =end original -automatically assigns distinct sequential IDs to things for which no -ID was supplied by the caller. A default value expression may also -refer to parameters earlier in the signature, making the default for -one parameter vary according to the earlier parameters. For example, -(TBT) +これは、呼び出し元から ID が指定されなかった場合、ユニークな連番 ID が +自動的に代入されます。 +デフォルト値式はシグネチャ内で前にあるパラメータを参照することもでき、 +前のパラメータによって異なったパラメータのデフォルトを作ります。 +例えば、 sub foo ($first_name, $surname, $nickname = $first_name) { print "$first_name $surname is known as \"$nickname\""; @@ -906,9 +849,8 @@ =end original -An optional parameter can be nameless just like a mandatory parameter. -For example, -(TBT) +オプションのパラメータは必須のパラメータと同様に名前なしにできます。 +例えば、 sub foo ($thing, $ = 1) { print $thing; @@ -926,14 +868,13 @@ =end original -The parameter's default value will still be evaluated if the corresponding -argument isn't supplied, even though the value won't be stored anywhere. -This is in case evaluating it has important side effects. However, it -will be evaluated in void context, so if it doesn't have side effects -and is not trivial it will generate a warning if the "void" warning -category is enabled. If a nameless optional parameter's default value -is not important, it may be omitted just as the parameter's name was: -(TBT) +パラメータのデフォルト値は対応する引数が指定されなくても評価されますが、 +その値はどこにも保管されません。 +これは、評価が重要な副作用を持つ場合です。 +しかし、これは無効コンテキストで評価されるので、副作用がなくて +ありふれていなければ、"void" 警告カテゴリが有効の場合は警告が生成されます。 +名前なしオプションパラメータのデフォル値が重要でないなら、パラメータの名前と +同じように省略できます: sub foo ($thing, $=) { print $thing; @@ -950,13 +891,12 @@ =end original -Optional positional parameters must come after all mandatory positional -parameters. (If there are no mandatory positional parameters then an -optional positional parameters can be the first thing in the signature.) -If there are multiple optional positional parameters and not enough -arguments are supplied to fill them all, they will be filled from left -to right. -(TBT) +オプション位置パラメータは全ての必須位置パラメータの +後ろでなければなりません。 +(必須位置パラメータがない場合は、オプション位置パラメータをシグネチャの +最初の位置に置けます。) +複数のオプション位置パラメータがあって全てのパラメータを設定するのに十分な +引数が供給されなかった場合、左から右に設定されます。 =begin original @@ -965,9 +905,8 @@ =end original -After positional parameters, additional arguments may be captured in a -slurpy parameter. The simplest form of this is just an array variable: -(TBT) +位置パラメータの後、追加の引数は吸い込みパラメータに捕捉されます。 +これの最も単純な形式は単なる配列変数です: sub foo ($filter, @inputs) { print $filter->($_) foreach @inputs; @@ -982,11 +921,9 @@ =end original -With a slurpy parameter in the signature, there is no upper limit on how -many arguments may be passed. A slurpy array parameter may be nameless -just like a positional parameter, in which case its only effect is to -turn off the argument limit that would otherwise apply: -(TBT) +シグネチャで吸い込みパラメータがある場合、渡せる引数の数に上限はありません。 +吸い込み配列パラメータは位置パラメータと同様に名前なしにでき、この場合は +その他の場合で適用される引数制限をオフにする効果のみがあります: sub foo ($thing, @) { print $thing; @@ -1003,13 +940,11 @@ =end original -A slurpy parameter may instead be a hash, in which case the arguments -available to it are interpreted as alternating keys and values. -There must be as many keys as values: if there is an odd argument then -an exception will be thrown. Keys will be stringified, and if there are -duplicates then the later instance takes precedence over the earlier, -as with standard hash construction. -(TBT) +吸い込みパラメータは代わりにハッシュにすることもでき、その場合利用可能な +引数は交互にキーと値として解釈されます。 +キーと値の数は同じでなければなりません: 引数が奇数だと例外が投げられます。 +キーは文字列化され、重複があると、通常のハッシュの構築と同じように、 +後から指定したものが先に指定したものを上書きします。 sub foo ($filter, %inputs) { print $filter->($_, $inputs{$_}) foreach sort keys %inputs; @@ -1023,10 +958,9 @@ =end original -A slurpy hash parameter may be nameless just like other kinds of -parameter. It still insists that the number of arguments available to -it be even, even though they're not being put into a variable. -(TBT) + +吸い込みハッシュパラメータは他の種類のパラメータと同様に名前なしにできます。 +変数に代入されなくても、利用できる引数の数が偶数であるという必要はあります。 sub foo ($thing, %) { print $thing; @@ -1042,12 +976,12 @@ =end original -A slurpy parameter, either array or hash, must be the last thing in the -signature. It may follow mandatory and optional positional parameters; -it may also be the only thing in the signature. Slurpy parameters cannot -have default values: if no arguments are supplied for them then you get -an empty array or empty hash. -(TBT) +吸い込みパラメータは、配列でもハッシュでも、シグネチャの +最後でなければなりません。 +必須とオプションの位置パラメータに引き続くことができます; シグネチャの唯一の +要素でもかまいません。 +吸い込みパラメータはデフォルト値を持つことはできません: 引数が指定されないと +空配列や空ハッシュを得ます。 =begin original @@ -1056,9 +990,8 @@ =end original -A signature may be entirely empty, in which case all it does is check -that the caller passed no arguments: -(TBT) +シグネチャは完全に空にすることもできます; この場合、呼び出し側が引数を +渡していないことだけをチェックします: sub foo () { return 123; @@ -1077,15 +1010,12 @@ =end original -When using a signature, the arguments are still available in the special -array variable C<@_>, in addition to the lexical variables of the -signature. There is a difference between the two ways of accessing the -arguments: C<@_> I<aliases> the arguments, but the signature variables -get I<copies> of the arguments. So writing to a signature variable -only changes that variable, and has no effect on the caller's variables, -but writing to an element of C<@_> modifies whatever the caller used to -supply that argument. -(TBT) +シグネチャを使うときも、シグネチャ引数のレキシカル変数に加えて、 +特殊配列変数 C<@_> にも入ります: C<@_> は引数の I<別名> ですが、 +シグネチャ変数は引数の I<コピー> です。 +従って、シグネチャ変数に書き込むとその変数だけが変更され、呼び出し元の +変数には影響しませんが、C<@_> の要素に書き込むと引数を指定した呼び出し元が +使ったものが修正されます。 =begin original @@ -1101,16 +1031,15 @@ =end original -There is a potential syntactic ambiguity between signatures and prototypes -(see L</Prototypes>), because both start with an opening parenthesis and -both can appear in some of the same places, such as just after the name -in a subroutine declaration. For historical reasons, when signatures -are not enabled, any opening parenthesis in such a context will trigger -very forgiving prototype parsing. Most signatures will be interpreted -as prototypes in those circumstances, but won't be valid prototypes. -(A valid prototype cannot contain any alphabetic character.) This will -lead to somewhat confusing error messages. -(TBT) +シグネチャとプロトタイプ(L</Prototypes> 参照)の間には潜在的に文法的な +あいまいさがあります; 両方とも開きかっこで始まり、サブルーチン宣言の名前の +直後といった同じ場所に現れるからです。 +歴史的な理由により、シグネチャが有効でない場合、このようなコンテキストでの +あらゆる開きかっこはとても寛容なプロトタイプのパースを引き起こします。 +ほとんどのシグネチャはこの状態ではプロトタイプとして解釈されますが、 +正当なプロトタイプではありません。 +(正当なプロトタイプは英数字を含むことができません。) +これは少し混乱したエラーメッセージを引き起こします。 =begin original @@ -1122,12 +1051,12 @@ =end original -To avoid ambiguity, when signatures are enabled the special syntax -for prototypes is disabled. There is no attempt to guess whether a -parenthesised group was intended to be a prototype or a signature. -To give a subroutine a prototype under these circumstances, use a -L<prototype attribute|attributes/Built-in Attributes>. For example, -(TBT) +曖昧さを避けるために、シグネチャが有効の時はプロトタイプのための特殊文法は +無効になります。 +かっこのグループがプロトタイプかシグネチャかを推測しようとはしません。 +この状態でサブルーチンにプロトタイプを指定するには、 +L<プロトタイプ属性|attributes/Built-in Attributes> を使ってください。 +例えば、 sub foo :prototype($) { $_[0] } @@ -1140,11 +1069,10 @@ =end original -It is entirely possible for a subroutine to have both a prototype and -a signature. They do different jobs: the prototype affects compilation -of calls to the subroutine, and the signature puts argument values into -lexical variables at runtime. You can therefore write -(TBT) +プロトタイプとシグネチャの両方を持ったサブルーチンは完全に可能です。 +これらは異なった仕事をします: プロトタイプはサブルーチン呼び出しのコンパイルに +影響を与え、シグネチャは実行時に引数の値をレキシカル変数に設定します。 +従って、このように書けます sub foo :prototype($$) ($left, $right) { return $left + $right; @@ -1158,10 +1086,8 @@ =end original -The prototype attribute, and any other attributes, must come before -the signature. The signature always immediately precedes the block of -the subroutine's body. -(TBT) +プロトタイプ属性、およびその他の属性はシグネチャの前に来なければなりません。 +シグネチャは常にサブルーチンの本体のブロックの直前です。 =head2 Private Variables via my() X<my> X<variable, lexical> X<lexical> X<lexical variable> X<scope, lexical> @@ -2416,13 +2342,12 @@ =end original -Lvalue subroutines are convenient, but you have to keep in mind that, -when used with objects, they may violate encapsulation. A normal -mutator can check the supplied argument before setting the attribute -it is protecting, an lvalue subroutine cannot. If you require any -special processing when storing and retrieving the values, consider -using the CPAN module Sentinel or something similar. -(TBT) +左辺値サブルーチンは便利ですが、オブジェクトに対して使うと、カプセル化に +違反するかも知れないことを心に留めておく必要があります。 +通常のミューテータは、指定された引数を守られている属性に代入する前に +チェックできますが、左辺値サブルーチンはできません。 +値の補完と取り出しに何らかの特別処理が必要な場合は、CPAN モジュールの +Sentinel または似たようなものを使うことを考慮してください。 =head2 Lexical Subroutines X<my sub> X<state sub> X<our sub> X<subroutine, lexical> @@ -2652,7 +2577,7 @@ perl においては、これを C<*foo> のようにアスタリスクを使って 行うことができます。 これは前に置かれたアスタリスクが変数やサブルーチンなどに対して使われる -前置キャラクター全てにマッチするワイルドカードとしてみなすことが +前置文字全てにマッチするワイルドカードとしてみなすことが できるので、“型グロブ”としてよく知られています。 =begin original @@ -3104,10 +3029,9 @@ =end original Perl はとても限られた形のコンパイル時引数チェックに対応しています。 -This can be declared in either the PROTO -section or with a L<prototype attribute|attributes/Built-in Attributes>. +これは PROTO セクションか +L<プロトタイプ属性|attributes/Built-in Attributes> で宣言できます。 以下のどちらかのように宣言すると: -(TBT) sub mypush (+@) sub mypush :prototype(+@) @@ -3129,11 +3053,9 @@ =end original -If subroutine signatures are enabled (see L</Signatures>), then -the shorter PROTO syntax is unavailable, because it would clash with -signatures. In that case, a prototype can only be declared in the form -of an attribute. -(TBT) +サブルーチンシグネチャ(L</Signatures> 参照)が有効の場合、より短い +PROTO 文法は利用できません; シグネチャと衝突するからです。 +この場合、プロトタイプは属性の形式でのみ宣言できます。 =begin original @@ -3562,11 +3484,10 @@ =end original -If a sub has both a PROTO and a BLOCK, the prototype is not applied -until after the BLOCK is completely defined. This means that a recursive -function with a prototype has to be predeclared for the prototype to take -effect, like so: -(TBT) +サブルーチンに PROTO と BLOCK の両方がある場合、プロトタイプは BLOCK が +完全に定義されるまで適用されません。 +これは、プロトタイプを持つ再帰関数は、次のように、プロトタイプが +有効になるように事前定義する必要があります: sub foo($$); sub foo($$) { @@ -3672,10 +3593,10 @@ =end original -As alluded to earlier you can also declare inlined subs dynamically at -BEGIN time if their body consists of a lexically-scoped scalar which -has no other references. Only the first example here will be inlined: -(TBT) +先に暗示したように、本体がその他にリファレンスを持たないレキシカル +スコープのスカラで構成されている場合、BEGIN の時点でインラインサブルーチンを +動的に宣言することもできます。 +ここでの最初の例のみがインライン化されます: BEGIN { my $var = 1; @@ -3698,10 +3619,9 @@ =end original -A not so obvious caveat with this (see [RT #79908]) is that the -variable will be immediately inlined, and will stop behaving like a -normal lexical variable, e.g. this will print C<79907>, not C<79908>: -(TBT) +これに関するそれほど明白でない欠陥 ([RT #79908] 参照) は、変数は直ちに +インライン化され、通常のレキシカル変数のように振る舞うのを止めることです; +例えば、これは C<79908> ではなく C<79907> を出力します: BEGIN { my $x = 79907; @@ -3718,10 +3638,8 @@ =end original -If you really want a subroutine with a C<()> prototype that returns a -lexical variable you can easily force it to not be inlined by adding -an explicit C<return>: -(TBT) +C<()> プロトタイプを持ち、レキシカル変数を返すサブルーチンが本当にほしいなら、 +明示的な C<return> を追加することでインライン化しないことを簡単に強制できます: BEGIN { my $x = 79907; @@ -3739,11 +3657,10 @@ =end original -The easiest way to tell if a subroutine was inlined is by using -L<B::Deparse>, consider this example of two subroutines returning -C<1>, one with a C<()> prototype causing it to be inlined, and one -without (with deparse output truncated for clarity): -(TBT) +サブルーチンがインライン化されていることを知る最も簡単な方法は +L<B::Deparse> によるものです; C<1> を返す二つのサブルーチンの例を考えると、 +C<()> プロトタイプを持つものはインライン化を引き起こし、もう一つは +引き起こしません (明確化のために deparse の出力を切り詰めています): $ perl -MO=Deparse -le 'sub ONE { 1 } if (ONE) { print ONE if ONE }' sub ONE { @@ -3770,10 +3687,8 @@ インライン展開するのに適切であったサブルーチンを再定義するとデフォルトでは 警告を受けることになります。 この警告を、あるサブルーチンがインライン化可能と認識されるかどうかを -区別するために使うことができます; -since it's -different than the warning for overriding non-inlined subroutines: -(TBT) +区別するために使うことができます; これはインライン化されていないサブルーチンを +オーバーライドすることによる警告とは異なります: $ perl -e 'sub one () {1} sub one () {2}' Constant subroutine one redefined at -e line 1. @@ -4331,7 +4246,7 @@ Translate: KIMURA Koichi (5.005_03) Update: SHIRAKATA Kentaro <argra****@ub32*****> (5.6.1-) -Status: in progress +Status: completed =end meta