delete localに関するメモ

'delete local'というスコープ中だけ deleteするという機能が
だいぶ昔(5.12)に入っていたみたいなんですが、知らなかったのでメモ

サンプルコード

#!perl
use strict;
use warnings;

use 5.012;

use Data::Dumper;

my %hash = (
    apple  => 100,
    melon  => 200,
    orange => 300,
);

say "[original]";
say Dumper(\%hash);

{
    delete local $hash{apple};
    say "[delete local]";
    say Dumper(\%hash);
}

say "[restore]";
say Dumper(\%hash);

結果

[original]
$VAR1 = {
          'apple' => 100,
          'orange' => 300,
          'melon' => 200
        };

[delete local]
$VAR1 = {
          'orange' => 300,
          'melon' => 200
        };

[restore]
$VAR1 = {
          'apple' => 100,
          'orange' => 300,
          'melon' => 200
        };

5.12より前で対応すると、対象のもの(hash or array)を localして
deleteすれば良いみたいです。

おわりに

私は趣味でしか Perlを書かないので書き方が 5.8で停止していますが、
機能拡張されて書きやすくなっている部分もあるので、ちゃんと
追従してよりよいコードを書いていかないといけないなぁと思いました。