リンク先の投稿は誤解を招くか、少なくとも不完全です。レキシカル変数を作成するのに、local
を決して使用しないでください。それはそうではありません、それはmy
のためです。
local
は、実際の機能が必要なときに使用します。グローバル変数に一時的な値を指定する。これは、Perlの特殊変数を一時的に設定するためによく使われます。古典的なケースは、このようなものです:一度にファイル全体を読み込むためには
{
local $/;
$entire_file = <$filehandle>;
}
、あなたはundefinedにレコードセパレータを設定する必要があります。しかし、あなたは一時的にそれをしたいだけです。したがってlocal
を使用する必要があります。
これは絶対にお勧めしません。良いPerlコードとみなされます。
更新:この記事には、実際には「決してローカルを使用しない」という文章が含まれています。それでも、私はそのような包括的な宣言をするのは間違いだと思う。私はノートが応答している批評家に同意する。上記の例は非常に一般的な、基本的なケースであり、その静脈にはlocal
のいくつかの他の一般的な用途もあります。
私は、初心者のチュートリアルでは物事を単純なものにする必要があることを理解していますが、単純では不正確であるとは限りません。 "今のところ、local
について心配しないでください。my
を"と同じように使ってみましょう。でも、は絶対にでなければなりません。
あなたがリンクしている投稿は間違っていません。しかし**のステートメント**は決してローカル**を使用していません。関数呼び出し間の値を保持することは、 'local'の利点の1つです。 'my'を使うと、字句スコープができます。つまり、ブロックの中括弧と関数呼び出しの間でのみ有効です。すべての呼び出しで別々の値が必要な場合は、myを使用します。 'local'はグローバル変数をそのブロックのまったく新しい変数として再利用するためのものです。 –
@Drt: 'local'変数は、関数呼び出しで値を保持しません。 – Borodin
@borodin:from [perldoc](http://perldoc.perl.org/perlsub.html#Temporary-Values-via-local%28%29):ローカルの変数は、現在の変数の値が –