所以我有這段代碼:
push @{$savedcallouts[-1]}, {
$funcnm => {
matches => {%$captures},
flags => [eval { @flags}]
}};
print Dumper \@{$savedcallouts[-1]};
這給出了以下結果:
$VAR1 = [
[
{
'normalexpr' => undef
},
{
'normalexpr' => undef
},
{
'ternaryexpr' => undef
}
]
];
但是,如果我洗掉flags => [eval { @flags}](ie have flags => eval { @flags}- 我得到這個:
$VAR1 = {
'begin_binary' => {
'HASH(0x1038301c0)' => {
'ternaryexpr' => undef
},
'flags' => {
'normalexpr' => undef
},
'matches' => {}
}
};
任何想法為什么會發生這種情況以及我如何可能避免 - 即直接將陣列作為哈希欄位而沒有工件或嵌套陣列。
uj5u.com熱心網友回復:
首先,eval { }在這里沒用。@flags不會拋出任何例外。[1]
所以
flags => eval { @flags }
是一種奇怪的寫作方式
flags => @flags
flags => @flags
是的簡寫
"flags", @flags
這是
"flags", $flags[0], $flags[1], $flags[2], ...
這是
"flags" => $flags[0],
$flags[1] => $flags[2],
...
將陣列直接作為哈希欄位
哈希元素的值是標量。
因此,您可以將陣列的參考存盤在標量中,但不能將陣列存盤在標量中。
- 好吧,可以添加可以添加的魔法
@flags。但是你真的想忽略這個例外嗎?我無法理解你為什么在eval這里使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/480260.html
