與小我知道Perl的,我很驚訝,這個語法不起作用:分配變量和校驗散列的存在關鍵
if (exists $wid = $dict{$w}) {
print "$wid:$c\n";
}
看來我不能進行分配$wid = $dict{$w}
和檢查它是否存在在同一時間:
存在參數不是HASH或數組元素或在 createWordIndex.pl線的子程序31.
有沒有辦法做這種轉讓?或者我只需要首先檢查存在,然後在條件爲真的情況下進行分配?
與小我知道Perl的,我很驚訝,這個語法不起作用:分配變量和校驗散列的存在關鍵
if (exists $wid = $dict{$w}) {
print "$wid:$c\n";
}
看來我不能進行分配$wid = $dict{$w}
和檢查它是否存在在同一時間:
存在參數不是HASH或數組元素或在 createWordIndex.pl線的子程序31.
有沒有辦法做這種轉讓?或者我只需要首先檢查存在,然後在條件爲真的情況下進行分配?
你打算在打印之前弄清楚是否有值嗎?然後,你就必須做這種方式:
if (exists($dict{$w})) {
my $wid = $dict{$w};
print "$wid: $c\n";
}
如果你知道存儲的值會一直被定義,你可以做
if (defined(my $wid = $dict{$w})) {
print "$wid: $c\n";
}
你剛纔已經回答了你的問題在你的問題。
「或者我只需要首先檢查存在,然後在條件爲真時進行分配?」
的存在於你的代碼函數採用標量$ WID。並且是在錯誤的存在功能需要一個散列或數組元素
存在的說法是不是哈希或數組元素或createWordIndex.pl線子程序31
所以是明確表示。你需要先檢查它是否存在。
友好的建議:嘗試所有的事情/解決方案,你可以想到之前問,因爲你可能已經知道你的問題的答案。 :)
或者(TIMTOWTDI,畢竟),你可以使用智能匹配運算符(Perl版本> = 5.10):
if($w ~~ (keys %dict))
{
my $wid = $dict{$w};
print "$wid: $c\n";
}
,或者:
if(grep{$w eq $_}(keys %dict))
{
my $wid = $dict{$w};
print "$wid: $c\n";
}
可以做到這一點,只需跳過exists
即可。如果分配完成(因爲存在$ dict {$ w}),則副作用爲真。
my %dict;
$dict{one} = 1;
$dict{two} = 2;
$dict{three} = 3;
if ($wid = $dict{four}) {
print "$wid\n";
}
else {
print "NO!\n";
}
有一個問題,如果'$ {字典} 4'存在,但它的價值是'0' – Toto
@ M42 - 右邊,好點。 –