argra****@users*****
argra****@users*****
2008年 12月 3日 (水) 17:57:07 JST
Index: docs/perl/5.8.8/perlmod.pod diff -u docs/perl/5.8.8/perlmod.pod:1.4 docs/perl/5.8.8/perlmod.pod:1.5 --- docs/perl/5.8.8/perlmod.pod:1.4 Sat Aug 23 06:10:14 2008 +++ docs/perl/5.8.8/perlmod.pod Wed Dec 3 17:57:07 2008 @@ -1,3 +1,6 @@ + +=encoding euc-jp + =head1 NAME =begin original @@ -44,7 +47,7 @@ Perlは、他のパッケージの変数によってあるパッケージが壊されるのを 防ぐために、選択的名前空間(alternative namespace)の機構を提供しています。 実際のところ、グローバル変数は Perl にはないのです。 -パッケージ文は、コンパイル単位を与えられた名前空間にあるように宣言します。 +package 文は、コンパイル単位を与えられた名前空間にあるように宣言します。 そのパッケージ宣言のスコープは宣言それ自身から、宣言を囲むブロック、 または C<eval>、ファイルの最初に現れたものまでです (my() や locla() 演算子のスコープと同じ)。 @@ -89,8 +92,8 @@ それは以前のシングルクォートが Ada プログラマに馴染みのもので あったことと同じです。 古い構文も互換性のためにまだサポートされているので、 -C<"This is $owner's house"> のようにすることもできます。 -これは C<$owner::s> をアクセスします。 +C<"This is $owner's house"> のようにすると、これは C<$owner::s> を +アクセスします; つまり、パッケージ C<owner> にある $s という変数をアクセスするのですが、 これはあなたの望んだ動作ではないでしょう。 C<"This is ${owner}'s house"> のようにブレースを使うことによって @@ -288,7 +291,7 @@ =end original -型グロブに対する代入は、エイリアス操作を行います。 +型グロブに対する代入は、エイリアス操作を行います; 例えば: *dick = *richard; @@ -339,9 +342,9 @@ =end original -C<*foo = *bar> makes the typeglobs themselves synonymous while -C<*foo = \$bar> makes the SCALAR portions of two distinct typeglobs -refer to the same scalar value. +C<*foo = *bar> は型グロブそのものを同期させますが、一方 +C<*foo = \$bar> 同じスカラ値を示す二つの区別した型グロブの SCALAR 部を +作ります。 これが意味するのは、以下のコードは: $bar = 1; @@ -366,11 +369,10 @@ C<$foo> は I<元の> C<$bar> -- C<local()> によって追いやられ、ブロックが 終わる時に復元されるもの -- へのリファレンスを保持しているので '1' が 表示されます。 -Because variables are accessed through the -typeglob, you can use C<*foo = *bar> to create an alias which can be -localized. (But be aware that this means you can't have a separate -C<@foo> and C<@bar>, etc.) -(TBT) +変数は型グロブを通してアクセスされるので、ローカル化できるエイリアスを +作るために C<*foo = *bar> とすることができます。 +(しかし、これは C<@foo> と C<@bar> などを別々に保持することが +できないということに注意してください。) =begin original @@ -381,15 +383,21 @@ =end original -What makes all of this important is that the Exporter module uses glob -aliasing as the import/export mechanism. Whether or not you can properly -localize a variable that has been exported from a module depends on how -it was exported: -(TBT) +これらのことが重要である理由は、Exporter モジュールはインポート/エクスポート +機構としてグロブによるエイリアスを使うからです。 +モジュールからエクスポートされた変数を適切にローカル化できるかどうかは +どのようにエクスポートされたかに依存します: + +=begin original @EXPORT = qw($FOO); # Usual form, can't be localized @EXPORT = qw(*FOO); # Can be localized +=end original + + @EXPORT = qw($FOO); # 通常の形式、ローカル化できない + @EXPORT = qw(*FOO); # ローカル化できる + =begin original You can work around the first case by using the fully qualified name @@ -398,10 +406,9 @@ =end original -You can work around the first case by using the fully qualified name -(C<$Package::FOO>) where you need a local value, or by overriding it -by saying C<*FOO = *Package::FOO> in your script. -(TBT) +1 つ目の場合は、ローカルな値が必要なところで完全修飾名 +(C<$Package::FOO>) を使うか、プログラム中で C<*FOO = *Package::FOO> として +上書きすることで回避できます。 =begin original @@ -412,12 +419,14 @@ =end original -C<*x = \$y> 機構は全てをコピーすることを望まないのであれば、低コストな +C<*x = \$y> 機構は、全てをコピーすることを望まないときに、低コストな リファレンスをサブルーチンに渡したりサブルーチンから返すために 使うことができます。 これは動的変数に対する代入のときにのみ働き、レキシカル変数では 働きません。 +=begin original + %some_hash = (); # can't be my() *some_hash = fn( \%another_hash ); sub fn { @@ -428,6 +437,18 @@ return \%nhash; } +=end original + + %some_hash = (); # my() にできない + *some_hash = fn( \%another_hash ); + sub fn { + local *hashsym = shift; + # ここで %hashsym を普通に使うと、 + # 呼び出し元の %another_hash に影響を与える + my %nhash = (); # したいことをする + return \%nhash; + } + =begin original On return, the reference will overwrite the hash slot in the @@ -634,14 +655,13 @@ =end original -These code blocks can be prefixed with C<sub> to give the appearance of a -subroutine (although this is not considered good style). One should note -that these code blocks don't really exist as named subroutines (despite -their appearance). The thing that gives this away is the fact that you can -have B<more than one> of these code blocks in a program, and they will get -B<all> executed at the appropriate moment. So you can't execute any of -these code blocks by name. -(TBT) +これらのコードブロックは、サブルーチンのような見た目を与えるために +C<sub> を前置できます(しかしこれはよいスタイルとは考えられていません)。 +これらのコードブロックは実際には(その見た目に反して)名前付きサブルーチンの +ようには存在していないということは注意するべきでしょう。 +これで明かされることは、これらのコードブロックはプログラム中に B<複数> +持つことができ、B<全て> が適切な瞬間に実行されるということです。 +従って、これらのコードブロックはどれも名前で実行できません。 =begin original @@ -754,7 +774,7 @@ =end original -C<CHECK> コードブロックは、B<初期の> Perl コンパイルフェーズ終了直後、 +C<CHECK> コードブロックは、B<最初の> Perl コンパイルフェーズ終了直後、 実行時が開始する直前に、LIFO 順で実行されます。 C<CHECK> コードブロックは Perl コンパイラスイートがプログラムのコンパイル 状態を保存するために使われます。 @@ -768,11 +788,10 @@ =end original -C<INIT> blocks are run just before the Perl runtime begins execution, in -"first in, first out" (FIFO) order. For example, the code generators -documented in L<perlcc> make use of C<INIT> blocks to initialize and -resolve pointers to XSUBs. -(TBT) +C<INIT> ブロックは Perl ランタイムが実行を開始する直前に、「先入れ先出し」 +(FIFO) 順で実行されます。 +例えば、L<perlcc> で文書化されているコードジェネレータは C<INIT> ブロックを +初期化と、XSUB へのポインタの解決に使います。 =begin original @@ -1219,20 +1238,21 @@ iスレッドはデータツリーをクローン化することで動作するので、スレッド間では 何のデータも共有されません。 -These threads can be used by using the C<threads> -module or by doing fork() on win32 (fake fork() support). When a -thread is cloned all Perl data is cloned, however non-Perl data cannot -be cloned automatically. Perl after 5.7.2 has support for the C<CLONE> -special subroutine. In C<CLONE> you can do whatever -you need to do, -like for example handle the cloning of non-Perl data, if necessary. -C<CLONE> will be called once as a class method for every package that has it -defined (or inherits it). It will be called in the context of the new thread, -so all modifications are made in the new area. Currently CLONE is called with -no parameters other than the invocant package name, but code should not assume -that this will remain unchanged, as it is likely that in future extra parameters -will be passed in to give more information about the state of cloning. -(TBT) +これらのスレッドは、C<threads> を使うか、win32 で fork() を行う +(偽の fork() 対応)ことで使われます。 +スレッドがクローン化されると、全ての Perl のデータはクローン化されますが、 +非 Perl データは自動的にはクローン化できません。 +5.7.2 以降の Perl は C<CLONE> 特殊サブルーチンに対応しています。 +C<CLONE> 内部では、例えば(もし必要なら)非 perl データのクローン化の +処理といった、必要なことはなんでもできます。 +C<CLONE> は定義(または継承)されたパッケージ毎に一度、クラスメソッドとして +呼び出されます。 +これは新しいスレッドのコンテキストで呼び出されるので、全ての変更は +新しいスレッドで行われます。 +現在のところ CLONE は呼び出し元のパッケージ名以外の引数なしで +呼び出されますが、コード側はこれがずっと続くと仮定するべきではありません; +将来、クローン化の状態についてさらなる情報を与えるために追加の引数が +渡されるかもしれないからです。 =begin original @@ -1260,7 +1280,7 @@ =end original -5.8.7 以降の Perl はC<CLONE_SKIP> 特殊サブルーチンに対応しています。 +5.8.7 以降の Perl は C<CLONE_SKIP> 特殊サブルーチンに対応しています。 C<CLONE> と同様、C<CLONE_SKIP> はパッケージ毎に 1 回呼び出されます; しかし、これはクローン化が開始する直前に、親スレッドのコンテキストで 呼び出されます。 @@ -1281,11 +1301,9 @@ =end original -Like C<CLONE>, C<CLONE_SKIP> is currently called with no parameters other -than the invocant package name, although that may change. Similarly, to -allow for future expansion, the return value should be a single C<0> or -C<1> value. -(TBT) +C<CLONE> と同様に、C<CLONE_SKIP> は現在のところ呼び出し元のパッケージ名 +以外の引数なしで呼び出されますが、これは変更されるかもしれません。 +同様に、将来の拡張のために、返り値は単一の C<0> か C<1> であるべきです。 =head1 SEE ALSO @@ -1306,15 +1324,15 @@ クラスに関する一般的なスタイルについては L<perlmodlib> を参照してください。 Perl の標準インポート/エクスポート機構がどのように動作しているのかは L<Exporter> を、クラスの作成に関する詳細なチュートリアルは -L<perltoot> と L<perltooc> を、オブジェクトに関するハードコアなリファレンスの -ドキュメントは L<perlobj> を、関数とスコーピングの説明は L<perlsub> を、 -エクステンションモジュールの記述に関する詳細は L<perlxstut> と -L<perlguts> を参照してください。 +L<perltoot> と L<perltooc> を、オブジェクトに関するハードコアな +リファレンスのドキュメントは L<perlobj> を、関数とスコーピングの説明は +L<perlsub> を、エクステンションモジュールの記述に関する詳細は +L<perlxstut> と L<perlguts> を参照してください。 =begin meta Created: KIMURA Koichi -Updated: Kentaro Shirakata <argra****@ub32*****> +Updated: Kentaro Shirakata <argra****@ub32*****> (5.8.8-) =end meta