リストアップした変数を、
括弧で囲まれた ブロック・サブルーチン・eval
・do
にローカルであると宣言する。リスト中の全要素は左辺値でなければならない。
local
は LIST
中の変数の値をスタックに保存し、
ブロック・サブルーチン・eval
から抜ける時に元に戻す。
このため、呼ばれたサブルーチンではローカル変数は参照できるが、
グローバルな変数は参照できないことになる。
LIST
は希望により値を代入することができる。
これによりローカル変数を初期化できる。
(ある変数について初期化を指示しない場合、値はundefined
で作成される。)
通常、サブルーチンへのパラメータに名前を付けるのに用いる。
sub RANGEVAL {
local($min, $max, $thunk) = @_;
local($result) = ";
local($i);
# $thunk は $i を参照すると仮定している
for ($i = $min; $i < $max; $i++) {
$result .= eval $thunk;
}
$result;
}
if ($sw eq '-v') {
# グローバルな配列でローカルな配列を初期化
local(@ARGV) = @ARGV;
unshift(@ARGV,'echo');
system @ARGV;
}
# @ARGV は保存される
# 連想配列に一時的に数字を付加する
if ($base12) {
# (注意: これが効率がよいわけではない!)
local(%digits) = (%digits,'t',10,'e',11);
do parse_num();
}
注意:
local()
は run-time コマンドであり、ループでは毎回実行される。
このためループから抜けて解放するまで、毎回スタックを消費する。