2004年05月19日

配列の比較の時に

Perlで配列Aに含まれて居て配列Bに無いものを抽出しようとして
foreach (@arrA){
 unless(grep(/^$_$/,@arrB)){
  push(@newarr,$_)
 }
}
というのを書いたんですが、これがうまく動かない。

どうも調べて見ると配列Bが一件も無い場合は良いのですが、配列Bに1件でも要素があると配列Aの要素が全て配列Bにあると判断される模様。

まぁ、世の中には

とか便利なモジュールがあるのでそれに頼っても良いんですが、上記で動くはずなのに動かないのはどうにも癪なので、調べてみたところ
  • 注意: $_ は配列値への参照となっているので、配列要素を変更するのに用いることができる。これは便利である一方、 LIST が名前のついた配列でない場合には、ちょっと変な結果を返すことがある。
これか_| ̄|○

確かに同時に書き換えられたら便利な時もあるけど、かなりハマる仕様だなぁ(苦笑)

というわけで

foreach my $var (@arrA){
 unless(grep(/^$var$/,@arrB)){
  push(@newarr,$var)
 }
}
としたらちゃんと動作するようになりました( ̄▽ ̄)ノ

Posted by Takuchan at 2004年05月19日 14:52 | トラックバック(0)