私は他のハッシュを含むハッシュを反復しようとします。ハッシュ内のハッシュは、データをフェッチできません。
私はエラーを取得する:ここで
Global symbol "%arch_" requires explicit package name
はコードです:
my %ARCH_CODES = (
armv7 => {id => 102, desc => "aaaaaa"},
i386 => {id => 103, desc => "bbbbbb"},
x86_64 => {id => 104, desc => "cccccc"},
arm64 => {id => 105, desc => "dddddd"}
);
sub af_exit
{
my %_error = @_;
writeLogAndPrint($_error{'id'});
exit($_error{'id'});
}
だから私は、armv7
にループ内で実行さi386
などとaf_exit
for my $arch_ (keys %ARCH_CODES) {
foo($ARCH_CODES{$arch_});
# tried foo(%{ $ARCH_CODES{$arch_} })
}
foo
メソッドで問題が発生しました:
sub foo
{
my %arch = @_; # here I get an ERROR: Global symbol "%arch_" requires explicit package name
my $res = runCommand("file zzz | grep \"$arch{id})\"");
af_exit($ARCH_CODES{$arch});
}
}
第二の問題は、af_exit
あるハッシュを受けなければならないので、私はスカラー
をハッシュしないように$ARCH_CODES{$arch}
を変換何とか必要私はthis answer: Perl:Access values of hash inside a hashに似て作ってみましたが、同じエラーを取得
任意のアイデア?それはあなたが単一のスカラーとリストを割り当てるしようとしているハッシュ
sub foo
{
my %arch = @_;
# ...
}
を期待しながら、%ARCH_CODES
の値は、ハッシュ参照であるため、
'$ ARCH_CODES {$のarch_は}'値=> '{ID => 102、DESC => "AAAAAA" を} 'が含まれたハッシュ・リファレンスであり、あなたが'私の$アーチを使用することができます= @_ 'ハッシュリファレンスを取得し、' foreach my $ keys(keys%$ arch) 'のようにアクセスしてください。 – AbhiNickz
@AbhiNickzしかし、この場合は' af_exit($ ARCH_CODES {$ arch});を使用できません; – snaggs
'af_exit($ arch);'を使って 'hash'参照をサブに送り、' my $ _error = @_; 'のように再利用することができます – AbhiNickz