Kentaro Shirakata
argra****@users*****
2007年 7月 8日 (日) 23:57:01 JST
Index: docs/perl/5.6.1/perlfunc.pod diff -u docs/perl/5.6.1/perlfunc.pod:1.12 docs/perl/5.6.1/perlfunc.pod:1.13 --- docs/perl/5.6.1/perlfunc.pod:1.12 Sat Jul 7 22:33:26 2007 +++ docs/perl/5.6.1/perlfunc.pod Sun Jul 8 23:57:01 2007 @@ -4353,17 +4353,12 @@ =end original -ビルトインの C<import> 関数はありません。 -これは他のモジュールに名前をエクスポートしたいモジュールによって -定義(または継承)された普通のメソッド(サブルーチン)です。 -C<use> 関数はパッケージを使う時に C<import> メソッドを呼び出します。 -L</use>, L<perlmod>, L<Exporter> も参照してください。 + 組み込みの C<import> 関数というものはありません。 これは単に、別のモジュールに名前をエクスポートしたいモジュールが -定義した(継承した)、通常のメソッド(サブルーチン)です。 -C<use> 関数は、使用されるパッケージのために、C<import> -メソッドを呼び出します。L</use>, L<perlmod>, L<Exporter>を -参照してください。 +定義した(または継承した)、通常のメソッド(サブルーチン)です。 +C<use> 関数はパッケージを使う時に C<import> メソッドを呼び出します。 +L</use>, L<perlmod>, L<Exporter> も参照してください。 =item index STR,SUBSTR,POSITION @@ -5826,12 +5821,23 @@ これに関する更なる例については L<perlipc/"Safe Pipe Opens"> を参照して下さい。 +=begin original + Beginning with v5.6.0, Perl will attempt to flush all files opened for output before any operation that may do a fork, 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. +=end original + +v5.6.0 から、Perl は書き込み用に開いている全てのファイルに対して +fork を行う前にフラッシュしようとしますが、これに対応していない +プラットフォームもあります(L<perlport> を参照してください)。 +安全のために、C<$|> (English モジュールでは $AUTOFLUSH) をセットするか、 +全ての開いているハンドルに対して C<IO::Handle> の C<autoflush()> メソッドを +呼び出すようにしてください。 + =begin original On systems that support a @@ -6052,12 +6058,22 @@ (しかし C<our> 宣言のレキシカルスコープの内側だけです。 これは "use vars" と異なります。こちらはパッケージスコープです。) +=begin original + An C<our> declaration declares a global variable that will be visible across its entire lexical scope, even across package boundaries. The package in which the variable is entered is determined at the point of the declaration, not at the point of use. This means the following behavior holds: +=end original + +C<our> 宣言はレキシカルスコープ全体に対して(たとえパッケージ境界を +越えていても)見えるグローバル変数を宣言します。 +この変数が入るパッケージは宣言した時点で定義され、 +使用した時点ではありません。 +これにより、以下のような振る舞いになります: + package Foo; our $bar; # declares $Foo::bar for rest of lexical scope $bar = 20; @@ -6065,10 +6081,19 @@ package Bar; print $bar; # prints 20 +=begin original + Multiple C<our> declarations in the same lexical scope are allowed if they are in different packages. If they happened to be in the same package, Perl will emit warnings if you have asked for them. +=end original + +同じレキシカルスコープでも、パッケージが異なっていれば、複数の +C<our> 宣言ができます。 +同じパッケージになっていると、警告が出力されるようになっていれば +警告が出力されます。 + use warnings; package Foo; our $bar; # declares $Foo::bar for rest of lexical scope @@ -6205,7 +6230,7 @@ l signed long 値 L unsigned long 値 - (ここでの 'long' は「正確に」32 bits です。これは + (ここでの 'long' は「正確に」32 ビットです。これは ローカルの C コンパイラの 'long' のサイズとは違うかもしれません。 ネイティブな長さの 'long' が必要な場合は、'!' 前置詞を使ってください) @@ -6213,14 +6238,14 @@ N "network" 順序 (ビッグエンディアン) の unsigned long v "VAX" 順序 (リトルエンディアン) の unsigned short V "VAX" 順序 (リトルエンディアン) の unsigned long - (これらの 'short' と 'long' は「正確に」それぞれ 16 bits と - 32 bits です) + (これらの 'short' と 'long' は「正確に」それぞれ 16 ビットと + 32 ビットす) - q 符号付き 64-bit 数 - Q 符号なし 64-bit 数。 - (Quads are available only if your system supports 64-bit - integer values _and_ if Perl has been compiled to support those. - Causes a fatal error otherwise.) + q 符号付き 64 ビット整数 + Q 符号なし 64 ビット整数 + (64 ビット整数は、システムが 64 ビット整数に対応していて、かつ Perl が + 64 ビット整数対応としてコンパイルされている場合にのみ使用可能です。 + それ以外の場合は致命的エラーが発生します。) f 機種依存の単精度浮動小数点数 d 機種依存の倍精度浮動小数点数 @@ -6305,9 +6330,9 @@ =end original C<a>, C<A>, C<Z> という型を使うと、値を一つだけ取り出して使いますが、 -繰り返し数で示す長さの文字列となるように、必要に -応じてヌル文字かスペース文字を付け足します。unpack -するとき、C<A> は後続のスペース文字やヌル文字を取り除きます。 +繰り返し数で示す長さの文字列となるように、必要に応じてヌル文字か +スペース文字を付け足します。 +unpack するとき、C<A> は後続のスペース文字やヌル文字を取り除きます。 C<Z>は最初のヌル文字以降の全てを取り除きます。 C<a>はデータをそのまま返します。 pack するときは、 C<a> と C<Z> は等価です。 @@ -6345,21 +6370,47 @@ 特に、バイト C<"0"> と C<"1"> は バイト C<"\0"> と C<"\1"> と同様に、ビット 0 と 1 を生成します。 +=begin original + Starting from the beginning of the input string of pack(), each 8-tuple of bytes is converted to 1 byte of output. With format C<b> the first byte of the 8-tuple determines the least-significant bit of a byte, and with format C<B> it determines the most-significant bit of a byte. +=end original + +pack() の入力文字列の先頭から始めて、8 タプル毎に 1 バイトの出力に +変換されます。 +C<b> フォーマットでは 8 タプルの最初のバイトが出力の最下位ビットとなり、 +C<B> フォーマットでは出力の最上位ビットとなります。 + +=begin original + If the length of the input string is not exactly divisible by 8, the remainder is packed as if the input string were padded by null bytes at the end. Similarly, during unpack()ing the "extra" bits are ignored. +=end original + +もし入力文字列の長さが 8 で割り切れない場合、余りの部分は入力文字列の +最後にヌルバイトがパッディングされているものとしてパックされます。 +同様に、unpack() 中は「余分な」ビットは無視されます。 + +=begin original + If the input string of pack() is longer than needed, extra bytes are ignored. A C<*> for the repeat count of pack() means to use all the bytes of the input field. On unpack()ing the bits are converted to a string of C<"0">s and C<"1">s. +=end original + +pack() の入力文字列が必要な分よりも長い場合、余分な部分は無視されます。 +pack() の繰り返し数として C<*> が指定されると、入力フィールドの全ての +バイト列がが使われます。 +unpack() 時にはビット列は C<"0"> と C<"1"> の文字列に変換されます。 + =item * =begin original @@ -6372,6 +6423,8 @@ C<h> や C<H> は、多ニブル長(16 進文字である 0-9a-f で表現可能な 4 ビットグループ)のニブル列に pack します。 +=begin original + Each byte of the input field of pack() generates 4 bits of the result. For non-alphabetical bytes the result is based on the 4 least-significant bits of the input byte, i.e., on C<ord($byte)%16>. In particular, @@ -6381,21 +6434,59 @@ C<"A"> both generate the nybble C<0xa==10>. The result for bytes C<"g".."z"> and C<"G".."Z"> is not well-defined. +=end original + +pack() の入力フィールドの各バイトは結果の 4 ビットを生成します。 +英字でないバイトの場合、結果は入力バイトの下位 4 ビットを +基にします(つまり C<ord($byte)%16>)。 +特に、バイト C<"0"> と C<"1"> はバイト C<"\0"> と C<"\1"> と同様に +ニブル 0 と 1 を生成します。 +バイト C<"a".."f"> と C<"A".."F"> の場合は結果は通常の +16 進数と同じ結果になりますので、C<"a"> と C<"A"> はどちらも +ニブル C<0xa==10> を生成します。 +バイト C<"g".."z"> と C<"G".."Z"> に対する結果は未定義です。 + +=begin original + Starting from the beginning of the input string of pack(), each pair of bytes is converted to 1 byte of output. With format C<h> the first byte of the pair determines the least-significant nybble of the output byte, and with format C<H> it determines the most-significant nybble. +=end original + +pack() の入力文字列の先頭から始めて、2 バイト毎に 1 バイトの出力に +変換されます。 +C<h> フォーマットでは 1 バイト目が出力の最下位ニブルとなり、 +C<H> フォーマットでは出力の最上位ニブルとなります。 + +=begin original + If the length of the input string is not even, it behaves as if padded by a null byte at the end. Similarly, during unpack()ing the "extra" nybbles are ignored. +=end original + +入力文字列の長さが偶数でない場合、最後にヌルバイトでパッディングされて +いるかのように振る舞います。 +同様に、unpack() 中は「余分な」ニブルは無視されます。 + +=begin original + If the input string of pack() is longer than needed, extra bytes are ignored. A C<*> for the repeat count of pack() means to use all the bytes of the input field. On unpack()ing the bits are converted to a string of hexadecimal digits. +=end original + +pack() の入力文字列が必要な分より長い場合、余分な部分は無視されます。 +pack() の繰り返し数として C<*> が指定されると、入力フィールドの全ての +バイト列がが使われます。 +unpack() 時にはビット列は 16 進数の文字列に変換されます。 + =item * =begin original @@ -6410,41 +6501,84 @@ =end original C<p>は、ヌル文字終端文字列へのポインタを pack します。 -文字列が一時的な値でない(つまり pack された結果を使う前に文字列が開放されない) ことに -責任を持つ必要があります +文字列が一時的な値でない(つまり pack された結果を使う前に文字列が +解放されない) ことに責任を持つ必要があります C<P> は、指定した長さの構造体へのポインタを pack します。 C<p>またはC<P>に対応する値が C<undef> だった場合、 unpack() と同様にヌルポインタが作成されます。 =item * +=begin original + The C</> template character allows packing and unpacking of strings where the packed structure contains a byte count followed by the string itself. You write I<length-item>C</>I<string-item>. +=end original + +C</> テンプレート文字は、文字列の長さを示すバイト列の後に +文字列そのものが入っている形の文字列を pack 及び unpack します。 +I<length-item>C</>I<string-item> の形になります。 + +=begin original + The I<length-item> can be any C<pack> template letter, and describes how the length value is packed. The ones likely to be of most use are integer-packing ones like C<n> (for Java strings), C<w> (for ASN.1 or SNMP) and C<N> (for Sun XDR). +=end original + +I<length-item> には任意の C<pack> テンプレート文字が利用でき、 +長さの値がどのようにパックされているかを指定します。 +もっともよく使われるのは C<n>(Java 文字列), C<w>(SNMP), C<N>(Sun XDR) と +いった整数型です。 + +=begin original + The I<string-item> must, at present, be C<"A*">, C<"a*"> or C<"Z*">. For C<unpack> the length of the string is obtained from the I<length-item>, but if you put in the '*' it will be ignored. +=end original + +I<string-item> は現在のところ C<"A*">, C<"a*">, C<"Z*"> のいずれかで +なければなりません。 +C<unpack> の場合は文字列の長さは I<length-item> から得られますが、 +'*' を置くと無視されます。 + unpack 'C/a', "\04Gurusamy"; gives 'Guru' unpack 'a3/A* A*', '007 Bond J '; gives (' Bond','J') pack 'n/a* w/a*','hello,','world'; gives "\000\006hello,\005world" +=begin original + The I<length-item> is not returned explicitly from C<unpack>. +=end original + +I<length-item> は C<unpack> から明示的には返されません。 + +=begin original + Adding a count to the I<length-item> letter is unlikely to do anything useful, unless that letter is C<A>, C<a> or C<Z>. Packing with a I<length-item> of C<a> or C<Z> may introduce C<"\000"> characters, which Perl does not regard as legal in numeric strings. +=end original + +I<length-item> 文字に繰り返し数をつけるのは +文字が C<A>, C<a>, C<Z> でない限りは有用ではありません。 +C<a> や C<Z> を I<length-item> としてパックすると C<"\000"> 文字が +出力されることがあり、Perl はこれを有効な数値文字列として認識しません。 + =item * +=begin original + The integer types C<s>, C<S>, C<l>, and C<L> may be immediately followed by a C<!> suffix to signify native shorts or longs--as you can see from above for example a bare C<l> does mean @@ -6452,53 +6586,125 @@ may be larger. This is an issue mainly in 64-bit platforms. You can see whether using C<!> makes any difference by +=end original + +C<s>, C<S>, C<l>, C<L> の整数タイプの直後に接尾辞として C<!> を +つけることで、ネイティブの short や long を指定できます -- +上述のように、例えば C<l> は正確に 32 ビットであり、ネイティブな +(ローカルな C コンパイラによる)C<long> はもっと大きいかもしれません。 +これは主に 64 ビットプラットフォームで意味があります。 +C<!> を使うことによって違いがあるかどうかは以下のようにして調べられます: + print length(pack("s")), " ", length(pack("s!")), "\n"; print length(pack("l")), " ", length(pack("l!")), "\n"; +=begin original + C<i!> and C<I!> also work but only because of completeness; they are identical to C<i> and C<I>. +=end original + +C<i!> と C<I!> も動作しますが、単に完全性のためだけです; +これは C<i> 及び C<I> と同じです。 + +=begin original + The actual sizes (in bytes) of native shorts, ints, longs, and long longs on the platform where Perl was built are also available via L<Config>: +=end original + +Perl がビルドされたプラットフォームでの short, int, long, long long の +実際の(バイト数での)サイズは L<Config> でも得られます。 + use Config; print $Config{shortsize}, "\n"; print $Config{intsize}, "\n"; print $Config{longsize}, "\n"; print $Config{longlongsize}, "\n"; +=begin original + (The C<$Config{longlongsize}> will be undefine if your system does not support long longs.) +=end original + +(システムが long long に対応していない場合は C<$Config{longlongsize}> は +未定義値になります。) + =item * +=begin original + The integer formats C<s>, C<S>, C<i>, C<I>, C<l>, and C<L> are inherently non-portable between processors and operating systems because they obey the native byteorder and endianness. For example a 4-byte integer 0x12345678 (305419896 decimal) be ordered natively (arranged in and handled by the CPU registers) into bytes as +=end original + +整数フォーマット C<s>, C<S>, C<i>, C<I>, C<l>, C<L> は +ネイティブなバイト順序とエンディアンに従っているため、 +本質的にプロセッサ間や OS 間で移植性がありません。 +例えば 4 バイトの整数 0x12345678 (10 進数では 305419896) は +内部では(CPU レジスタによって変換され扱われる形では) +以下のようなバイト列に並べられます: + 0x12 0x34 0x56 0x78 # big-endian 0x78 0x56 0x34 0x12 # little-endian +=begin original + Basically, the Intel and VAX CPUs are little-endian, while everybody else, for example Motorola m68k/88k, PPC, Sparc, HP PA, Power, and Cray are big-endian. Alpha and MIPS can be either: Digital/Compaq used/uses them in little-endian mode; SGI/Cray uses them in big-endian mode. +=end original + +基本的に、Intel と VAX の CPU はリトルエンディアンです。 +一方それ以外、例えば Motorola m68k/88k, PPC, Sparc, HP PA, Power, +Cray などはビッグエンディアンです。 +Alpha と MIPS は両方ともあります: +Digital/Compaq はリトルエンディアンモードで使っています(いました); +SGI/Cray はビッグエンディアンモードで使っています。 + +=begin original + The names `big-endian' and `little-endian' are comic references to the classic "Gulliver's Travels" (via the paper "On Holy Wars and a Plea for Peace" by Danny Cohen, USC/ISI IEN 137, April 1, 1980) and the egg-eating habits of the Lilliputians. +=end original + +「ビッグエンディアン」と「リトルエンディアン」の名前は +古典である「ガリバー旅行記」とリリパット族の卵を食べる習慣から +取られています。 + +=begin original + Some systems may have even weirder byte orders such as +=end original + +以下のような、さらに変わったバイト順序を持つシステムもあるかもしれません: + 0x56 0x78 0x12 0x34 0x34 0x12 0x78 0x56 +=begin original + You can see your system's preference with +=end original + +システムの設定は以下のようにして見ることができます: + print join(" ", map { sprintf "%#02x", $_ } unpack("C*",pack("L",0x12345678))), "\n"; @@ -6552,15 +6758,14 @@ =end original -実数 (float と double) は、 -機種依存のフォーマットしかありません。 -いろんな浮動小数点数のフォーマットが在り、 -標準的な "network" 表現といったものがないため、 -データ交換のための機能は用意してありません。 -つまり、あるマシンで pack した浮動小数点数は、 -別のマシンでは読めないかもしれないということです。 -たとえ双方で IEEE フォーマットの浮動小数点数演算を -行なっていてもです (IEEE の仕様では、メモリ表現上のバイト順序までは、 +実数 (float と double) は、機種依存のフォーマットしかありません。 +いろんな浮動小数点数のフォーマットが在り、標準的な +"network" 表現といったものがないため、データ交換のための機能は +用意してありません。 +つまり、あるマシンで pack した浮動小数点数は、別のマシンでは +読めないかもしれないということです。 +たとえ双方で IEEE フォーマットの浮動小数点数演算を行なっていてもです +(IEEE の仕様では、メモリ表現上のバイト順序までは、 規定されていないからです)。 L<perlport> も参照してください。 @@ -6573,8 +6778,7 @@ =end original -Perl では、すべての数値演算のために、 -内部的に double を使用しています。 +Perl では、すべての数値演算のために、内部的に double を使用しています。 double から float へ変換し、それから再び double に戻すと 精度が落ちることになります (つまり、C<unpack("f", pack("f", $foo)>) は、 一般には $foo と同じではないということです)。 @@ -6617,7 +6821,8 @@ アライメントやパッディングを行うのは全て自分でしなければなりません。 バイト列がどこへ行くか・どこから来たかを pack() や unpack() が 知る方法はありません。 -従って C<pack> (と C<unpack>) は出力と入力をフラットなバイト列として扱います。 +従って C<pack> (と C<unpack>) は出力と入力をフラットなバイト列として +扱います。 =item * @@ -6770,9 +6975,8 @@ パイプでプロセスをループにするときには、よほど気を付けないと、 デッドロックが起こり得ます。 さらに、Perl のパイプでは、stdio のバッファリングを使いますから、 -アプリケーションによっては、 -コマンドごとに WRITEHANDLE をフラッシュするように、 -C<$|> を設定することが必要になるかもしれません。 +アプリケーションによっては、コマンドごとに WRITEHANDLE を +フラッシュするように、C<$|> を設定することが必要になるかもしれません。 =begin original @@ -6793,8 +6997,9 @@ =end original ファイルに対する close-on-exec フラグをサポートしているシステムでは、 -フラグは$^F の値で決定される、新しくオープンされたファイル記述子に対して -セットされます。L<perlvar/$^F>を参照してください。 +フラグは $^F の値で決定される、新しくオープンされたファイル記述子に対して +セットされます。 +L<perlvar/$^F> を参照してください。 =item pop ARRAY @@ -6822,8 +7027,9 @@ =end original 指定された配列に要素がなければ、未定義値が返されます -(しかしこれは他の場合にも起こり得ます)。ARRAY が省略されると、 -C<shift> と同様に、メインプログラムでは C<@ARGV>が、サブルーチンではC<@_>が使われます。 +(しかしこれは他の場合にも起こり得ます)。 +ARRAY が省略されると、C<shift> と同様に、メインプログラムでは C<@ARGV>が、 +サブルーチンでは C<@_> が使われます。 =item pos SCALAR @@ -6976,9 +7182,9 @@ 扱われます。 このビルドインが(C<qw//> のように) I<オーバーライド可能> でない、 またはこの引数が(C<system> のように)プロトタイプとして記述できない場合、 -C<undef> を返します。なぜならビルドインは実際に Perl 関数のように -振舞わないからです。それ以外では、 -等価なプロトタイプを表現した文字列が返されます。 +C<undef> を返します。 +なぜならビルドインは実際に Perl 関数のように振舞わないからです。 +それ以外では、等価なプロトタイプを表現した文字列が返されます。 =item push ARRAY,LIST @@ -7072,7 +7278,8 @@ (EXPRは正の数である必要があります。) EXPR を省略すると、C<1> とみなします。 C<srand> が既に呼ばれている場合以外は、自動的に C<srand> 関数を -呼び出します。C<srand> も参照してください。 +呼び出します。 +C<srand> も参照してください。 =begin original @@ -7192,8 +7399,9 @@ =end original これは C<< <EXPR> >> 演算子を実装している内部関数ですが、 -直接使うこともできます。C<< <EXPR> >> 演算子についての -さらなる詳細については L<perlop/"I/O Operators"> で議論されています。 +直接使うこともできます。 +C<< <EXPR> >> 演算子についてのさらなる詳細については +L<perlop/"I/O Operators"> で議論されています。 $line = <STDIN>; $line = readline(*STDIN); # same thing @@ -7284,7 +7492,8 @@ =end original redo コマンドは、条件を再評価しないで、ループブロックの始めからもう一度 -実行を開始します。C<continue> ブロックがあっても、実行されません。 +実行を開始します。 +C<continue> ブロックがあっても、実行されません。 LABEL が省略されると、このコマンドは、もっとも内側のループを参照します。 このコマンドは通常、自分への入力を欺くために使用します: @@ -7353,8 +7562,8 @@ =end original -EXPR がリファレンスであれば、真を返し、さもなくば、 -偽を返します。EXPR が指定されなければ、C<$_> が使われます。 +EXPR がリファレンスであれば、真を返し、さもなくば、偽を返します。 +EXPR が指定されなければ、C<$_> が使われます。 返される値は、リファレンスが参照するものの型に依存します。 組み込みの型には、以下のものがあります。 @@ -7405,8 +7614,8 @@ =end original -ファイルの名前を変更します。NEWNAME というファイルが -既に存在した場合、上書きされるかもしれません。 +ファイルの名前を変更します。 +NEWNAME というファイルが既に存在した場合、上書きされるかもしれません。 成功時には真、失敗時には偽を返します。 =begin original @@ -7478,8 +7687,8 @@ それ以外の場合には、既に読み込まれていないときに、 読み込むライブラリファイルを要求するものとなります。 そのファイルは、基本的には C<eval> の一種である、 -do-FILE によって読み込まれます。 意味的には、 -次のようなサブルーチンと同じようなものです: +do-FILE によって読み込まれます。 +意味的には、次のようなサブルーチンと同じようなものです: sub require { my($filename) = @_; @@ -7585,7 +7794,7 @@ =end original より強力な import 機能については、このドキュメントの -L</use> の項と、L<perlmod> をご覧ください。 +L</use> の項と、L<perlmod> を参照してください。 =item reset EXPR @@ -7613,7 +7822,8 @@ EXPR を省略すると、1 回検索 (C<?PATTERN?>) を再びマッチするように リセットできます。 カレントパッケージの変数もしくは検索だけがリセットされます。 -常に 1 を返します。例: +常に 1 を返します。 +例: reset 'X'; # reset all X variables reset 'a-z'; # reset lower case variables @@ -7629,12 +7839,13 @@ =end original -reset C<"A-Z"> とすると、C<@ARGV>, C<@INC>配列やC<%ENV>ハッシュも +reset C<"A-Z"> とすると、C<@ARGV>, C<@INC> 配列や C<%ENV> ハッシュも なくなってしまいますから、止めた方が良いでしょう。 パッケージ変数だけがリセットされます。 レキシカル変数は、影響を受けませんが、スコープから外れれば、 自動的に綺麗になりますので、これからは、こちらを使うようにした方が -よいでしょう。 このドキュメントの L</my> の項を参照してください。 +よいでしょう。 +L</my> を参照してください。 =item return EXPR @@ -7654,12 +7865,11 @@ サブルーチン, C<eval>, C<do FILE> から EXPR で与えられた値をもって、 リターンします。 EXPR の評価は、返り値がどのように使われるかによって -リスト、スカラ、void コンテキストになります。 +リスト、スカラ、無効コンテキストになります。 またコンテキストは実行毎に変わります(C<wantarray> を参照してください)。 -EXPR が指定されなかった場合は、 -リストコンテキストでは空リストを、 +EXPR が指定されなかった場合は、リストコンテキストでは空リストを、 スカラコンテキストでは未定義値を返します。 -そして(もちろん)void コンテキストでは何も返しません。 +そして(もちろん)無効コンテキストでは何も返しません。 =begin original @@ -7736,8 +7946,8 @@ =end original STR 中で最後に見つかった SUBSTR の位置を返すことを除いて、 -index() と同じように動作します。 POSITION を指定すると、 -その位置より前の、最後の位置を返します。 +index() と同じように動作します。 +POSITION を指定すると、その位置より前の、最後の位置を返します。 =item rmdir FILENAME @@ -7764,7 +7974,8 @@ =end original -置換演算子。L<perlop> を参照してください。 +置換演算子。 +L<perlop> を参照してください。 =item scalar EXPR @@ -7791,8 +8002,9 @@ =end original 式を強制的にリストコンテキストで解釈させるようにする演算子はありません。 -理論的には不要だからです。それでも、もしそうしたいのなら、 -C<@{[ (some expression) ]}> という構造を使えます。 +理論的には不要だからです。 +それでも、もしそうしたいのなら、C<@{[ (some expression) ]}> という構造を +使えます。 しかし、普通は単に C<(some expression)> とすれば十分です。 =begin original @@ -7805,7 +8017,7 @@ =end original C<scalar> は単項演算子なので、EXPR として括弧でくくったリストを使った場合、 -これはスカラカンマ表現として振舞い、最後以外の全ては void コンテキストとして +これはスカラカンマ表現として振舞い、最後以外の全ては無効コンテキストとして 扱われ、最後の要素をスカラコンテキストとして扱った結果が返されます。 これがあなたの望むものであることはめったにないでしょう。 @@ -7875,7 +8087,8 @@ C<sysread> や C<syswrite> のためにファイルの位置を指定したい場合は、 C<seek> は使えません -- バッファリングのために動作は予測不能で -移植性のないものになってしまいます。代わりに C<sysseek> を使ってください。 +移植性のないものになってしまいます。 +代わりに C<sysseek> を使ってください。 =begin original @@ -7886,19 +8099,31 @@ =end original -Due to the rules and rigors of ANSI C, on some systems you have to do a -seek whenever you switch between reading and writing. Amongst other -things, this may have the effect of calling stdio's clearerr(3). -A WHENCE of C<1> (C<SEEK_CUR>) is useful for not moving the file position:(*TBT*) +ANSI C の規則と困難により、システムによっては読み込みと書き込みを +切り替える度にシークしなければならない場合があります。 +その他のことの中で、これは stdio の clearerr(3) を呼び出す効果があります。 +WHENCE の C<1> (C<SEEK_CUR>) が、ファイル位置を変えないので有用です: seek(TEST,0,1); +=begin original + This is also useful for applications emulating C<tail -f>. Once you hit EOF on your read, and then sleep for a while, you might have to stick in a seek() to reset things. The C<seek> doesn't change the current position, 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. +=end original + +これはアプリケーションで C<tail -f> をエミュレートするのにも有用です。 +一度読み込み時に EOF に到達すると、しばらくスリープし、 +seek() することでリセットする必要があります。 +C<seek> は現在の位置を変更しませんが、ハンドルの EOF 状態を +I<クリアします> ので、次の C<< <FILE> >> で Perl は再び何かを +読み込もうとします。 +そのはずです。 + =begin original If that doesn't work (some stdios are particularly cantankerous), then @@ -7906,7 +8131,7 @@ =end original -これが動かない場合(とくに維持の悪い stdio はいます。)、 +これが動かない場合(特に意地の悪い stdio もあります)、 以下のようなことをする必要があります: for (;;) { @@ -7975,8 +8200,7 @@ =end original -FILEHANDLE は、実際のファイルハンドルの名前を示す、 -式でもかまいません。 +FILEHANDLE は、実際のファイルハンドルの名前を示す式でもかまいません。 つまり、以下のようなものです: $oldfh = select(STDERR); $| = 1; select($oldfh); @@ -8076,8 +8300,7 @@ どのビットマスクにも undef を設定することができます。 TIMEOUT を指定するときは、秒数で指定し、小数でかまいません。 -注: すべての実装で、$timeleft が -返せるものではありません。 +注: すべての実装で、$timeleft が返せるものではありません。 その場合、$timeleft には、常に指定した TIMEOUT と同じ値が返されます。 =begin original @@ -8129,9 +8352,8 @@ と宣言する必要があるでしょう。 CMD が、IPC_STAT か GETALL のときには、ARG は、返される semid_ds 構造体か、セマフォ値の配列を納める変数でなければなりません。 -C<ioctl> と同じように、エラー時には -未定義値、ゼロのときは C<"0 but true">、それ以外なら、 -その値そのものを返します。 +C<ioctl> と同じように、エラー時には未定義値、 +ゼロのときは C<"0 だが真">、それ以外なら、その値そのものを返します。 ARG はネイティブな short int のベクターから成っていなければなりません。 これは C<pack("s!",(0)x$nsem)> で作成できます。 L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::Semaphore> も参照してください。 @@ -8149,7 +8371,8 @@ System V IPC 関数 semget を呼び出します。 セマフォ ID か、エラー時には未定義値を返します。 -L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::SysV::Semaphore> も参照してください。 +L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::SysV::Semaphore> も +参照してください。 =item semop KEY,OPSTRING @@ -8165,12 +8388,11 @@ =end original -シグナルを送信や、待ち合わせなどのセマフォ操作を行な -うために、System V IPC 関数 semop を呼び出します。 +シグナルを送信や、待ち合わせなどのセマフォ操作を行なうために、 +System V IPC 関数 semop を呼び出します。 OPSTRING は、semop 構造体の pack された配列でなければなりません。 semop 構造体は、それぞれ、 -C<pack("sss", $semnum, $semop, $semflag)> のように作る -ことができます。 +C<pack("sss", $semnum, $semop, $semflag)> のように作ることができます。 セマフォ操作の数は、OPSTRING の長さからわかります。 成功時には真を、エラー時には偽を返します。 以下の例は、セマフォ ID $semid のセマフォ $semnum で @@ -8187,8 +8409,9 @@ =end original -セマフォにシグナルを送るには、C<-1>を C<1> に変更してください。 -L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::SysV::Semaphore> も参照してください。 +セマフォにシグナルを送るには、C<-1> を C<1> に変更してください。 +L<perlipc/"SysV IPC">, C<IPC::SysV>, C<IPC::SysV::Semaphore> も +参照してください。 =item send SOCKET,MSG,FLAGS,TO @@ -8324,7 +8547,7 @@ と宣言する必要があるでしょう。 CMD が、C<IPC_STAT> ならば、ARG は、返される C<shmid_ds> 構造体を 納める変数でなければなりません。 -ioctl と同じように、エラー時には未定義値、ゼロのときは "C<0> but true"、 +ioctl と同じように、エラー時には未定義値、ゼロのときは "C<0> だが真"、 それ以外なら、その値そのものを返します。 L<perlipc/"SysV IPC"> と C<IPC::SysV> も参照してください。 @@ -8360,8 +8583,8 @@ =end original System V 共有メモリセグメント ID に対し、アタッチして、 -コピーを行ない、デタッチするという形で、位置 POS -から、サイズ SIZE だけ、読み込みか書き込みを行ないます。 +コピーを行ない、デタッチするという形で、位置 POS から、 +サイズ SIZE だけ、読み込みか書き込みを行ないます。 読み込み時には、VAR は読み込んだデータを納める 変数でなければなりません。 書き込み時には、STRING が長すぎても、SIZE バイトだけが使われます。 @@ -8468,11 +8691,21 @@ 正しくスケジューリングされないがために より長い時間スリープすることがあります。 +=begin original + For delays of finer granularity than one second, you may use Perl's C<syscall> interface to access setitimer(2) if your system supports it, or else see L</select> above. The Time::HiRes module from CPAN may also help. +=end original + +1 秒より精度の高いスリープを行なうには、 +setitimer(2) をサポートしているシステムでは、Perl の +C<syscall> インタフェースを使ってアクセスするか、 +さもなければ上述の L</select> を参照してください。 +CPAN の Time::HiRes モジュールも有用でしょう。 + =begin original See also the POSIX module's C<pause> function. @@ -8497,10 +8730,10 @@ SOCKET にアタッチします。 DOMAIN、TYPE、PROTOCOL は、 同名のシステムコールと同じように指定します。 -適切な定義を import するために、まず、C<use Socket> とする -とよいでしょう。 -例については L<perlipc/"Sockets: Client/Server Communication"> -を参照してください。 +適切な定義を import するために、まず、C<use Socket> と +するとよいでしょう。 +例については L<perlipc/"Sockets: Client/Server Communication"> を +参照してください。 =begin original @@ -8512,7 +8745,8 @@ ファイルに対する close-on-exec フラグをサポートしているシステムでは、 フラグは$^F の値で決定される、新しくオープンされたファイル記述子に対して -セットされます。L<perlvar/$^F>を参照してください。 +セットされます。 +L<perlvar/$^F>を参照してください。 =item socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL @@ -8526,8 +8760,7 @@ =end original 指定した DOMAIN に、指定した TYPE で名前の無いソケットのペアを生成します。 -DOMAIN、TYPE、PROTOCOL は、 -同名のシステムコールと同じように指定します。 +DOMAIN、TYPE、PROTOCOL は、同名のシステムコールと同じように指定します。 実装されていない場合には、致命的エラーとなります。 成功時には真を返します。 @@ -8541,11 +8774,19 @@ ファイルに対する close-on-exec フラグをサポートしているシステムでは、 フラグは$^F の値で決定される、新しくオープンされたファイル記述子に対して -セットされます。L<perlvar/$^F>を参照してください。 +セットされます。 +L<perlvar/$^F> を参照してください。 + +=begin original Some systems defined C<pipe> in terms of C<socketpair>, in which a call to C<pipe(Rdr, Wtr)> is essentially: +=end original + +C<pipe> を C<socketpair> を使って定義しているシステムもあります; +C<pipe(Rdr, Wtr)> は本質的には以下のようになります: + use Socket; socketpair(Rdr, Wtr, AF_UNIX, SOCK_STREAM, PF_UNSPEC); shutdown(Rdr, 1); # no more writing for reader @@ -8645,8 +8886,14 @@ C<use locale> が有効の場合、C<sort LIST> は LIST を現在の比較ロケールに 従ってソートします。L<perllocale> を参照して下さい。 +=begin original + Examples: +=end original + +例: + # sort lexically @articles = sort @files; @@ -8735,7 +8982,8 @@ =end original use strict している場合、$a と $b をレキシカルとして -宣言してはI<いけません>。これはパッケージグローバルです。 +宣言しては I<いけません>。 +これはパッケージグローバルです。 つまり、C<main> パッケージで以下のように書いた場合: @articles = sort {$b <=> $a} @files; @@ -8762,8 +9010,8 @@ =end original 比較関数は一貫した振る舞いをすることが求められます。 -一貫しない結果を返す(例えば、あるときは C<$x[1]> が C<$x[2]> より小さいと返し、 -またあるときは逆を返す)場合、結果は未定義です。 +一貫しない結果を返す(例えば、あるときは C<$x[1]> が C<$x[2]> より +小さいと返し、またあるときは逆を返す)場合、結果は未定義です。 =item splice ARRAY,OFFSET,LENGTH,LIST @@ -8870,8 +9118,8 @@ EXPR を省略すると、文字列 C<$_> を split します。 もし、PATTERN も省略すると、 (先頭の空白文字をスキップした後) 空白で split します。 -PATTERN にマッチするものは、フィールドを分割する -デリミタとして扱われます。(デリミタは、1 文字とは限りません。) +PATTERN にマッチするものは、フィールドを分割するデリミタとして扱われます。 +(デリミタは、1 文字とは限りません。) =begin original @@ -8883,9 +9131,8 @@ =end original -正の数の LIMIT を指定した場合には、 -最大その数までのフィールドに split します (しかし、 -それより少ないことはあります)。 +正の数の LIMIT を指定した場合には、最大その数までのフィールドに +split します (しかし、それより少ないことはあります)。 LIMIT を指定しないかゼロなら、末尾の空フィールドを捨ててしまいます (C<pop> を行なうときには気を付けないといけません)。 LIMIT が負ならば、LIMIT に任意の大きな数を指定したのと同じことになります。 @@ -8905,7 +9152,8 @@ 空文字列にマッチするパターン (ヌルパターン C<//> と混同しないでください。 これは、空文字列にマッチするパターンの一つでしかありません) は、 -どの場所にもマッチし、EXPR の値を1 文字ずつに分割します。たとえば、 +どの場所にもマッチし、EXPR の値を1 文字ずつに分割します。 +たとえば、 print join(':', split(/ */, 'hi there')); @@ -8920,8 +9168,10 @@ =end original -先頭と末尾の空フィールドは、文字列の先頭または末尾で 0 でない幅でマッチした -場合は生成されます。幅 0 でマッチした場合は生成されません。例えば: +先頭と末尾の空フィールドは、文字列の先頭または末尾で 0 でない幅で +マッチした場合は生成されます。 +幅 0 でマッチした場合は生成されません。 +例えば: print join(':', split(/(?=\w)/, 'hi there!')); @@ -9020,8 +9270,7 @@ 特別な場合として、PATTERN にスペース (C<' '>) を指定すると、 引数なしの C<split> のように空白で split を行ないます。 -つまり、 -C<split(' ')> は、B<awk> のデフォルトの動作をエミュレートするために +つまり、C<split(' ')> は B<awk> のデフォルトの動作をエミュレートするために 使うことができ、C<split(/ /)> は行頭のスペースの数に応じた空フィールドが できます。 C<split /\s+/> は C<split(' ')> と同様ですが、 @@ -9108,8 +9357,14 @@ 配列の要素数をフォーマットとして扱います。 これはほとんど役に立ちません。 +=begin original + Perl's C<sprintf> permits the following universally-known conversions: +=end original + +Perl の C<sprintf> は以下の一般に知られている変換に対応しています: + %% a percent sign %c a character with the given number %s a string @@ -9121,8 +9376,14 @@ %f a floating-point number, in fixed decimal notation %g a floating-point number, in %e or %f notation +=begin original + In addition, Perl permits the following widely-supported conversions: +=end original + +さらに、Perl では以下のよく使われている変換に対応しています: + %X like %x, but using upper-case letters %E like %e, but using an upper-case "E" %G like %g, but with an upper-case "E" (if applicable) @@ -9131,24 +9392,50 @@ %n special: *stores* the number of characters output so far into the next variable in the parameter list +=begin original + Finally, for backward (and we do mean "backward") compatibility, Perl permits these unnecessary but widely-supported conversions: +=end original + +最後に、過去との互換性(これは「過去」だと考えています)のために、 +Perl は以下の不要ではあるけれども広く使われている変換に対応しています。 + %i a synonym for %d %D a synonym for %ld %U a synonym for %lu %O a synonym for %lo %F a synonym for %f +=begin original + Note that the number of exponent digits in the scientific notation by C<%e>, C<%E>, C<%g> and C<%G> for numbers with the modulus of the exponent less than 100 is system-dependent: it may be three or less (zero-padded as necessary). In other words, 1.23 times ten to the 99th may be either "1.23e99" or "1.23e099". +=end original + + +C<%e>, C<%E>, C<%g>, C<%G> において、指数部が 100 未満の場合の +指数部の科学的な表記法はシステム依存であることに注意してください: +3 桁かもしれませんし、それ以下かもしれません(必要に応じて 0 で +パッディングされます)。 +言い換えると、 1.23 掛ける 10 の 99 乗は "1.23e99" かもしれませんし +"1.23e099" かもしれません。 + +=begin original + Perl permits the following universally-known flags between the C<%> and the conversion letter: +=end original + +Perl は C<%> と変換文字の間のフラグとして以下の一般に知られている +ものに対応しています: + space prefix positive number with a space + prefix positive number with a plus sign - left-justify within the field @@ -9162,62 +9449,139 @@ h interpret integer as C type "short" or "unsigned short" If no flags, interpret integer as C type "int" or "unsigned" +=begin original + There are also two Perl-specific flags: +=end original + +さらに Perl 独自の 2 つのフラグがあります: + V interpret integer as Perl's standard integer type v interpret string as a vector of integers, output as numbers separated either by dots, or by an arbitrary string received from the argument list when the flag is preceded by C<*> +=begin original + Where a number would appear in the flags, an asterisk (C<*>) may be used instead, in which case Perl uses the next item in the parameter list as the given number (that is, as the field width or precision). If a field width obtained through C<*> is negative, it has the same effect as the C<-> flag: left-justification. +=end original + +フラグとして数値を使えるところでは、代わりにアスタリスク (C<*>) を +使うことができます: その場合、Perl はパラメータリストの次の要素を +与えられた数値(フィールド幅か精度)として使います。 +C<*> を通して得られたフィールドの値が負数の場合、C<-> フラグと +同様の効果 (左詰め) があります。 + +=begin original + The C<v> flag is useful for displaying ordinal values of characters in arbitrary strings: +=end original + +C<v> フラグは任意の文字列の文字を順序付きの値として表示するのに +便利です: + printf "version is v%vd\n", $^V; # Perl's version printf "address is %*vX\n", ":", $addr; # IPv6 address printf "bits are %*vb\n", " ", $bits; # random bitstring +=begin original + If C<use locale> is in effect, the character used for the decimal point in formatted real numbers is affected by the LC_NUMERIC locale. See L<perllocale>. +=end original + +C<use locale> が有効の場合、フォーマットされた実数の小数点として +使われる文字は LC_NUMERIC ロケールの影響を受けます。 +L<perllocale> を参照してください。 + +=begin original + If Perl understands "quads" (64-bit integers) (this requires either that the platform natively support quads or that Perl be specifically compiled to support quads), the characters +=end original + +Perl が 64 ビット整数を理解する場合(これにはプラットフォームが内部で +64 ビット整数に対応しているか、Perl が特別に 64ビット整数に対応するように +コンパイルされている必要があります)、以下の文字には: + d u o x X b i D U O +=begin original + print quads, and they may optionally be preceded by +=end original + +64 ビット整数を表示し、また以下のフラグを前につけることができます: + ll L q +=begin original + For example +=end original + +例えば以下のようにします: + %lld %16LX %qo +=begin original + You can find out whether your Perl supports quads via L<Config>: +=end original + +Perl が 64 ビット整数に対応しているかどうかは L<Config> を使って +調べられます: + use Config; ($Config{use64bitint} eq 'define' || $Config{longsize} == 8) && print "quads\n"; +=begin original + If Perl understands "long doubles" (this requires that the platform support long doubles), the flags +=end original + +Perl が "long double" を理解する場合(これにはプラットフォームが +long double に対応している必要があります)、以下の文字には: + e f g E F G +=begin original + may optionally be preceded by +=end original + +以下のフラグを前につけることができます: + ll L +=begin original + For example +=end original + +例えば以下のようにします: + %llf %Lg =begin original @@ -9269,7 +9633,7 @@ =end original rand 演算子のためのシード値を設定します。 -EXPR を省略すると、カーネルで提供されるもと +EXPR を省略すると、カーネルで提供されるもの (F</dev/urandom> デバイスに対応している場合)または 現在時刻やプロセス ID やその他のものを基礎にした 擬似乱数を使います。 @@ -9309,7 +9673,7 @@ OS のステータス値プログラムの出力をひとつ または複数用い、圧縮してチェックサムをとる、 というようなことが普通、行なわれます。 -例: +例えば: srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`); @@ -9387,7 +9751,8 @@ FILEHANDLE を通じてオープンされているファイルか、 EXPR で指定されるファイルの情報を与える、13 要素のリストを返します。 EXPR が省略されると、 C<$_> が用いられます。 -stat に失敗した場合には、空リストを返します。普通は、以下のようにして使います: +stat に失敗した場合には、空リストを返します。 +普通は、以下のようにして使います: ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) @@ -9401,7 +9766,7 @@ =end original 全てのファイルシステムで全てのフィールドに対応しているわけではありません。 -フィールドの意味は以下のとおりです。 +フィールドの意味は以下の通りです。 =begin original @@ -9636,8 +10001,8 @@ すべての文字のリンクされたリストが作られ、たとえば、 すべての C<'k'> がどこにあるかがわかるようになります。 各々の検索文字列から、C プログラムや英語のテキストから作られた -頻度の統計情報に基づいて、もっともめずらしい文字が選ばれます。 -この「めずらしい」文字を含む場所だけが調べられるのです。) +頻度の統計情報に基づいて、もっとも珍しい文字が選ばれます。 +この「珍しい」文字を含む場所だけが調べられるのです。) =begin original @@ -9646,7 +10011,7 @@ =end original -たとえば、特定のパターンを含む行の前にインデクスを +たとえば、特定のパターンを含む行の前にインデックスを 付けるエントリを入れる例を示します。 while (<>) { @@ -9668,8 +10033,8 @@ =end original -C<f> は C<o> よりもめずらしいので、C</\bfoo\b/> を探すと -き、C<$_> で C<f> を含む場所だけが探されます。 +C<f> は C<o> よりも珍しいので、C</\bfoo\b/> を探すとき、C<$_> で C<f> を +含む場所だけが探されます。 一般に、病的な場合を除いて、かなりの結果が得られます。 唯一の問題は、節約できる時間が、最初にリンクリストを作る 時間よりも多いかどうかです、 @@ -9693,9 +10058,8 @@ ファイル全体を一つのレコードとして入力するために、 C<$/> を未定義にすれば、かなり速くなり、 多くの場合 fgrep(1) のような専用のプログラムより速くなります。 -以下の例は、ファイルのリスト (C<@files>) から -単語のリスト (C<@words>) を探して、マッチするものが -あったファイル名を出力します。 +以下の例は、ファイルのリスト (C<@files>) から単語のリスト (C<@words>) を +探して、マッチするものがあったファイル名を出力します。 $search = 'while (<>) { study;'; foreach $word (@words) { @@ -9726,10 +10090,10 @@ =end original -これはサブルーチン定義であり、I<本質的には>実際の関数ではありません。 +これはサブルーチン定義であり、I<本質的には> 実際の関数ではありません。 NAME (とプロトタイプや属性) のみの場合は、単なる前方定義です。 -NAME なしの場合は、無名関数定義であり、実際には値を返します。 -作成したブロックのコードリファレンスです。 +NAME なしの場合は、無名関数定義であり、実際には値(作成したブロックの +コードリファレンス)を返します。 詳しくは L<perlsub> と L<perlref> を参照して下さい。 =item substr EXPR,OFFSET,LENGTH,REPLACEMENT @@ -9749,8 +10113,8 @@ =end original -EXPR から、部分文字列を取り出して返します。 最初の -文字がオフセット C<0> もしくは、C<$[> に設定した値 +EXPR から、部分文字列を取り出して返します。 +最初の文字がオフセット C<0> もしくは、C<$[> に設定した値 (しかしこれを使ってはいけません)となります。 OFFSET に負の値(より厳密には、C<$[>より小さい値)を設定すると、 EXPR の終わりからのオフセットとなります。 @@ -9775,6 +10139,8 @@ EXPR の長さを一定に保つためには、C<sprintf> を使って、 代入する値の長さを調整することが、必要になるかもしれません。 +=begin original + If OFFSET and LENGTH specify a substring that is partly outside the string, only the part within the string is returned. If the substring is beyond either end of the string, substr() returns the undefined @@ -9782,17 +10148,36 @@ substring that is entirely outside the string is a fatal error. Here's an example showing the behavior for boundary cases: +=end original + +OFFSET と LENGTH として文字列の外側を含むような部分文字列が指定されると、 +文字列の内側の部分だけが返されます。 +部分文字列が文字列の両端の外側の場合、substr() は未定義値を返し、 +警告が出力されます。 +左辺値として使った場合、文字列の完全に外側を部分文字列として指定すると +致命的エラーになります。 +以下は境界条件の振る舞いを示す例です: + my $name = 'fred'; substr($name, 4) = 'dy'; # $name is now 'freddy' my $null = substr $name, 6, 2; # returns '' (no warning) my $oops = substr $name, 7; # returns undef, with warning substr($name, 7) = 'gap'; # fatal error +=begin original + An alternative to using substr() as an lvalue is to specify the replacement string as the 4th argument. This allows you to replace parts of the EXPR and return what was there before in one operation, just as you can with splice(). +=end original + +substr() を左辺値として使う代わりの方法は、置き換える文字列を 4 番目の +引数として指定することです。 +これにより、EXPR の一部を置き換え、置き換える前が何であったかを返す、 +ということを(splice() と同様) 1 動作で行えます。 + =item symlink OLDFILE,NEWFILE =begin original @@ -9832,24 +10217,21 @@ =end original -LIST の最初の要素で指定するシステムコールを、残りの -要素をそのシステムコールの引数として呼び出します。 +LIST の最初の要素で指定するシステムコールを、残りの要素をその +システムコールの引数として呼び出します。 実装されていないときには、致命的エラーとなります。 -引数は、以下のように解釈されます: 引数が数字であれば、 -int として引数を渡します。 +引数は、以下のように解釈されます: 引数が数字であれば、int として +引数を渡します。 そうでなければ、文字列値へのポインタが渡されます。 -文字列に結果を受け取るときには、 -その結果を受け取るのに十分なくらいに、 +文字列に結果を受け取るときには、その結果を受け取るのに十分なくらいに、 文字列を予め伸ばしておく必要があります。 -文字列リテラル(あるいはその他の読み込み専用の文字列)を -C<syscall>の引数として使うことはできません。 -Perl は全ての文字列ポインタは書き込まれると -仮定しなければならないからです。 -整数引数が、リテラルでなく、 -数値コンテキストで評価されたことのないものであれば、 -数値として解釈されるように、 +文字列リテラル(あるいはその他の読み込み専用の文字列)を C<syscall> の +引数として使うことはできません。 +Perl は全ての文字列ポインタは書き込まれると仮定しなければならないからです。 +整数引数が、リテラルでなく、数値コンテキストで評価されたことの +ないものであれば、数値として解釈されるように、 C<0> を足しておく必要があるかもしれません。 -以下は C<syswrite>関数(あるいはその逆)をエミュレートします。 +以下は C<syswrite> 関数(あるいはその逆)をエミュレートします。 require 'syscall.ph'; # may need to run h2ph $s = "hi there\n"; @@ -9918,12 +10300,22 @@ この関数呼び出しはシステムの C<open> 関数を FILENAME, MODE, PERMS の 引数で呼び出すことを基礎としています。 +=begin original + The possible values and flag bits of the MODE parameter are system-dependent; they are available via the standard module C<Fcntl>. See the documentation of your operating system's C<open> to see which values and flag bits are available. You may combine several flags using the C<|>-operator. +=end original + +MODE パラメータに指定できるフラグビットと値はシステム依存です; +これは標準モジュール C<Fcntl> 経由で利用可能です。 +どのようなフラグビットと値が利用可能であるかについては、 +OS の C<open> に関する文書を参照してください。 +C<|> 演算子を使って複数のフラグを結合することができます。 + =begin original Some of the most common values are C<O_RDONLY> for opening the file in @@ -9952,6 +10344,8 @@ OS/390 & VM/ESA Unix と Macintosh では動作 I<しない> ことが分かっています; 新しく書くコードではこれらは使わないほうがよいでしょう。 +=begin original + 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 @@ -9959,18 +10353,53 @@ These permission values need to be in octal, and are modified by your process's current C<umask>. +=end original + +FILENAME という名前のファイルが存在せず、(典型的には MODE が +C<O_CREAT> フラグを含んでいたために) C<open> 呼び出しがそれを作った場合、 +PERMS の値は新しく作られたファイルの権限を指定します。 +C<sysopen> の PERMS 引数を省略した場合、Perl は 8 進数 C<0666> を使います。 +これらの権限は 8 進数である必要があり、プロセスの現在の C<umask> で +修正されます。 + +=begin original + In many systems the C<O_EXCL> flag is available for opening files in exclusive mode. This is B<not> locking: exclusiveness means here that if the file already exists, sysopen() fails. The C<O_EXCL> wins C<O_TRUNC>. +=end original + +多くのシステムではファイルを排他モードで開くために C<O_EXCL> が +利用可能です。 +これはロック B<ではありません>: 排他性というのは既にファイルが +存在していた場合、sysopen() が失敗することを意味します。 +C<O_EXCL> は C<O_TRUNC> より優先します。 + +=begin original + Sometimes you may want to truncate an already-existing file: C<O_TRUNC>. +=end original + +既に存在しているファイルを切り詰めたい場合もあるかもしれません: C<O_TRUNC> + +=begin original + You should seldom if ever use C<0644> as argument to C<sysopen>, because that takes away the user's option to have a more permissive umask. Better to omit it. See the perlfunc(1) entry on C<umask> for more on this. +=end original + +めったなことでは C<sysopen> の引数に C<0644> を指定するべきではないでしょう: +ユーザーがより寛大な umask を指定する選択肢を奪うからです。 +省略した方がいいです。 +これに関するさらなる情報については perlfunc(1) の C<umask> を +参照してください。 + =begin original Note that C<sysopen> depends on the fdopen() C library function. @@ -10313,7 +10742,8 @@ =end original -C<systell> 関数はありません。代わりに C<sysseek(FH, 0, 1)> を使ってください。 +C<systell> 関数はありません。 +代わりに C<sysseek(FH, 0, 1)> を使ってください。 =item telldir DIRHANDLE @@ -10480,7 +10910,7 @@ =end original C<dbmopen> と違い、C<tie> 関数はモジュールを use したり -require したりしません。自分で明示的に行う必要があります。 +require したりしません -- 自分で明示的に行う必要があります。 C<tie> の興味深い実装については L<DB_File> や F<Config> モジュールを 参照して下さい。 @@ -10520,8 +10950,9 @@ =end original システムが紀元と考える時点 (MacOS では 1904 年 1 月 1 日 00:00:00、 -その他のほとんどのシステムでは UTC 1970 年 1 月 1 日 00:00:00) からの連続秒数を -返します。C<gmtime> や C<localtime> への入力形式にあっています。 +その他のほとんどのシステムでは UTC 1970 年 1 月 1 日 00:00:00) からの +連続秒数を返します。 +C<gmtime> や C<localtime> への入力形式にあっています。 =begin original @@ -10535,7 +10966,8 @@ 1 秒よりも細かい時間を計測するためには、 CPAN の Time::HiRes モジュールを使うか、 gettimeofday(2) があるなら、Perl の C<syscall> インターフェースを -使った方がよいでしょう。詳しくは L<perlfaq8> を参照して下さい。 +使った方がよいでしょう。 +詳しくは L<perlfaq8> を参照して下さい。 =item times @@ -10546,9 +10978,8 @@ =end original -現プロセスと、そのチャイルドプロセスに対する、 -ユーザ時間とシステム時間を秒で示した、4 要素のリスト値を -返します。 +現プロセス及びその子プロセスに対する、ユーザ時間とシステム時間を +秒で示した、4 要素のリスト値を返します。 ($user,$system,$cuser,$csystem) = times; @@ -10560,7 +10991,8 @@ =end original -変換演算子。C<y///>と同じです。 L<perlop> を参照してください。 +変換演算子。C<y///>と同じです。 +L<perlop> を参照してください。 =item truncate FILEHANDLE,LENGTH @@ -10688,16 +11120,14 @@ =end original -Here's some advice: supply a creation mode of C<0666> for regular -files (in C<sysopen>) and one of C<0777> for directories (in -C<mkdir>) and executable files. This gives users the freedom of -choice: if they want protected files, they might choose process umasks -of C<022>, C<027>, or even the particularly antisocial mask of C<077>. -Programs should rarely if ever make policy decisions better left to -the user. The exception to this is when writing files that should be -kept private: mail files, web browser cookies, I<.rhosts> files, and -so on. -(*TBT*) +以下は助言です: 作成モードとして、(C<sysopen> による)通常ファイルでは +C<0666> を、(C<mkdir> による)ディレクトリでは C<0777> を指定しましょう。 +これにより、ユーザーに選択の自由を与えます: もしファイルを守りたいなら、 +プロセスの umask として C<022>, C<027>, あるいは特に非社交的な +C<077> を選択できます。 +プログラムがユーザーより適切なポリシー選択ができることは稀です。 +例外は、プライベートに保つべきファイル(メール、ウェブブラウザのクッキー、 +I<.rhosts> ファイルなど)を書く場合です。 =begin original @@ -11003,10 +11433,11 @@ =end original -指定したモジュールから、現在のパッケージにさまざまな -内容をインポートします。 多くは、パッケージのサブルーチン名や、 -変数名に別名を付けることで、実現されています。これは、 -Module がI<単なる単語でなければならない>ことを除けば、 +指定したモジュールから、現在のパッケージにさまざまな内容を +インポートします。 +多くは、パッケージのサブルーチン名や、変数名に別名を付けることで、 +実現されています。これは、 +Module が I<単なる単語でなければならない> ことを除けば、 BEGIN { require Module; import Module LIST; } @@ -11048,9 +11479,9 @@ =end original これは古いバージョンの Perl から互換性のない形で変更されたライブラリ -モジュール(我々は必要な場合以外にそのようなことがないように努力していますが)を -C<use> する前に、現在の Perl のバージョンを調べたい場合に -有用です。 +モジュール(我々は必要な場合以外にそのようなことがないように +努力していますが)を C<use> する前に、現在の Perl のバージョンを +調べたい場合に有用です。 =begin original @@ -11072,9 +11503,10 @@ C<import> は、組込みの関数ではなく、さまざまな機能を現在のパッケージに インポートするように C<Module> パッケージに伝えるために呼ばれる、 通常の静的メソッドです。 -モジュール側では、C<import> メソッドをどのようにでも実装することができますが、 -多くのモジュールでは、C<Exporter> モジュールで定義された、 -C<Exporter> クラスからの継承によって、C<import> メソッドを行なうようにしています。 +モジュール側では、C<import> メソッドをどのようにでも実装することが +できますが、多くのモジュールでは、C<Exporter> モジュールで定義された、 +C<Exporter> クラスからの継承によって、C<import> メソッドを行なうように +しています。 L<Exporter>モジュールを参照してください。 C<import>メソッドが見つからなかった場合、呼び出しはスキップされます。 @@ -11085,8 +11517,8 @@ =end original -パッケージの C<import> メソッドを呼び出したくない場合 -(例えば、名前空間を変更したくない場合など)は、明示的に空リストを指定してください: +パッケージの C<import> メソッドを呼び出したくない場合(例えば、名前空間を +変更したくない場合など)は、明示的に空リストを指定してください: use Module (); @@ -11110,9 +11542,8 @@ =end original -Module と LIST の間に VERSION 引数がある場合、 -C<use> は Module クラスの VERSION メソッドを、与えられた -バージョンを引数として呼び出します。 +Module と LIST の間に VERSION 引数がある場合、C<use> は Module クラスの +VERSION メソッドを、与えられたバージョンを引数として呼び出します。 デフォルトの VERSION メソッドは、 UNIVERSAL クラスから継承したもので、 与えられたバージョンが 変数 C<$Module::VERSION> の値より大きい場合に 警告を出します。 @@ -11127,7 +11558,8 @@ 繰り返すと、LIST を省略する(C<import> が引数なしで呼び出される)ことと 明示的に空の LIST C<()> を指定する (C<import> は呼び出されない)ことは -違います。VERSION の後ろにカンマが不要なことに注意してください! +違います。 +VERSION の後ろにカンマが不要なことに注意してください! =begin original @@ -11170,8 +11602,8 @@ =end original これに対して、C<no> コマンドという、C<use> によってインポートされたものを、 -インポートされていないことにするものがあります。つまり、C<import> の代わりに -C<unimport Module LIST> を呼び出します。 +インポートされていないことにするものがあります。 +つまり、C<import> の代わりに C<unimport Module LIST> を呼び出します。 no integer; no strict 'refs'; @@ -11183,7 +11615,8 @@ =end original -C<unimport> メソッドが見つからなかった場合、呼び出しは致命的エラーで失敗します。 +C<unimport> メソッドが見つからなかった場合、呼び出しは致命的エラーで +失敗します。 =begin original @@ -11194,9 +11627,8 @@ =end original 標準モジュールやプラグマの一覧は、L<perlmodlib> を参照してください。 -コマンドラインから C<use> 機能を指定するための -C<-M> と C<-m> のコマンドラインオプションについては -L<perlrun> を参照して下さい。 +コマンドラインから C<use> 機能を指定するための C<-M> と C<-m> の +コマンドラインオプションについては L<perlrun> を参照して下さい。 =item utime LIST @@ -11212,7 +11644,8 @@ =end original ファイルのアクセス時刻と修正(modification) 時刻を変更します。 -LIST の最初の 2 つの要素に、数値で表わしたアクセス時刻と修正時刻を順に指定します。 +LIST の最初の 2 つの要素に、数値で表わしたアクセス時刻と修正時刻を +順に指定します。 LIST の残りの要素が、変更の対象となるファイルです。 変更に成功したファイルの数を返します。 各ファイルの inode 変更(change)時刻には、その時点の時刻が設定されます。 @@ -11283,7 +11716,7 @@ OFFSET で指定された要素を符号なし整数として返します。 従って、 BITS はビットベクターの中の各要素について予約されるビット数です。 BIT は、1 から 32 まで(プラットホームが -対応していれば 64 まで) の 2 のべきでなければなりません。 +対応していれば 64 まで) の 2 のべき乗でなければなりません。 =begin original @@ -11303,8 +11736,8 @@ =end original BITS が 16 以上の場合、入力のバイト列は BITS/8 のサイズの固まりに -グループ化され、各グループは pack()/unpack() のビッグエンディアンフォーマット -C<n>/C<N> を用いて(BITS==64の類似として)数値に変換されます。 +グループ化され、各グループは pack()/unpack() のビッグエンディアン +フォーマット C<n>/C<N> を用いて(BITS==64 の類似として)数値に変換されます。 詳細は L<"pack"> を参照してください。 @@ -11384,9 +11817,9 @@ =end original -vec() で作られた文字列は、論理演算子 C<|>、C<&>、C<^> で扱 -うこともできます。 これらの演算子は、両方の被演算子 -に文字列を使うと、ビットベクター演算を行ないます。 +vec() で作られた文字列は、論理演算子 C<|>、C<&>、C<^> で扱うこともできます。 +これらの演算子は、両方の被演算子に文字列を使うと、 +ビットベクター演算を行ないます。 =begin original @@ -11633,9 +12066,8 @@ チャイルドプロセスが終了するのを待ち、消滅したプロセスの pid を返します。 チャイルドプロセスが存在しないときには、C<-1> を返します。 ステータスは C<$?> に返されます。 -L<perlpc> に書いているように、 -返り値が C<-1> の場合は子プロセスが自動的に刈り取られたことを -意味するかもしれないことに注意してください。 +L<perlpc> に書いているように、返り値が C<-1> の場合は子プロセスが +自動的に刈り取られたことを意味するかもしれないことに注意してください。 =item waitpid PID,FLAGS @@ -11649,8 +12081,8 @@ =end original 特定のチャイルドプロセスが終了するのを待ち、消滅した -プロセスの pid を返します。 指定したチャイルドプロセスが -存在しないときには、C<-1> を返します。 +プロセスの pid を返します。 +指定したチャイルドプロセスが存在しないときには、C<-1> を返します。 値 0 がプロセスがまだ実行中であることを示すシステムもあります。 ステータスは C<$?> に返されます。 @@ -11676,9 +12108,9 @@ ブロックなしの wait は、システムコール wait_pid(2) か、 システムコール wait4(2) をサポートしているマシンで利用可能です。 しかしながら、特定の pid を C<0> の FLAGS での wait はどこでも -実装されています。(exit したプロセスのステータス値を覚えておいて、 -Perl がシステムコールをエミュレートしますが、 -Perl スクリプトには取り入れられていません。) +実装されています。 +(exit したプロセスのステータス値を覚えておいて、Perl がシステムコールを +エミュレートしますが、Perl スクリプトには取り入れられていません。) =begin original @@ -11688,8 +12120,8 @@ =end original -システムによっては、返り値が C<-1> の場合は子プロセスが自動的に刈り取られたことを -意味するかもしれないことに注意してください。 +システムによっては、返り値が C<-1> の場合は子プロセスが自動的に +刈り取られたことを意味するかもしれないことに注意してください。 詳細やその他の例については L<perlipc> を参照してください。 =item wantarray @@ -11703,10 +12135,10 @@ =end original -現在実行中のサブルーチンがのコンテキストが、リスト -値を要求するものであれば、「真」を返します。 -スカラを要求するコンテキストであれば、「偽」を返します。 -何も値を要求しない(void コンテキスト)場合は未定義値を返します。 +現在実行中のサブルーチンがのコンテキストが、リスト値を +要求するものであれば、真を返します。 +スカラを要求するコンテキストであれば、偽を返します。 +何も値を要求しない(無効コンテキスト)場合は未定義値を返します。 return unless defined wantarray; # don't bother doing more my @a = complex_calculation(); @@ -11768,8 +12200,10 @@ =end original -C<$SIG{__WARN__}> ハンドラが設定されている場合は何のメッセージも表示されません。 -メッセージをどう扱うか(例えば C<die> に変換するか)はハンドラの責任ということです。 +C<$SIG{__WARN__}> ハンドラが設定されている場合は何のメッセージも +表示されません。 +メッセージをどう扱うか(例えば C<die> に変換するか)はハンドラの +責任ということです。 従ってほとんどのハンドラは、扱おうと準備していない警告を表示するために、 ハンドラの中で C<warn> を再び呼び出します。 C<__WARN__> フックはハンドラ内では呼び出されないので、これは十分安全で、 @@ -11783,9 +12217,9 @@ =end original -この振る舞いは C<$SIG{__DIE__}> ハンドラ -(エラーテキストは削除しませんが、代わりに C<die> をもう一度呼び出すことで -変更できます)とは少し違うことに気付くことでしょう。 +この振る舞いは C<$SIG{__DIE__}> ハンドラ(エラーテキストは削除しませんが、 +代わりに C<die> をもう一度呼び出すことで変更できます)とは +少し違うことに気付くことでしょう。 =begin original @@ -11794,8 +12228,9 @@ =end original -C<__WARN__> ハンドラを使うと、(いわゆる必須のものを含む)全ての警告を黙らせる -強力な手段となります。例: +C<__WARN__> ハンドラを使うと、(いわゆる必須のものを含む)全ての +警告を黙らせる強力な手段となります。 +例: # wipe out *all* compile-time warnings BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } } @@ -11859,13 +12294,14 @@ =end original -ページの先頭の処理は、自動的に行なわれます。 現在のページに -整形されたレコードを出力するだけのスペースがない場合には、 +ページの先頭の処理は、自動的に行なわれます。 +現在のページに整形されたレコードを出力するだけのスペースがない場合には、 改ページを行なってページを進め、新しいページヘッダを整形するため、 ページ先頭フォーマットが使われ、その後でレコードが書かれます。 デフォルトでは、ページ先頭フォーマットは、ファイルハンドルの名前に "_TOP" をつなげたものですが、ファイルハンドルが選択されている間に、 -変数 C<$^> に名前を設定すれば、動的にフォーマットを変更することができます。 +変数 C<$^> に名前を設定すれば、動的にフォーマットを +変更することができます。 そのページの残り行数は、変数 C<$-> に入っており、この変数を 0 に 設定することで、強制的に改ページを行なうことができます。