一些例子來理解結構。這些都意味着相同(差異很小):
# just a hash
%hash = ('a', 1, 'b', '2');
%hash = (a => 1, b => '2');
# ref to hash
$hash_ref = \%hash;
$hash_ref = { a => 1, b => 2 };
print $hash{ a }; #prints 1
print $hash_ref->{ a }; #prints 1
1和'2'是值。價值觀可能只是標量。參考SOMETHING也是標量。上面例子中的$ hash_ref。
在你的例子中,你說1st hash是列表。我認爲你的意思是陣列:
$list = [ $error1, $error2 ];
$error1 = { error_name => $description }
$description = { status => 'status', message => 'msg', params => [ 1,2,'asdf'] }
你知道一個子標量列表。如果你想哈希傳遞到子你只是通過參照本哈希
fn(\%hash);
,並得到這個哈希在子:
sub fn {
my($hash) = @_;
print $hash->{ key_name };
}
我想你只是一個錯誤的列表,每個都包含鍵:
$list_of_errors = [
{ status => 1, message => 'hello' },
{ status => 2, message => 'hello2' },
{ status => 1, message => 'hello3' },
]
fn($list_of_errors);
sub fn {
my($le) = @_;
print $le->[1]{ message }; #will print 'hello2'
# print $le->{ error_name }{ status }; #try this in case hash of hashes
}
要理解結構更好地嘗試使用Data :: Dump模塊;
use Data::Dump qw/ pp /;
%hash = (a => 1);
$hash = \%hash;
$arr = [ 1, 2, 'a' ];
print pp $hash, \%hash, $arr;
祝你好運。
CODE
our %error = (
ERROR_1 => {
statusCode => 561,
message => "an unexpected error occurred at location X",
params => $param_1,
},
ERROR_2 => {
statusCode => 561,
message => "an unexpected error occurred at location Y",
params => $param_1,
}
);
sub print_err {
my($err_name) = @_;
print $error{ $err_name }{ message } ."\n";
}
print_err('ERROR_1');
print_err('ERROR_2');
簡短的回答:是的。但是,如果您向我們展示一個簡短的示例(perl代碼),說明您的結構如何,您將得到更詳細的答案。 – PerlDuck
您應該發佈您遇到問題的代碼。請參閱[問]以獲取更多信息。 –