指定の名前のすべての変数をクリアする
reset
は、EXPR に指定された 1 文字から始まる変数をクリアします。
対象は該当のパッケージ内の変数すべてです。
ただし、my
で局所化された変数はクリアされず、何も影響を受けません。
reset
は、対象の変数が文字列なら undef
に、
配列なら空の配列に、ハッシュなら空のハッシュにします。
次のサンプルコードは、先頭が v
で始まる変数をクリアします。
our $var1 = 'abc';
our @var2 = ( 1, 2, 3 );
our %var3 = { foo => 1, bar => 2 };
reset 'v';
print defined($var1) ? $var1 : 'undefined', "\n"; # undefined
print scalar(@var2), "\n"; # 0 (空の配列)
print scalar( keys %var3 ), "\n"; # 0 (空のハッシュ)
reset
に 2 文字以上を引数に与えると、それぞれの文字を別々に解釈します。
たとえば、"ab"
を引数に与えると、
先頭が a
から始まる変数と、先頭が b
から始まる変数が対象になります。
our $alpha = 'a';
our $beta = 'b';
reset 'ab';
print defined($alpha) ? $alpha : 'undefined', "\n"; # undefined
print defined($beta) ? $beta : 'undefined', "\n"; # undefined
reset
にはハイフンを使って文字の範囲を指定することもできます。
次のサンプルは、小文字アルファベットで始まる変数が対象になります。
our $alpha = 'a';
our $zeta = 'z';
reset 'a-z';
print defined($alpha) ? $alpha : 'undefined', "\n"; # undefined
print defined($zeta) ? $zeta : 'undefined', "\n"; # undefined
ハイフンで文字の範囲を指定できると言っても、"A-Z"
を指定するのはお勧めできません。
なぜなら、@ARGV や @INC といった配列や
%ENV といったハッシュまで一掃されてしまうからです。
reset
の引数 EXPR を省略すると、正規表現 m?pattern?
検索をリセットします。
reset
はよくループの最後の continue
ブロックで使われます。