'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で停止していますが、
機能拡張されて書きやすくなっている部分もあるので、ちゃんと
追従してよりよいコードを書いていかないといけないなぁと思いました。