1

以下の条件でチェックを行いたい。のメンバーが に%ans含まれていない場合は%test、その値を出力し%ansます。しかし、なぜこれはそれを印刷しなかったのですか?

use Data::Dumper;
my %ans = ("foo" => 1);
my %test = ("bar" => 1);



foreach my $ansrule ( keys %{$ans}  ) {
    if ( !exists $test{$ansrule} ) {
        print "ANS: $ansrule\n";
    }
}

https://eval.in/51453

4

2 に答える 2

2

keys %{$ans}は と同じではないため、後者を使用keys %ansする必要がありました: とは異なる変数です。$ans%ans

%{$ans}変数に格納されているハッシュ参照を逆参照しようとしています$ansが、これは明らかに定義されていません。コードに追加use strict;したことがあれば、警告が表示されます...

Global symbol "$ans" requires explicit package name
于 2013-09-29T09:12:56.987 に答える
2

あなたがしたい

foreach my $ansrule ( keys %ans  )

それ以外の

foreach my $ansrule ( keys %$ans  )

use strict; use warnings;このような欠陥の検出に役立ちます。

于 2013-09-29T09:15:02.917 に答える