if ( $2 && $3 && $3 != 0 )
Perl中的上述逻辑是什么?在其他语言中,我从未见过像这样的if条件。 2美元和3美元只是捕获一些正则表达式的组。
或者这个:
if ( $2 && $2 == 0 && $3 && $3 == 0 )
答案 0 :(得分:8)
在Perl中,如果变量被定义,则变量的计算结果为true,非零(*参见amon注释中的特殊情况)和非空变量。最终条件是多余的,因为$3
无法求值为true且为0。
代码只是确保捕获组2和3捕获了一些内容。
答案 1 :(得分:5)
if ( $2 && $3 && $3 != 0 )
意味着,如果成功捕获$ 2和$ 3且$ 3不是0
所以$line = 'a b c 4';
$line =~ m/(\d)\s?(\d)\s?(\d)/;
# $1 is 4, $2 is undef, $3 is undef. Your if statement would fail.
$line2 = '3 4 5 6';
$line2 =~ m/(\d)\s?(\d)\s?(\d)/;
# $1 = 3, $2 = 4, $3 = 5. Your if statement is successfull.
if ( $2 && $2 == 0 && $3 && $3 == 0 )
Just表示相同,但第2和第3场比赛必须为0。
$line = '5 0 0 4';
$line2 =~ m/(\d)\s?(\d)\s?(\d)/;
# $1 = 5, $2 = 0, $3 = 0. Your if statement is successfull.