目標: 配列から特定の値を削除します
スクリプトを書きましたが、問題なく動作しますが、自分の書き方には満足できません。だから私はそれを書くためのより良い方法があることを知りたいと思っています. 以下の使用例を検討してください。
以下のように、ネストされたハッシュ/ハッシュ/配列があります。local
名前に含まれる配列値を削除する必要があります。
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my $hash = { esx1 =>
{ cluster => "clu1",
fd => "fd1",
ds => [
'ds1',
'ds2',
'localds',
],
},
esx2 =>
{ cluster => "clu2",
fd => "fd2",
ds => [
'ds3',
'ds4',
'dslocal',
],
},
};
foreach my $a ( keys %$hash )
{
foreach ( 0..$#{ $hash->{$a}->{ds} } )
{
delete $hash->{$a}->{ds}->[$_] if $hash->{$a}->{ds}->[$_] =~ /local/i;
@{ $hash->{$a}->{ds} } = grep defined, @{ $hash->{$a}->{ds} };
}
}
print Dumper ($hash);
そのため、スクリプトは " localds
" と " dslocal
" を削除し、他のすべてをそのまま保持します。
質問:
foreach ( 0..$#{$hash->{$a}->{ds} } )
ループを書くためのよりクリーンな方法はありますか- 上記の行を記述しない場合
grep
、結果の配列にはlocal
削除された値が含まれますが、に置き換えられundef
ます。なぜこうなった。
ありがとう。