2

我有以下代码:

foreach $string (@strings) {
    if ($hash{$string}) {
        $letter = $hash{$string};
        $text .= $letter;
    }
}

其中$letter是一个字符或一个数字(例如:a、e、o、2、5...)。它创建了一个很好的文本,但我在附加数字 0 时遇到了问题。

如果$letter = 0它没有连接,例如给出28而不是2008. 但是,如果$letter在那一刻是1or aaaa,它会给出2118or 2aaaaaaaa8

我在想它可能与 Perl 中的 0 和 FALSE 相关……可能是?

非常感谢。

4

3 回答 3

5

您测试以查看条目是否存在,if ($hash{$string})但同时检查该值是否为真。改为使用if (defined $hash{$string})

于 2013-11-07T14:23:14.013 回答
3

的值0已定义但为假。检查定义性而不是真实性:

if (defined $hash{$string}) {

或使用定义或运算符:

$text .= $hash{$string} // '';
于 2013-11-07T14:23:21.550 回答
3

I was thinking that it might be something related to 0 and FALSE in Perl... might be?

是的,这就是问题所在。
检查哈希键是否定义的正确方法如下

foreach $string (@strings) 
{
    if (defined $hash{$string}) # Check if key is defined
    {
        $letter = $hash{$string};
        $text .= $letter; 
    } 
}
于 2013-11-07T14:29:00.157 回答