为什么我没有从这个简短的Perl脚本中获得输出?

gar*_*may 0 perl return-value

为什么下面的代码没有返回任何输出?我期待它打印出"包含".

sub is_member {
    my ($x, @list) = @_;
    foreach (@list) { 
        if ($x eq $_) {"contains"} else {"doesn't contain"}
        }
    }

my @a = qw(apple x orange but so nos how dod to it a b c);
print is_member("apple",@a)."\n";
Run Code Online (Sandbox Code Playgroud)

像下面的代码运行正常,输出"是回文"

sub is_palindrome {
    my ($x) = @_;
    if ($x eq reverse($x)){"is palindrome"} else {"Not a palindrome"} 
    }
print is_palindrome("radar")."\n";
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 6

这段代码:

if ($x eq $_) {"contains"} else {"doesn't contain"}
Run Code Online (Sandbox Code Playgroud)

不打印或返回任何内容.它评估两个常量,但这就是全部.我很惊讶没有关于丢失分号的投诉.缩进是古怪的.

你可能想要更像的东西:

sub is_member
{
    my ($x, @list) = @_;
    foreach (@list)
    { 
        return "contains" if ($x eq $_);
    }
    return "doesn't contain";
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你喜欢生活危险,不要在出现问题时抱怨.并且不要向我提交这样的代码以进行代码审查 - 我每次都会拒绝它.在你的代码的上下文中,如果你得到任何返回的东西,它将是"不包含",因为当你要查找的键是"apple"时,循环的最后一次迭代计算为false.您需要提前终止循环,或者明确返回.使用隐式返回是棘手的Perl并且不可靠启动. (4认同)