Kentaro Shirakata
argra****@users*****
2007年 7月 7日 (土) 22:33:26 JST
Index: docs/perl/5.6.1/perlfunc.pod diff -u docs/perl/5.6.1/perlfunc.pod:1.11 docs/perl/5.6.1/perlfunc.pod:1.12 --- docs/perl/5.6.1/perlfunc.pod:1.11 Fri Jul 6 01:58:53 2007 +++ docs/perl/5.6.1/perlfunc.pod Sat Jul 7 22:33:26 2007 @@ -3256,7 +3256,7 @@ C<fcntl> からの返り値のチェックに C<defined> を使う必要はありません。 C<ioctl> と違って、C<fnctl> はシステムコールの結果が C<0> だった場合は -C<"0 だが真">を返します。 +C<"0 だが真"> を返します。 この文字列は真偽値コンテキストでは真となり、 数値コンテキストでは C<0> になります。 これはまた、不適切な数値変換に関する通常の B<-w> 警告を回避します。 @@ -4218,8 +4218,9 @@ C<goto-&NAME> の形式は、その他の C<goto> の形式とはかなり 異なったものです。 実際、これは普通の感覚でいうところのどこかへ行くものでは全くなく、 -他の goto が持つ不名誉を持っていません。これは、実行中の -サブルーチンを、NAME で指定されたサブルーチンの呼び出しで置き換えます。 +他の goto が持つ不名誉を持っていません。 +これは、実行中のサブルーチンを、NAME で指定されたサブルーチンの +呼び出しで置き換えます。 これは、C<AUTOLOAD> サブルーチンが別のサブルーチンをロードして、 その別のサブルーチンが最初に呼ばれたようにするために使われます (ただし、現在のサブルーチンで C<@_> を修正した場合には、 @@ -4303,8 +4304,14 @@ 元のリストの要素が変更されます。 これはきれいなコードを書こうとする邪魔になることが多いです。 +=begin original + See also L</map> for a list composed of the results of the BLOCK or EXPR. +=end original + +BLOCK や EXPR の結果をリストの形にしたい場合は L</map> を参照してください。 + =item hex EXPR =item hex @@ -4332,8 +4339,8 @@ =end original -16 進文字列は整数のみを表現します。整数オーバーフローを起こすような -文字列は警告を引き起こします。 +16 進文字列は整数のみを表現します。 +整数オーバーフローを起こすような文字列は警告を引き起こします。 =item import @@ -4346,6 +4353,11 @@ =end original +ビルトインの C<import> 関数はありません。 +これは他のモジュールに名前をエクスポートしたいモジュールによって +定義(または継承)された普通のメソッド(サブルーチン)です。 +C<use> 関数はパッケージを使う時に C<import> メソッドを呼び出します。 +L</use>, L<perlmod>, L<Exporter> も参照してください。 組み込みの C<import> 関数というものはありません。 これは単に、別のモジュールに名前をエクスポートしたいモジュールが 定義した(継承した)、通常のメソッド(サブルーチン)です。 @@ -4373,7 +4385,7 @@ 完全正規表現パターンマッチのワイルドカード的な振る舞いはしません。 STR の中の POSITION の位置以降で、最初に SUBSTR が見つかった位置を返します。 POSITION が省略された場合には、STR の最初から探し始めます。 -返り値のベースは、C<0> (もしくは、変数 C<$[> に設定した値です--が、 +返り値のベースは、C<0> (もしくは、変数 C<$[> に設定した値です -- しかし、 これは使ってはいけません)。 SURSTR が見つからなかった場合には、ベースよりも 1 小さい値、 通常は C<-1> が返されます。 @@ -4395,8 +4407,9 @@ =end original -EXPR の整数部を返します。 EXPR を省略すると、C<$_> を -使います。この関数を丸めのために使うべきではありません。 +EXPR の整数部を返します。 +EXPR を省略すると、C<$_> を使います。 +この関数を丸めのために使うべきではありません。 第一の理由として C<0> の方向への切捨てを行うから、第二の理由として 浮動小数点数の機械表現は時々直感に反した結果を生み出すからです。 たとえば、C<int(-6.725/0.025)> は正しい結果である -269 ではなく @@ -4413,8 +4426,8 @@ =end original -ioctl(2) 関数を実装します。 正しい関数の -定義を得るために、おそらく最初に +ioctl(2) 関数を実装します。 +正しい関数の定義を得るために、おそらく最初に require "ioctl.ph"; # probably in /usr/local/lib/perl/ioctl.ph @@ -4443,10 +4456,10 @@ Perl スクリプトがこれを手助けしてくれるでしょうが、これは重要です。) FOUNCTION に応じて SCALAR が読み書きされます。 SCALAR の文字列値へのポインタが、実際の C<ioctl> コールの -3 番目の引数として渡されます。 (SCALAR が文字列値を -持っておらず、数値を持っている場合には、文字列値へのポインタの代わりに、 -その値が渡されます。このことを保証するためには、使用する前に SCALAR に -C<0> を足してください。) +3 番目の引数として渡されます。 +(SCALAR が文字列値を持っておらず、数値を持っている場合には、 +文字列値へのポインタの代わりに、その値が渡されます。 +このことを保証するためには、使用する前に SCALAR にC<0> を足してください。) C<ioctl> で使われる構造体の値を操作するには、 C<pack> 関数と C<unpack> 関数が必要となるでしょう。 @@ -4458,11 +4471,20 @@ C<ioctl> (と C<fcntl>) の返り値は、以下のようになります: +=begin original + if OS returns: then Perl returns: -1 undefined value 0 string "0 but true" anything else that number +=end original + + OS が返した値: Perl が返す値: + -1 未定義値 + 0 「0 だが真」の文字列 + その他 その値そのもの + =begin original Thus Perl returns true on success and false on failure, yet you can @@ -4477,9 +4499,16 @@ $retval = ioctl(...) || -1; printf "System returned %d\n", $retval; +=begin original + The special string "C<0> but true" is exempt from B<-w> complaints about improper numeric conversions. +=end original + +特別な文字列 C<"0 だが真"> は、不適切な数値変換に関する +B<-w> 警告を回避します。 + =begin original Here's an example of setting a filehandle named C<REMOTE> to be @@ -4510,13 +4539,22 @@ =end original LIST の個別の文字列を、EXPR の値で区切って -1 つの文字列につなげ、その文字列を返します。例: +1 つの文字列につなげ、その文字列を返します。 +例: $rec = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell); +=begin original + Beware that unlike C<split>, C<join> doesn't take a pattern as its first argument. Compare L</split>. +=end original + +C<split> と違って、C<join> は最初の引数にパターンは取れないことに +注意してください。 +L</split> と比較してください。 + =item keys HASH =begin original @@ -4533,6 +4571,7 @@ 指定したハッシュのすべての key からなる、リストを返します。 (スカラコンテキストでは、key の数を返します。) +キーは見たところではランダムな順番に返されます。 実際のランダムな順番は perl の将来のバージョンでは変わるかもしれませんが、 C<values> や C<each> 関数が同じ(変更されていない)ハッシュに対して 生成するのと同じ順番であることは保証されます。 @@ -4544,8 +4583,7 @@ =end original -環境変数 -を表示する別の例です: +環境変数を表示する別の例です: @keys = keys %ENV; @values = values %ENV; @@ -4565,23 +4603,49 @@ print $key, '=', $ENV{$key}, "\n"; } +=begin original + The returned values are copies of the original keys in the hash, so modifying them will not affect the original hash. Compare L</values>. +=end original + +返される値はハッシュにある元のキーのコピーなので、 +これを変更しても元のハッシュには影響を与えません。 +L</values> と比較してください。 + +=begin original + To sort a hash by value, you'll need to use a C<sort> function. Here's a descending numeric sort of a hash by its values: +=end original + +ハッシュを値でソートするためには、C<sort> 関数を使う必要があります。 +以下ではハッシュの値を数値の降順でソートしています: + foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash) { printf "%4d %s\n", $hash{$key}, $key; } +=begin original + As an lvalue C<keys> allows you to increase the number of hash buckets allocated for the given hash. This can gain you a measure of efficiency if you know the hash is going to get big. (This is similar to pre-extending an array by assigning a larger number to $#array.) If you say +=end original + +左辺値としては、C<keys> を使うことで与えられたハッシュに割り当てられた +ハッシュ表の大きさを増やすことができます。 +これによって、ハッシュが大きくなっていくなっていくときの +効率の測定ができます。以下のようにすると: + keys %hash = 200; +=begin original + then C<%hash> will have at least 200 buckets allocated for it--256 of them, in fact, since it rounds up to the next power of two. These buckets will be retained even if you do C<%hash = ()>, use C<undef @@ -4590,8 +4654,24 @@ C<keys> in this way (but you needn't worry about doing this by accident, as trying has no effect). +=end original + +C<%hash> は少なくとも 200 の大きさの表が割り当てられます -- +実際には 2 のべき乗に切り上げられるので、256 が割り当てられます。 +この表はたとえ C<%hash = ()> としても残るので、 +もし C<%hash> がスコープにいるうちにこの領域を開放したい場合は +C<undef %hash> を使います。 +この方法で C<keys> を使うことで、表の大きさを小さくすることはできません +(間違えてそのようなことをしても何も起きないので気にすることはありません)。 + +=begin original + See also C<each>, C<values> and C<sort>. +=end original + +C<each>, C<values>, C<sort> も参照してください。 + =item kill SIGNAL, LIST =begin original @@ -4619,7 +4699,7 @@ =end original SIGNAL がゼロの場合、プロセスにシグナルは送られません。 -これはプロセスが生きていて、 UID が代わっていないことを調べる時に +これはプロセスが生きていて、 UID が変わっていないことを調べる時に 有用です。 この構成の移植性に関する注意については L<perlport> を参照して下さい。 @@ -4674,8 +4754,8 @@ =end original C<last> は C<eval {}>, C<sub {}>, C<do {}> といった -値を返すブロックを終了するのには使えません。 -また grep() や map() 操作を終了するのに使うべきではありません。 +値を返すブロックを終了するのには使えませんし、 +grep() や map() 操作を終了するのに使うべきではありません。 =begin original @@ -4689,9 +4769,16 @@ 注意してください。従って、C<last> でそのようなブロックを 途中で抜け出すことができます。 +=begin original + See also L</continue> for an illustration of how C<last>, C<next>, and C<redo> work. +=end original + +C<last>, C<next>, C<redo> がどのように働くかについては +L</continue> を参照して下さい。 + =item lc EXPR =item lc @@ -4758,8 +4845,8 @@ =end original -EXPR の値の文字列長を返します。 EXPR が省略されたと -きには、C<$_> の長さを返します。 +EXPR の値の文字の長さを返します。 +EXPR が省略されたときには、C<$_> の長さを返します。 これは配列やハッシュ全体に対してどれだけの要素を含んでいるかを 調べるためには使えません。 そのような用途には、それぞれ C<scalar @array> と C<scalar keys %hash> を @@ -4916,6 +5003,8 @@ $now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994" +=begin original + This scalar value is B<not> locale dependent, see L<perllocale>, but instead a Perl builtin. Also see the C<Time::Local> module (to convert the second, minutes, hours, ... back to seconds since the @@ -4925,16 +5014,37 @@ strings, set up your locale environment variables appropriately (please see L<perllocale>) and try for example: +=end original + +スカラ値はロケール依存 B<ではなく>、Perl の組み込みの値です +(L<perllocale> を参照してください)。 +また、(秒、分、時…の形から、time() が返す値である +1970 年 1 月 1 日の真夜中からの秒数に変換する) C<Time::Local> モジュール +及び POSIX モジュールで提供される strftime(3) と mktime(3) 関数も +参照してください。 +似たような、しかしロケール依存の日付文字列がほしい場合は、 +ロケール環境変数を適切に設定して(L<perllocale> を参照してください)、 +以下の例を試してください: + use POSIX qw(strftime); $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime; +=begin original + Note that the C<%a> and C<%b>, the short forms of the day of the week and the month of the year, may not necessarily be three characters wide. +=end original + +曜日と月の短い表現である C<%a> と C<%b> は、3 文字とは限らないことに +注意してください。 + =item lock lock I<THING> +=begin original + This function places an advisory lock on a variable, subroutine, or referenced object contained in I<THING> until the lock goes out of scope. This is a built-in function only if your version of Perl @@ -4942,6 +5052,15 @@ Otherwise a user-defined function by this name will be called. See L<Thread>. +=end original + +この関数は I<THING> が含む変数、サブルーチン、リファレンスされた +オブジェクトに、スコープから出るまでアドバイサリロックを掛けます. +これはスレッドを有効にしてビルドされた Perl で、かつ C<use Threads> した +場合にのみ組み込み関数となります。 +それ以外の場合はこの名前をもつユーザーが定義した関数が呼び出されます。 +L<Thread> を参照してください。 + =item log EXPR =item log @@ -5010,7 +5129,8 @@ =end original -マッチ演算子です。L<perlop> を参照してください。 +マッチ演算子です。 +L<perlop> を参照してください。 =item map BLOCK LIST @@ -5028,10 +5148,10 @@ =end original LIST の個々の要素に対して、BLOCK か EXPR を評価し -(C<$_> は、ローカルに個々の要素が設定されます) 、それぞれの -評価結果からなるリスト値が返されます。 -スカラコンテキストでは、生成された要素の数を返します。 BLOCK や -EXPR をリストコンテキストで評価しますので、LIST の +(C<$_> は、ローカルに個々の要素が設定されます) 、 +それぞれの評価結果からなるリスト値が返されます。 +スカラコンテキストでは、生成された要素の数を返します。 +BLOCK や EXPR をリストコンテキストで評価しますので、LIST の 個々の要素によって作られる、返り値であるリストの要素数は、 0 個の場合もあれば、複数の場合もあります。 @@ -5084,12 +5204,24 @@ %hash = map ( lc($_), 1 ), @array # evaluates to (1, @array) +=begin original + or to force an anon hash constructor use C<+{> +=end original + +または C<+{> を使って無名ハッシュコンストラクタを強制します: + @hashes = map +{ lc($_), 1 }, @array # EXPR, so needs , at end +=begin original + and you get list of anonymous hashes each with only 1 entry. +=end original + +こうするとそれぞれ 1 要素だけの無名ハッシュのリストを得られます。 + =item mkdir FILENAME,MASK =item mkdir FILENAME @@ -5103,10 +5235,10 @@ =end original -FILENAME で指定したディレクトリを、MASK で指定した許 -可モード (を C<umask> で修正したもの) で作成します。 -成功時には true を返し、失敗時には false を返して C<$!> (errno) -を設定します。MASK を省略すると、0777 とみなします。 +FILENAME で指定したディレクトリを、MASK で指定した許可モード(を +C<umask> で修正したもの) で作成します。 +成功時には真を返し、失敗時には偽を返して C<$!> (errno) を設定します。 +MASK を省略すると、0777 とみなします。 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 @@ -5194,11 +5326,11 @@ =end original -System V IPC 関数 msgsnd を呼び出し、メッセージキュ -ー ID にメッセージ MSG を送信します。 MSG の先頭は、 -ネイティブなlong 整数のメッセージタイプでなければならず、 -メッセージの長さ、メッセージ本体と続きます。これは、 -C<pack("l! a*", $type, $message)> として生成できます。 +System V IPC 関数 msgsnd を呼び出し、メッセージキュー ID に +メッセージ MSG を送信します。 +MSG の先頭は、ネイティブなlong 整数のメッセージタイプでなければならず、 +メッセージの長さ、メッセージ本体と続きます。 +これは、C<pack("l! a*", $type, $message)> として生成できます。 成功時には真を、エラー時には偽を返します。 C<IPC::SysV> と C<IPC::SysV::Msg> も参照してください。 @@ -5216,9 +5348,8 @@ =end original C<my> はリストアップされた変数を、囲っているブロック、ファイル、 -C<eval> の中で -ローカルな (レキシカルな) ものにします。 複数の値を並べる場合には、 -括弧で括る必要があります。 +C<eval> の中でローカルな (レキシカルな) ものにします。 +複数の値を並べる場合には、括弧で括る必要があります。 詳しくはL<perlsub/"Private Variables via my()">を参照してください。 =item next LABEL @@ -5310,9 +5441,9 @@ =end original EXPR を 8 進数文字列と解釈して、対応する値を返します。 -(EXPR が C<0x> で始まるときには、16 進数文字列と -解釈します。EXPR が C<0b>で始まるときは、 -2 進数文字列と解釈します。) 以下の例は、標準的な Perl や C の記法での +(EXPR が C<0x> で始まるときには、16 進数文字列と解釈します。 +EXPR が C<0b>で始まるときは、2 進数文字列と解釈します。) +以下の例は、標準的な Perl や C の記法での 10 進数、2 進数、8 進数、16 進数を扱います: $val = oct($val) if $val =~ /^0/; @@ -5324,8 +5455,8 @@ =end original -EXPR を省略すると、C<$_> を使用します。(8 進数を扱う)その他の方法としては -sprintf() または printf()があります。 +EXPR を省略すると、C<$_> を使用します。 +(8 進数を扱う)その他の方法としては sprintf() または printf()があります。 $perms = (stat("filename"))[2] & 07777; $oct_perms = sprintf "%lo", $perms; @@ -5339,8 +5470,8 @@ =end original -oct() 関数は例えば、 C<644> といった文字列をファイルモードに変換する -時によく使います。 +oct() 関数は例えば、 C<644> といった文字列をファイルモードに変換する時に +よく使います。 (Perl は必要に応じて自動的に文字列を数値に変換しますが、 この自動変換は十進数を仮定します。) @@ -5360,9 +5491,9 @@ =end original EXPR でファイル名を指定するファイルをオープンして、 -FILEHANDLE に対応させます。 FILEHANDLE が式のときに -は、その値が実際に使用するファイルハンドルの名前として -使われます。 +FILEHANDLE に対応させます。 +FILEHANDLE が式のときには、その値が実際に使用するファイルハンドルの +名前として使われます。 (これはシンボリックリファレンスと考えられますので、 C<use strict 'refs'> はI<効果がありません>。) @@ -5377,11 +5508,12 @@ =end original -EXPR を省略すると、FILEHANDLE と同じ -名前のスカラ変数に、ファイル名が入れられているものとして処理されます。 +EXPR を省略すると、FILEHANDLE と同じ名前のスカラ変数に、 +ファイル名が入れられているものとして処理されます。 (C<my> で宣言されたレキシカル変数はこの目的には使えません。 従って、C<my>を使った場合は、open を呼び出すときに EXPR を指定してください。) -ファイルのオープンに関するより親切な説明については L<perlopentut> を参照して下さい。 +ファイルのオープンに関するより親切な説明については +L<perlopentut> を参照して下さい。 =begin original @@ -5415,13 +5547,28 @@ 作成されるファイルのパーミッションは C<0666> を プロセスの C<umask> の値で修正したものになります。 +=begin original + These various prefixes correspond to the fopen(3) modes of C<'r'>, C<'r+'>, C<'w'>, C<'w+'>, C<'a'>, and C<'a+'>. +=end original + +これらの様々な前置詞は fopen(3) の C<'r'>, C<'r+'>, +C<'w'>, C<'w+'>, C<'a'>, C<'a+'> のモードに対応します。 + +=begin original + In the 2-arguments (and 1-argument) form of the call the mode and filename should be concatenated (in this order), possibly separated by spaces. It is possible to omit the mode if the mode is C<< '<' >>. +=end original + +2 引数(と 1 引数) の形式ではモードとファイル名は(この順番で) +結合されます(空白によって分割されているかもしれません)。 +モードが C<< '<' >> の場合はモードを省略できます。 + =begin original If the filename begins with C<'|'>, the filename is interpreted as a @@ -5476,8 +5623,7 @@ =end original -open は、成功時には、 -ゼロ以外を返し、失敗時には未定義値を返します。 +open は、成功時にはゼロ以外を返し、失敗時には未定義値を返します。 パイプに関る C<open> のときには、返り値はサブプロセスの pid となります。 If you're unfortunate enough to be running Perl on a system that @@ -5560,13 +5706,12 @@ Bourne シェルの慣例にしたがって、EXPR の先頭に C<< '>&' >> を付けると、EXPR の残りの文字列をファイルハンドル名 -(数字であれば、ファイル記述子) と解釈して、それを dup -してオープンします。 C<&> は、C<< > >>, C<<< >> >>>, -C<< < >>, C<< +> >>, C<<< +>> >>>, and C<< +< >>というモード指定に -付けることができます。 +(数字であれば、ファイル記述子) と解釈して、それを複製してオープンします。 +C<&> は、C<< > >>, C<<< >> >>>, C<< < >>, C<< +> >>, C<<< +>> >>>, +C<< +< >>というモード指定に付けることができます。 指定するモード指定は、もとのファイルハンドルのモードと 合っていないといけません。 -(ファイルハンドルの複製は既に存在する stdio バッファの内容に含めません) +(ファイルハンドルの複製は既に存在する stdio バッファの内容に含めません。) ファイルハンドルの複製は 3 引数 open() ではまだ対応していません。 =begin original @@ -5576,8 +5721,7 @@ =end original -STDOUT と STDERR をいったん保存し、 -リダイレクトし、元に戻すスクリプトを示します。 +STDOUT と STDERR を保存し、リダイレクトし、元に戻すスクリプトを示します。 #!/usr/bin/perl open(OLDOUT, ">&STDOUT"); @@ -5698,7 +5842,8 @@ ファイルに対する close-on-exec フラグをサポートしているシステムでは、 フラグは$^F の値で決定される、新しくオープンされたファイル記述子に対して -セットされます。L<perlvar/$^F>を参照してください。 +セットされます。 +L<perlvar/$^F>を参照してください。 =begin original @@ -5798,11 +5943,12 @@ =end original -If you want a "real" C C<open> (see L<open(2)> on your system), then you -should use the C<sysopen> function, which involves no such magic (but -may use subtly different filemodes than Perl open(), which is mapped -to C fopen()). This is -another way to protect your filenames from interpretation. For example:(*TBT*) +もし「本当の」C 言語の C<open> (システムの L<open(2)> を参照してください)が +必要なら、このような副作用のない C<sysopen> 関数を使うべきです +(ただし、C の fopen() に割り付けられる Perl の open() とは +かすかに違うファイルモードを持ちます)。 +これはファイル名を解釈から守るもう一つの方法です。 +例えば: use IO::Handle; sysopen(HANDLE, $path, O_RDWR|O_CREAT|O_EXCL) @@ -5812,11 +5958,20 @@ seek(HANDLE, 0, 0); print "File contains: ", <HANDLE>; +=begin original + Using the constructor from the C<IO::Handle> package (or one of its subclasses, such as C<IO::File> or C<IO::Socket>), you can generate anonymous filehandles that have the scope of whatever variables hold references to them, and automatically close whenever and however you leave that scope: +=end original + +C<IO::Handle> パッケージ(または C<IO::File> や C<IO::Socket> といった +サブパッケージ)のコンストラクタを使うことで、 +これらへのリファレンスを保持している変数のスコープを持ち、 +スコープから離れると自動的に閉じる無名ファイルハンドルを作成できます: + use IO::File; #... sub read_myfile_munged { @@ -6077,10 +6232,9 @@ U Unicode 文字番号。内部的に UTF-8 にエンコードされます。 C<use utf8> が有効でなくても動作します。 - w A BER compressed integer. Its bytes represent an unsigned - integer in base 128, most significant digit first, with as - few digits as possible. Bit eight (the high bit) is set - on each byte except the last. + w A BER 圧縮変数。このバイト列はできるだけ少ない桁数で表現された + 128 を基とした符号なし整数で、最上位ビットから順に並びます。 + 最後のバイト以外の各バイトのビット 8 (上位ビット) がセットされます。 x ヌル文字 X 1 文字後退 @@ -6348,9 +6502,16 @@ print join(" ", map { sprintf "%#02x", $_ } unpack("C*",pack("L",0x12345678))), "\n"; +=begin original + The byteorder on the platform where Perl was built is also available via L<Config>: +=end original + +Perl がビルドされたプラットフォームでのバイト順序は +L<Config> でも知ることができます: + use Config; print $Config{byteorder}, "\n"; @@ -6400,7 +6561,8 @@ 別のマシンでは読めないかもしれないということです。 たとえ双方で IEEE フォーマットの浮動小数点数演算を 行なっていてもです (IEEE の仕様では、メモリ表現上のバイト順序までは、 -規定されていないからです)。L<perlport>も参照してください。 +規定されていないからです)。 +L<perlport> も参照してください。 =begin original @@ -6414,11 +6576,13 @@ Perl では、すべての数値演算のために、 内部的に double を使用しています。 double から float へ変換し、それから再び double に戻すと -精度が落ちることになります (つまり、C<unpack("f", pack("f", $foo)>) -は、一般には $foo と同じではないということです)。 +精度が落ちることになります (つまり、C<unpack("f", pack("f", $foo)>) は、 +一般には $foo と同じではないということです)。 =item * +=begin original + If the pattern begins with a C<U>, the resulting string will be treated as Unicode-encoded. You can force UTF8 encoding on in a string with an initial C<U0>, and the bytes that follow will be interpreted as Unicode @@ -6426,14 +6590,35 @@ with C<C0> (or anything else) to force Perl not to UTF8 encode your string, and then follow this with a C<U*> somewhere in your pattern. +=end original + +パターンが C<U> で始まっている場合、結果の文字列は Unicode で +エンコードされているものとして扱われます。 +先頭に C<U0> を持つ文字列で UTF8 エンコーディングを強制でき、 +引き続くバイト列は Unicode 文字列として解釈されます。 +このようなことが起きてほしくない場合は、 +パターンを C<C0> (か他のもの)で始めることによって、 +Perl に文字列を UTF8 エンコードさせないように強制でき、 +その後にパターンのどこかに C<U*> を置きます。 + =item * +=begin original + You must yourself do any alignment or padding by inserting for example enough C<'x'>es while packing. There is no way to pack() and unpack() could know where the bytes are going to or coming from. Therefore C<pack> (and C<unpack>) handle their output and input as flat sequences of bytes. +=end original + +パックするときに、例えば十分な数の C<'x'> を挿入することによって +アライメントやパッディングを行うのは全て自分でしなければなりません。 +バイト列がどこへ行くか・どこから来たかを pack() や unpack() が +知る方法はありません。 +従って C<pack> (と C<unpack>) は出力と入力をフラットなバイト列として扱います。 + =item * =begin original @@ -6545,10 +6730,18 @@ C<$::sail> is equivalent to C<$main::sail> (as well as to C<$main'sail>, still seen in older code). +=begin original + If NAMESPACE is omitted, then there is no current package, and all identifiers must be fully qualified or lexicals. This is stricter than C<use strict>, since it also extends to function names. +=end original + +NAMESPACE が省略されると、カレントパッケージはなくなるので、 +全ての識別子は完全修飾されるかレキシカルでなければなりません。 +これは関数名にも適用されるので、C<use strict> より厳しいです。 + =begin original See L<perlmod/"Packages"> for more information about packages, modules, @@ -7112,14 +7305,31 @@ print; } +=begin original + C<redo> cannot be used to retry a block which returns a value such as C<eval {}>, C<sub {}> or C<do {}>, and should not be used to exit a grep() or map() operation. +=end original + +C<redo> は C<eval {}>, C<sub {}>, C<do {}> のように値を返す +ブロックを繰り返すのには使えません。 +また、grep() や map() 操作から抜けるのに使うべきではありません。 + +=begin original + Note that a block by itself is semantically identical to a loop that executes once. Thus C<redo> inside such a block will effectively turn it into a looping construct. +=end original + +ブロック自身は一回だけ実行されるループと文法的に同一であることに +注意してください。 +従って、ブロックの中で C<redo> を使うことで効果的に +ループ構造に変換します。 + =begin original See also L</continue> for an illustration of how C<last>, C<next>, and @@ -7689,9 +7899,16 @@ but it I<does> clear the end-of-file condition on the handle, so that the next C<< <FILE> >> makes Perl try again to read something. We hope. +=begin original + If that doesn't work (some stdios are particularly cantankerous), then you may need something more like this: +=end original + +これが動かない場合(とくに維持の悪い stdio はいます。)、 +以下のようなことをする必要があります: + for (;;) { for ($curpos = tell(FILE); $_ = <FILE>; $curpos = tell(FILE)) { @@ -8334,8 +8551,14 @@ shutdown(Rdr, 1); # no more writing for reader shutdown(Wtr, 0); # no more reading for writer +=begin original + See L<perlipc> for an example of socketpair use. +=end original + +socketpair の使用例については L<perlipc> を参照してください。 + =item sort SUBNAME LIST =item sort BLOCK LIST @@ -8997,8 +9220,15 @@ %llf %Lg +=begin original + You can find out whether your Perl supports long doubles via L<Config>: +=end original + +Perl が long double に対応しているかどうかは L<Config> を使って +調べられます: + use Config; $Config{d_longdbl} eq 'define' && print "long doubles\n"; @@ -9110,16 +9340,35 @@ 単にプログラムの先頭で一回だけ呼び出してください。 さもなければ C<rand> で乱数を I<得られません>! +=begin original + Frequently called programs (like CGI scripts) that simply use +=end original + +(CGI スクリプトのような)頻繁に呼び出されるプログラムで単純に + time ^ $$ +=begin original + for a seed can fall prey to the mathematical property that +=end original + +を種として使うと、3 回に 1 回は以下の数学特性 + a^b == (a+1)^(b+1) +=begin original + one-third of the time. So don't do that. +=end original + +の餌食になります。 +従ってこのようなことはしてはいけません。 + =item stat FILEHANDLE =item stat EXPR @@ -9151,7 +9400,7 @@ =end original -全てのファイルシステムで全てのフィールドに対応しているわけではあります。 +全てのファイルシステムで全てのフィールドに対応しているわけではありません。 フィールドの意味は以下のとおりです。 =begin original @@ -9217,17 +9466,33 @@ (これは、NFS のもとでデバイス番号が負になるマシンで のみ動作します。) +=begin original + Because the mode contains both the file type and its permissions, you should mask off the file type portion and (s)printf using a C<"%o"> if you want to see the real permissions. +=end original + +モードにはファイルタイプとその権限の両方が含まれているので、 +本当の権限を見たい場合は、(s)printf で C<"%"> を使うことで +ファイルタイプをマスクするべきです。 + $mode = (stat($filename))[2]; printf "Permissions are %04o\n", $mode & 07777; +=begin original + In scalar context, C<stat> returns a boolean value indicating success or failure, and, if successful, sets the information associated with the special filehandle C<_>. +=end original + +スカラコンテキストでは、C<stat> は成功か失敗を表す真偽値を返し、 +成功した場合は、特別なファイルハンドル C<_> に結び付けられた +情報をセットします。 + =begin original The File::stat module provides a convenient, by-name access mechanism: @@ -9659,16 +9924,34 @@ values and flag bits are available. You may combine several flags using the C<|>-operator. +=begin original + Some of the most common values are C<O_RDONLY> for opening the file in read-only mode, C<O_WRONLY> for opening the file in write-only mode, and C<O_RDWR> for opening the file in read-write mode, and. +=end original + +もっともよく使われる値は、ファイルを読み込み専用で開く C<O_RDONLY>、 +ファイルを書き込み専用で開く C<O_WRONLY>、 +ファイルを読み書き両用で開く C<O_RDWR> です。 + +=begin original + For historical reasons, some values work on almost every system supported by perl: zero means read-only, one means write-only, and two means read/write. We know that these values do I<not> work under OS/390 & VM/ESA Unix and on the Macintosh; you probably don't want to use them in new code. +=end original + +歴史的な理由により、perl が対応しているほとんどのシステムで +使える値があります。 +0 は読み込み専用、1 は書き込み専用、2 は読み書き両用を意味します。 +OS/390 & VM/ESA Unix と Macintosh では動作 I<しない> ことが分かっています; +新しく書くコードではこれらは使わないほうがよいでしょう。 + If the file named by FILENAME does not exist and the C<open> call creates it (typically because MODE includes the C<O_CREAT> flag), then the value of PERMS specifies the permissions of the newly created file. If you omit @@ -10570,8 +10853,14 @@ unpack("x$where a$howmuch", $what); } +=begin original + and then there's +=end original + +これもそうです。 + sub ordinal { unpack("c",$_[0]); } # same as ord() =begin original @@ -10736,15 +11025,15 @@ =end original -VERSION, which can be specified as a literal of the form v5.6.1, demands -that the current version of Perl (C<$^V> or $PERL_VERSION) be at least -as recent as that version. (For compatibility with older versions of Perl, -a numeric literal will also be interpreted as VERSION.) If the version -of the running Perl interpreter is less than VERSION, then an error -message is printed and Perl exits immediately without attempting to -parse the rest of the file. Compare with L</require>, which can do a -similar check at run time. -(*TBT*) +VERSION (v5.6.1 の形のリテラルとしても指定できます)を指定すると、 +現在の Perl のバージョン (C<$^V> or $PERL_VERSION) が少なくとも +指定されたものよりも最近であることを要求します。 +(古いバージョンの Perl との互換性のために、数値リテラルも +VERSIONとして解釈されます。) +もし動作している Perl インタプリタのバージョンが VERSION より低い場合、 +エラーメッセージが表示され、Perl はファイルの残りをパースせずに +直ちに終了します。 +似たようなチェックを実行時に行える L</require> と比較してください。 use v5.6.1; # compile time version check use 5.6.1; # ditto