Kentaro Shirakata
argra****@users*****
2007年 7月 24日 (火) 01:39:00 JST
Index: docs/perl/5.6.1/perlfunc.pod diff -u docs/perl/5.6.1/perlfunc.pod:1.15 docs/perl/5.6.1/perlfunc.pod:1.16 --- docs/perl/5.6.1/perlfunc.pod:1.15 Tue Jul 10 01:56:16 2007 +++ docs/perl/5.6.1/perlfunc.pod Tue Jul 24 01:39:00 2007 @@ -230,33 +230,47 @@ =item Functions for SCALARs or strings +(スカラや文字列のための関数) + C<chomp>, C<chop>, C<chr>, C<crypt>, C<hex>, C<index>, C<lc>, C<lcfirst>, C<length>, C<oct>, C<ord>, C<pack>, C<q/STRING/>, C<qq/STRING/>, C<reverse>, C<rindex>, C<sprintf>, C<substr>, C<tr///>, C<uc>, C<ucfirst>, C<y///> =item Regular expressions and pattern matching +(正規表現とパターンマッチング) + C<m//>, C<pos>, C<quotemeta>, C<s///>, C<split>, C<study>, C<qr//> =item Numeric functions +(数値関数) + C<abs>, C<atan2>, C<cos>, C<exp>, C<hex>, C<int>, C<log>, C<oct>, C<rand>, C<sin>, C<sqrt>, C<srand> =item Functions for real @ARRAYs +(実配列のための関数) + C<pop>, C<push>, C<shift>, C<splice>, C<unshift> =item Functions for list data +(リストデータのための関数) + C<grep>, C<join>, C<map>, C<qw/STRING/>, C<reverse>, C<sort>, C<unpack> =item Functions for real %HASHes +(実ハッシュのための関数) + C<delete>, C<each>, C<exists>, C<keys>, C<values> =item Input and output functions +(入出力関数) + C<binmode>, C<close>, C<closedir>, C<dbmclose>, C<dbmopen>, C<die>, C<eof>, C<fileno>, C<flock>, C<format>, C<getc>, C<print>, C<printf>, C<read>, C<readdir>, C<rewinddir>, C<seek>, C<seekdir>, C<select>, C<syscall>, @@ -265,10 +279,14 @@ =item Functions for fixed length data or records +(固定長データやレコードのための関数) + C<pack>, C<read>, C<syscall>, C<sysread>, C<syswrite>, C<unpack>, C<vec> =item Functions for filehandles, files, or directories +(ファイルハンドル、ファイル、ディレクトリのための関数) + C<-I<X>>, C<chdir>, C<chmod>, C<chown>, C<chroot>, C<fcntl>, C<glob>, C<ioctl>, C<link>, C<lstat>, C<mkdir>, C<open>, C<opendir>, C<readlink>, C<rename>, C<rmdir>, C<stat>, C<symlink>, C<umask>, @@ -276,52 +294,72 @@ =item Keywords related to the control flow of your perl program +(プログラムの流れを制御することに関連するキーワード) + C<caller>, C<continue>, C<die>, C<do>, C<dump>, C<eval>, C<exit>, C<goto>, C<last>, C<next>, C<redo>, C<return>, C<sub>, C<wantarray> =item Keywords related to scoping +(スコープに関するキーワード) + C<caller>, C<import>, C<local>, C<my>, C<our>, C<package>, C<use> =item Miscellaneous functions +(さまざまな関数) + C<defined>, C<dump>, C<eval>, C<formline>, C<local>, C<my>, C<our>, C<reset>, C<scalar>, C<undef>, C<wantarray> =item Functions for processes and process groups +(プロセスとプロセスグループのための関数) + C<alarm>, C<exec>, C<fork>, C<getpgrp>, C<getppid>, C<getpriority>, C<kill>, C<pipe>, C<qx/STRING/>, C<setpgrp>, C<setpriority>, C<sleep>, C<system>, C<times>, C<wait>, C<waitpid> =item Keywords related to perl modules +(perl モジュールに関するキーワード) + C<do>, C<import>, C<no>, C<package>, C<require>, C<use> =item Keywords related to classes and object-orientedness +(クラスとオブジェクト指向に関するキーワード) + C<bless>, C<dbmclose>, C<dbmopen>, C<package>, C<ref>, C<tie>, C<tied>, C<untie>, C<use> =item Low-level socket functions +(低レベルソケット関数) + C<accept>, C<bind>, C<connect>, C<getpeername>, C<getsockname>, C<getsockopt>, C<listen>, C<recv>, C<send>, C<setsockopt>, C<shutdown>, C<socket>, C<socketpair> =item System V interprocess communication functions +(System V プロセス間通信関数) + C<msgctl>, C<msgget>, C<msgrcv>, C<msgsnd>, C<semctl>, C<semget>, C<semop>, C<shmctl>, C<shmget>, C<shmread>, C<shmwrite> =item Fetching user and group info +(ユーザーとグループの情報取得) + C<endgrent>, C<endhostent>, C<endnetent>, C<endpwent>, C<getgrent>, C<getgrgid>, C<getgrnam>, C<getlogin>, C<getpwent>, C<getpwnam>, C<getpwuid>, C<setgrent>, C<setpwent> =item Fetching network info +(ネットワーク情報取得) + C<endprotoent>, C<endservent>, C<gethostbyaddr>, C<gethostbyname>, C<gethostent>, C<getnetbyaddr>, C<getnetbyname>, C<getnetent>, C<getprotobyname>, C<getprotobynumber>, C<getprotoent>, @@ -330,10 +368,14 @@ =item Time-related functions +(時刻に関する関数) + C<gmtime>, C<localtime>, C<time>, C<times> =item Functions new in perl5 +(perl5 で新設された関数) + C<abs>, C<bless>, C<chomp>, C<chr>, C<exists>, C<formline>, C<glob>, C<import>, C<lc>, C<lcfirst>, C<map>, C<my>, C<no>, C<our>, C<prototype>, C<qx>, C<qw>, C<readline>, C<readpipe>, C<ref>, C<sub*>, C<sysopen>, C<tie>, @@ -351,6 +393,8 @@ =item Functions obsoleted in perl5 +(perl5 では古いものとなった関数) + C<dbmclose>, C<dbmopen> =back @@ -2545,13 +2589,13 @@ =end original -If you're looking to use L<dump> to speed up your program, consider -generating bytecode or native C code as described in L<perlcc>. If -you're just trying to accelerate a CGI script, consider using the -C<mod_perl> extension to B<Apache>, or the CPAN module, Fast::CGI. -You might also consider autoloading or selfloading, which at least -make your program I<appear> to run faster. -(*TBT*) +プログラムの速度を上げるために L<dump> を使うことを考えているなら、 +L<perlcc> で記述されているような、バイトコードかネイティブな C コードを +生成することを検討してみてください。 +もし単に CGI スクリプトを高速化したいなら、B<Apache> の拡張である +C<mod_perl> や、CPAN モジュールである Fast::CGI を検討してみてください。 +少なくともプログラムが速く動作する I<ようにみえる>、オートロードや +自力ロードも検討してみてください。 =item each HASH @@ -2866,12 +2910,21 @@ # a run-time error eval '$answer ='; # sets $@ +=begin original + Due to the current arguably broken state of C<__DIE__> hooks, when using the C<eval{}> form as an exception trap in libraries, you may wish not to trigger any C<__DIE__> hooks that user code may have installed. You can use the C<local $SIG{__DIE__}> construct for this purpose, as shown in this example: +=end original + +C<eval{}> 形式をライブラリの例外を補足するために使うとき、 +現在の C<__DIE__> フックの状態はほぼ確実に壊れているという理由で、 +ユーザーのコードが設定した C<__DIE__> フックを実行したくないかもしれません。 +この目的には以下の例のように、C<local $SIG{__DIE__}> 構造が使えます。 + # a very private exception trap for divide-by-zero eval { local $SIG{'__DIE__'}; $answer = $a / $b; }; warn $@ if $@; @@ -3057,36 +3110,83 @@ exec {'/bin/csh'} '-sh'; # pretend it's a login shell +=begin original + When the arguments get executed via the system shell, results will be subject to its quirks and capabilities. See L<perlop/"`STRING`"> for details. +=end original + +引数がシステムシェルで実行されるとき、結果はシェルの奇癖と能力によって +変わります。 +詳細については L<perlop/"`STRING`"> を参照してください。 + +=begin original + Using an indirect object with C<exec> or C<system> is also more secure. This usage (which also works fine with system()) forces interpretation of the arguments as a multivalued list, even if the list had just one argument. That way you're safe from the shell expanding wildcards or splitting up words with whitespace in them. +=end original + +C<exec> や C<system> で間接オブジェクトを使うのもより安全です。 +この使い方(system() でも同様にうまく動きます)は、たとえ引数が一つだけの +場合も、複数の値を持つリストとして引数を解釈することを強制します。 +この方法で、シェルによるワイルドカード展開や、空白による単語の分割から +守られます。 + @args = ( "echo surprise" ); exec @args; # subject to shell escapes # if @args == 1 exec { $args[0] } @args; # safe even with one-arg list +=begin original + The first version, the one without the indirect object, ran the I<echo> program, passing it C<"surprise"> an argument. The second version didn't--it tried to run a program literally called I<"echo surprise">, didn't find it, and set C<$?> to a non-zero value indicating failure. +=end original + +間接オブジェクトなしの一つ目のバージョンでは、I<echo> プログラムが実行され、 +C<"surprise"> が引数として渡されます。 +二つ目のバージョンでは違います -- 文字通り I<"echo surprise"> という名前の +プログラムを実行しようとして、見つからないので、失敗したことを示すために +C<$?> に非 0 がセットされます。 + +=begin original + Beginning with v5.6.0, Perl will attempt to flush all files opened for output before the exec, but this may not be supported on some platforms (see L<perlport>). To be safe, you may need to set C<$|> ($AUTOFLUSH in English) or call the C<autoflush()> method of C<IO::Handle> on any open handles in order to avoid lost output. +=end original + +v5.6.0 から、Perl は exec の前に出力用に開かれている全てのファイルを +フラッシュしようとしますが、これに対応していないプラットフォームもあります +(L<perlport> を参照してください)。 +安全のためには、出力が重複するのを避けるために、全てのオープンしている +ハンドルに対して C<$|> (English モジュールでは $AUTOFLUSH) を設定するか、 +C<IO::Handle> モジュールの C<autoflush()> メソッドをを呼ぶ必要が +あるかもしれません。 + +=begin original + Note that C<exec> will not call your C<END> blocks, nor will it call any C<DESTROY> methods in your objects. +=end original + +C<exec> は C<END> ブロックや、オブジェクトの C<DESTROY> メソッドを +呼び出さないことに注意してください。 + =item exists EXPR =begin original @@ -3173,21 +3273,28 @@ =end original -Although the deepest nested array or hash will not spring into existence -just because its existence was tested, any intervening ones will. -Thus C<< $ref->{"A"} >> and C<< $ref->{"A"}->{"B"} >> will spring -into existence due to the existence test for the $key element above. -This happens anywhere the arrow operator is used, including even: -(*TBT*) +ネストした配列やハッシュの一番深い部分は、その存在をテストしただけでは +存在するようにはなりませんが、途中のものは存在するようになります。 +従って C<< $ref->{"A"} >> と C<< $ref->{"A"}->{"B"} >> は上記の $key の +存在をテストしたことによって存在するようになります。 +これは、矢印演算子が使われるところでは、以下のようなものを含むどこででも +起こります。 undef $ref; if (exists $ref->{"Some key"}) { } print $ref; # prints HASH(0x80d3d5c) +=begin original + This surprising autovivification in what does not at first--or even second--glance appear to be an lvalue context may be fixed in a future release. +=end original + +一目見ただけでは -- あるいは二目見ても -- 驚かされる、左辺値コンテキストでの +自動有効化は将来のリリースでは修正されるでしょう。 + =begin original See L<perlref/"Pseudo-hashes: Using an array as a hash"> for specifics @@ -3416,18 +3523,21 @@ =end original -Two potentially non-obvious but traditional C<flock> semantics are -that it waits indefinitely until the lock is granted, and that its locks -B<merely advisory>. Such discretionary locks are more flexible, but offer -fewer guarantees. This means that files locked with C<flock> may be -modified by programs that do not also use C<flock>. See L<perlport>, -your port's specific documentation, or your system-specific local manpages -for details. It's best to assume traditional behavior if you're writing -portable programs. (But if you're not, you should as always feel perfectly -free to write for your own system's idiosyncrasies (sometimes called -"features"). Slavish adherence to portability concerns shouldn't get -in the way of your getting your job done.) -(*TBT*) +明白ではないものの、伝統的な C<flock> の動作としては、ロックが得られるまで +無限に待ち続けるものと、B<単に勧告的に> ロックするものの二つがあります。 +このような自由裁量のロックはより柔軟ですが、保障されるものはより少ないです。 +これは、C<flock> でロックされたファイルは C<flock> を使わない +プログラムによって書き換えられるかもしれないことを意味します。 +詳細については、L<perlport>、システム固有のドキュメント、システム固有の +ローカルの man ページを参照してください。 +移植性のあるプログラムを書く場合は、伝統的な振る舞いを仮定するのが +ベストです。 +(しかし移植性のないプログラムを書く場合は、自身のシステムの性癖(しばしば +「仕様」と呼ばれます)に合わせて書くことも完全に自由です。 +盲目的に移植性に固執することで、あなたの作業を仕上げるのを邪魔するべきでは +ありません。) + +=begin original OPERATION is one of LOCK_SH, LOCK_EX, or LOCK_UN, possibly combined with LOCK_NB. These constants are traditionally valued 1, 2, 8 and 4, but @@ -3438,15 +3548,49 @@ LOCK_SH or LOCK_EX then C<flock> will return immediately rather than blocking waiting for the lock (check the return status to see if you got it). +=end original + +OPERATION は LOCK_SH, LOCK_EX, LOCK_UN のいずれかで、LOCK_NB と +組み合わされることもあります。 +これらの定数は伝統的には 1, 2, 8, 4 の値を持ちますが、Fcntl モジュールから +シンボル名を独立してインポートするか、 ':flock' タグを使うグループとして、 +シンボル名をを使うことができます。 +LOCK_SH は共有ロックを要求し、LOCK_EX は排他ロックを要求し、LOCK_UN は +前回要求したロックを開放します。 +LOCK_NB と LOCK_SH か LOCK_EX がビット単位の論理和されると、C<flock> は +ロックを取得するまで待つのではなく、すぐに返ります(ロックが取得できたか +どうかは返り値を調べます)。 + +=begin original + To avoid the possibility of miscoordination, Perl now flushes FILEHANDLE before locking or unlocking it. +=end original + +不一致の可能性を避けるために、Perl はファイルをロック、アンロックする前に +FILEHANDLE をフラッシュします。 + +=begin original + Note that the emulation built with lockf(3) doesn't provide shared locks, and it requires that FILEHANDLE be open with write intent. These are the semantics that lockf(3) implements. Most if not all systems implement lockf(3) in terms of fcntl(2) locking, though, so the differing semantics shouldn't bite too many people. +=end original + +lockf(3) で作成されたエミュレーションは共有ロックを提供せず、 +FILEHANDLE が書き込みモードで開いていることを必要とすることに +注意してください。 +これは lockf(3) が実装している動作です。 +しかし、全てではないにしてもほとんどのシステムでは fcntl(2) を使って +lockf(3) を実装しているので、異なった動作で多くの人々を混乱させることは +ないはずです。 + +=begin original + Note also that some versions of C<flock> cannot lock things over the network; you would need to use the more system-specific C<fcntl> for that. If you like you can force Perl to ignore your system's flock(2) @@ -3454,6 +3598,14 @@ the switch C<-Ud_flock> to the F<Configure> program when you configure perl. +=end original + +ネットワーク越しにはロックできない C<flock> もあることに注意してください; +このためには、よりシステム依存な C<fcntl> を使う必要があります。 +Perl にシステムの flock(2) 関数を無視させ、自身の fcntl(2) ベースの +エミュレーションを使う場合は、perl を設定するときに F<Configure> +プログラムに C<-Ud_flock> オプションを渡してください。 + =begin original Here's a mailbox appender for BSD systems. @@ -3539,11 +3691,10 @@ =end original -v5.6.0 から、Perl は小プロセスを fork する前に出力用にオープンしている全ての -ファイルをフラッシュしようとします。 -しかし、これは対応していないプラットフォームもあります -(L<perlport> を参照してください)。 -安全のためには、出力が重複するのを避けるためには、 +v5.6.0 から、Perl は子プロセスを fork する前に出力用にオープンしている全ての +ファイルをフラッシュしようとしますが、これに対応していないプラットフォームも +あります(L<perlport> を参照してください)。 +安全のためには、出力が重複するのを避けるために、 全てのオープンしているハンドルに対して C<$|> (English モジュールでは $AUTOFLUSH) を設定するか、 C<IO::Handle> モジュールの C<autoflush()>メソッドをを呼ぶ必要が @@ -3896,6 +4047,8 @@ (エントリが存在しなければ、空リストが返されます。) +=begin original + The exact meaning of the $gcos field varies but it usually contains the real name of the user (as opposed to the login name) and other information pertaining to the user. Beware, however, that in many @@ -3904,6 +4057,15 @@ L<perlsec>). The $passwd and $shell, user's encrypted password and login shell, are also tainted, because of the same reason. +=end original + +$gcos フィールドの正確な意味はさまざまですが、通常は(ログイン名ではなく) +ユーザーの実際の名前とユーザーに付随する情報を含みます。 +但し、多くのシステムではユーザーがこの情報を変更できるので、この情報は +信頼できず、従って $gcos は汚染されます(L<perlsec> を参照してください)。 +ユーザーの暗号化されたパスワードとログインシェルである $passwd と +$shell も、同様の理由で汚染されます。 + =begin original In scalar context, you get the name, unless the function was a @@ -3925,6 +4087,8 @@ $name = getgrent(); #etc. +=begin original + In I<getpw*()> the fields $quota, $comment, and $expire are special cases in the sense that in many systems they are unsupported. If the $quota is unsupported, it is an empty scalar. If it is supported, it @@ -3947,6 +4111,32 @@ and Linux.) Those systems which implement a proprietary shadow password facility are unlikely to be supported. +=end original + +I<getpw*()> では、$quota, $comment, $expire フィールドは、 +多くのシステムでは対応していないので特別な処理がされます。 +$quota が非対応の場合、空のスカラになります。 +対応している場合、通常はディスククォータの値が入ります。 +$comment フィールドが非対応の場合、空のスカラになります。 +対応している場合、通常はユーザーに関する管理上のコメントが入ります。 +$quota フィールドはパスワードの寿命を示す $change や $age である +システムもあります。 +$comment フィールドは $class であるシステムもあります。 +$expire フィールドがある場合は、アカウントやパスワードが時間切れになる +期間が入ります。 +動作させるシステムでのこれらのフィールドの有効性と正確な意味については、 +getpwnam(3) のドキュメントと F<pwd.h> ファイルを参照してください。 +$quota と $comment フィールドが何を意味しているかと、$expire フィールドが +あるかどうかは、C<Config> モジュールを使って、C<d_pwquota>, C<d_pwage>, +C<d_pwchange>, C<d_pwcomment>, C<d_pwexpire> の値を調べることによって +Perl 自身で調べることも出来ます。 +シャドウパスワードは、通常の C ライブラリルーチンを権限がある状態で +呼び出すことでシャドウ版が取得できるか、System V にあるような +(Solaris と Linux を含みます) shadow(3) 関数があるといった、 +直感的な方法で実装されている場合にのみ対応されます。 +独占的なシャドウパスワード機能を実装しているシステムでは、 +それに対応されることはないでしょう。 + =begin original The $members value returned by I<getgr*()> is a space separated list of @@ -4369,7 +4559,7 @@ C<$_> は、LIST の値へのエイリアスですので、LIST の要素を 変更するために使うことができます。 これは、便利でサポートされていますが、 -LIST の要素が変数でないと、悲惨な結果になります。 +LIST の要素が変数でないと、おかしな結果になります。 同様に、grep は元のリストへのエイリアスを返します。 for ループのインデックス変数がリスト要素のエイリアスであるのと 同様です。 @@ -5249,6 +5439,8 @@ $hash{getkey($_)} = $_; } +=begin original + Note that C<$_> is an alias to the list value, so it can be used to modify the elements of the LIST. While this is useful and supported, it can cause bizarre results if the elements of LIST are not variables. @@ -5256,6 +5448,19 @@ most cases. See also L</grep> for an array composed of those items of the original list for which the BLOCK or EXPR evaluates to true. +=end original + +C<$_> は、LIST の値へのエイリアスですので、LIST の要素を +変更するために使うことができます。 +これは、便利でサポートされていますが、 +LIST の要素が変数でないと、おかしな結果になります。 +この目的には通常の C<foreach> ループを使うことで、ほとんどの場合は +より明確になります。 +BLOCK や EXPR が真になる元のリストの要素からなる配列については、 +L</grep> も参照してください。 + +=begin original + C<{> starts both hash references and blocks, so C<map { ...> could be either the start of map BLOCK LIST or map EXPR, LIST. Because perl doesn't look ahead for the closing C<}> it has to take a guess at which its dealing with @@ -5265,6 +5470,18 @@ reported close to the C<}> but you'll need to change something near the C<{> such as using a unary C<+> to give perl some help: +=end original + +C<{> はハッシュリファレンスとブロックの両方の開始文字なので、 +C<map { ...> は map BLOCK LIST の場合と map EXPR, LIST の場合があります。 +perl は終了文字の C<}> を先読みしないので、C<{> の直後の文字を見て +どちらとして扱うかを推測します。 +通常この推測は正しいですが、もし間違った場合は、C<}> まで読み込んで +カンマが足りない(または多い)ことがわかるまで、何かがおかしいことに +気付きません。 +C<}> の近くで文法エラーが出ますが、perl を助けるために単項の C<+> を +使うというように、C<{> の近くの何かを変更する必要があります。 + %hash = map { "\L$_", 1 } @array # perl guesses EXPR. wrong %hash = map { +"\L$_", 1 } @array # perl guesses BLOCK. right %hash = map { ("\L$_", 1) } @array # this also works @@ -5309,6 +5526,8 @@ 成功時には真を返し、失敗時には偽を返して C<$!> (errno) を設定します。 MASK を省略すると、0777 とみなします。 +=begin original + In general, it is better to create directories with permissive MASK, and let the user modify that with their C<umask>, than it is to supply a restrictive MASK and give the user no way to be more permissive. @@ -5316,6 +5535,15 @@ kept private (mail files, for instance). The perlfunc(1) entry on C<umask> discusses the choice of MASK in more detail. +=end original + +一般的に、制限された MASK を使ってユーザーがより寛容にする方法を +与えないより、寛容な MASK でディレクトリを作り、ユーザーが自身の C<umask> で +修正するようにした方がよいです。 +例外は、(例えばメールファイルのような)プライベートに保つべきファイルや +ディレクトリを書く場合です。 +perlfunc(1) の C<umask> で、MASK の選択に関して詳細に議論しています。 + =item msgctl ID,CMD,ARG =begin original