2012-01-25 15 views
0

ハッシュから特定のキーと値のペアを削除しようとしていますが、グローバルシンボルに明示的なパッケージ名例外が必要です。これをデバッグする方法。私はいくつかの解決策を読んだが、どれもうまくいかないようだ。だから、ハッシュは、このように宣言されています。グローバルシンボルのperl結果からキー/値ペアを削除すると明示的なパッケージ名エラーが発生する

my $hash = foo(); 

その後、私はこのコード行を使用してハッシュを経る:

while (my ($key, $value) = each %$hash) 

と私は私が欲しいと保存しない値を選択ブロック内私はハッシュからそれらを削除することができますので、私は、このコードを使用して、キーを取得するためのアレイにアクセス

my @keysArray =(); 

:(当然のループの前に)このように宣言された配列内のこれらの値のキー

for my $key (@keysArray){ 
    delete $hash{$key};# this line of code is causing the problem 
} 

私が書いた最後の行は、グローバルシンボル "%hash"を引き起こすものです。明示的なパッケージ名の例外が必要です。

ここで何か間違っていますか?

P.S.私は変数名を変更し、他の内部コードを削除しましたが、フォーマットは同じです。

お願いします!おかげさまで

+0

に短縮することができ、 "厳格な使用しています。"これは良いことです。私はあなたが "警告を使う"と思っています。同じように。 – zgpmax

+0

警告はありませんが、私が探していた答えがありました(以下です)。 – Nabou

答えて

9

delete $hash{$key}は、%hashからエントリを削除します。 %hashはありません。代わりにdelete $hash->{$key}と書いて、%$hashからエントリを削除します。

参考資料とその使用方法に関するご質問には、perldoc perlreftutとお答えください。

3

$hash(ハッシュへのスカラー参照)は宣言しましたが、%hash(ハッシュ)は宣言していません。代わりにdelete $hash->{$key}を実行してください。

1

あなた(修理)コード:

for my $key (@keysArray) { 
    delete $hash->{$key}; 
} 

が、あなたがやっていると思われるエラーメッセージから

for my $key (@keysArray) { 
    delete $$hash{$key}; 
} 

または単に

delete @$hash{@keysArray}; 
関連する問題