最新の「新着記事」はここから New!
2008-03-09
local - パッケージ変数を一時的に退避して復元する
パッケージ変数を「一時的に変更」するには「local」を使用します。
値の保存と復元
「local」を使って値を代入すると、スコープの終わりで以前の値が復元されます。
our $NUM = 5; { local $NUM = 3; } # ここでは「$NUM」は「元の値」である「5」に戻る
localによって変更されたパッケージ変数は、スコープの最後で復元されます。
初期化を行わなかった場合は、変数の値の初期値は、未定義値になります。
local $NUM;
localは、パッケージ変数だけが対象であって、myで宣言されたレキシカル変数には利用できないことに注意してください。
「local」による「変数宣言」は使うべきか?
現代のPerlには「myによる変数宣言」が導入されています。「lcoal」によって変数を宣言する必要性は、ほとんどありません。
ほぼすべての変数宣言は「my」を使うようにしましょう。
サンプル
特殊変数を一時的に変更するサンプルです。特殊変数はmainパッケージに属するパッケージ変数です。
{
# 特殊変数$/の一時的な変更
local $/ = undef;
}
# スコープを抜けると元の値が復元される
localを理解するためのサンプルです。
use strict; use warnings; # localの説明 our $NUM = 1; print "\$NUM = $NUM\n"; # $NUM の完全修飾名は、$main::NUM で、mainパッケージに属する。 # ( Perlでは、どんな変数もグローバル変数にはならない # Perlには、レキシカル変数とパッケージ変数しか存在しない。) print "\$main::NUM = $main::NUM\n"; print "\n"; { # レキシカルスコープの内部で「$NUM」の値を一時的に変更 local $NUM = 2; print "In scope\n"; # 2を出力 print "\$NUM = $NUM\n"; } print "\n"; # 1を出力 print "Out of scope\n"; print "\$NUM = $NUM\n";


