argra****@users*****
argra****@users*****
2007年 9月 9日 (日) 17:20:55 JST
Index: docs/perl/5.8.8/perlref.pod diff -u docs/perl/5.8.8/perlref.pod:1.2 docs/perl/5.8.8/perlref.pod:1.3 --- docs/perl/5.8.8/perlref.pod:1.2 Sun Sep 9 03:35:00 2007 +++ docs/perl/5.8.8/perlref.pod Sun Sep 9 17:20:55 2007 @@ -11,6 +11,8 @@ =head1 NOTE +(注意) + =begin original This is complete documentation about all aspects of references. @@ -906,13 +908,13 @@ =end original -Using a string or number as a reference produces a symbolic reference, -as explained above. Using a reference as a number produces an -integer representing its storage location in memory. The only -useful thing to be done with this is to compare two references -numerically to see whether they refer to the same location. +文字列や数値をリファレンスとして使うと、上述したようにシンボリック +リファレンスを生成します。 +リファレンスを数値として使うと、メモリ内のストレージの位置の +整数表現を生成します。 +これを利用して便利な唯一の状況は、二つのリファレンスを数値として +比較することで、同じ場所を参照しているかどうかを調べる場合です。 X<reference, numeric context> -(TBT) if ($ref1 == $ref2) { # cheap numeric compare of references print "refs 1 and 2 refer to the same thing\n"; @@ -929,13 +931,13 @@ =end original -Using a reference as a string produces both its referent's type, -including any package blessing as described in L<perlobj>, as well -as the numeric address expressed in hex. The ref() operator returns -just the type of thing the reference is pointing to, without the -address. See L<perlfunc/ref> for details and examples of its use. +リファレンスを文字列として使うと、参照しているものの型 +(L<perlobj> で記述しているように、bless しているパッケージを含みます)と、 +16 進数で表現された数値アドレスの両方を生成します。 +ref() 演算子は、アドレス抜きで、リファレンスが示しているものの型だけを +返します。 +この使い方の詳細と例については L<perlfunc/ref> を参照してください。 X<reference, string context> -(TBT) =begin original @@ -956,7 +958,7 @@ =end original -デリファレンスの構文では常に目的とするリファレンスの「型」を +デリファレンスの構文では常に目的とするリファレンスの型を 示すことができますので、型グロブをリファレンスと同じように デリファレンスすることができます。 つまり、C<${*foo}> と C<${\$foo}> は、どちらも同じスカラ変数を @@ -986,10 +988,10 @@ ダブルクォートで囲まれた文字列中に C<@{...}> が見つかると、その 文字列はブロックとして評価されます。 ブロックでは、C<mysub(1,2,3)> の呼び出しを実行し、その結果に対する -リファレンスが取られます。 -つまり、ブロック全体では、スカラへのリファレンスを返すこととなり、 -C<@{...}> でされた後、ダブルクォートで囲まれた文字列の中に、はり込まれることに -なります。 +無名配列へのリファレンスが作られます。 +つまり、ブロック全体では、配列へのリファレンスを返すこととなり、 +C<@{...}> でデリファレンスされた後、ダブルクォートで囲まれた文字列の中に、 +埋め込まれることになります。 このごまかしははっきりしない式にも有用です: print "That yields @{[$n + 5]} widgets\n"; @@ -1015,10 +1017,10 @@ リファレンスはもし未定義であれば必要に応じて存在するようになると言いましたが、 もしリファレンスとして使われた値が既に定義されていたときにはどのように なるのか示していませんでした。 -これはハードリファレンスでは B<ありません>。 +これはハードリファレンスでは I<ありません>。 リファレンスとして使ったならそれはシンボリックリファレンスとして扱われます。 -つまり、スカラの値は無名(であるかもしれない) 値への直接のリンクではなく、 -変数の B<名前> として扱われます。 +つまり、スカラの値は(おそらく)無名の値への直接のリンクではなく、 +変数の I<名前> として扱われます。 =begin original @@ -1153,7 +1155,7 @@ =end original でさえも同じ効果となります。 -(これはPerl 4 が 空白無しの形式を許しているにも関らず、 +(これは Perl 4 が 空白無しの形式を許しているにも関らず、 Perl 5.000 では構文エラーとなります)。 この構造はあなたが strict refs を使っているときに、 シンボリックリファレンスであることを考慮 I<していません>。 @@ -1183,7 +1185,7 @@ =end original -の代わりに +の代わりに以下のように書けて: $array{ aaa }{ bbb }{ ccc } @@ -1194,8 +1196,8 @@ =end original -のように書くことができます。 -そして、添え字が予約語であるかどうかを心配することはありません。 +そして添え字が予約語であるかどうかを心配することはありません。 +以下のようなことがしたいという珍しい場合には: $array{ shift } @@ -1254,7 +1256,7 @@ =end original B<注意>: 現在のユーザー見える形の擬似ハッシュの実装(配列の最初の要素を -奇妙な形で使うもの)は Perl 5.8.0 から非推奨となりました; Perl 5.8.10 からは +奇妙な形で使うもの)は Perl 5.8.0 から非推奨となりました; Perl 5.10.0 からは 取り除かれて、この機能は別の方法で実装される予定です。 現在のインターフェースは醜いだけでなく、現在の実装は通常の配列とハッシュの 利用をかなり目立つ形で遅くしています。 @@ -1269,7 +1271,7 @@ =end original -5.005のリリースから、通常ハッシュリファレンスが要求されるような +5.005 のリリースから、通常ハッシュリファレンスが要求されるような コンテキストの一部において配列リファレンスが使えるようになりました。 これはそれが構造体のフィールドであるかのごとく シンボル名を使った配列要素のアクセスを可能にします。 @@ -1503,19 +1505,19 @@ =end original -型を変更するようなレキシカル変数に対するアクセス -- -たとえば先の例の C<for> ループのようなもの、は -クロージャに置いてのみ動作し、一般的なサブルーチンでは動作しません。 +型を変更するようなレキシカル変数に対するアクセス -- 例えば先の例の +C<for> ループのようなもの -- はクロージャに置いてのみ動作し、 +一般的なサブルーチンでは動作しません。 一般的なケースでは、名前付きサブルーチンは適切にネストすることはなく、 (ネストするものが)無名関数であっても同じです。 これは、名前つきのサブルーチンはコンパイル時に一度だけ作成される (そして外側のレキシカルに捕捉される)のに対し、無名サブルーチンは 'sub' 演算子が実行される毎に捕捉されるからです。 他のプログラミング言語にあるような、固有のプライベート変数を持った -ネストしたサブルーチンを使いたいのであれば、Perlではちょっと +ネストしたサブルーチンを使いたいのであれば、Perl ではちょっと 手間がかかります。 直感的にこうだと思うようなコーディングは、不可思議な警告 -``will not stay shared''となるでしょう。 +"will not stay shared" となるでしょう。 例を挙げると、以下の例はうまく動作しません: sub outer { @@ -1565,6 +1567,8 @@ =head1 WARNING X<reference, string context> X<reference, use as hash key> +(警告) + =begin original You may not (usefully) use a reference as the key to a hash. It will be