gpt4 book ai didi

perl - 奇怪的 Perl 条件运算符行为

转载 作者:行者123 更新时间:2023-12-02 04:36:38 28 4
gpt4 key购买 nike

我正在 Perl 中做一些工作,并且使用条件运算符遇到了一个奇怪的结果。

有问题的代码:

($foo eq "blah") ? @x = @somearray : @y = ("another","array");

尝试编译此代码会导致错误“在 XXX 行 YY 处对列表和标量进行赋值,靠近 ');'”。在尝试查明错误来源时,我使用几种不同的方式在 Perl 中表示数组来编写此代码,它们都返回相同的错误。起初我认为这只是赋值语句中的一些愚蠢的明显错误,但为了满足我的好奇心,我以更详细的方式重写了该语句:

if($foo eq "blah") {
@x = @somearray;
} else {
@y = ("another","array");
}

该版本的代码编译得很好。

条件运算符的工作方式和我在这里缺少的基本 if-else 语句的工作方式之间是否存在一些细微的区别?我一直认为条件运算符只是第二个语句的简写版本。如果两者之间没有功能差异,为什么 Perl 会反对第一个语句,而不反对第二个语句?

最佳答案

$ perl -MO=Deparse -e'($foo eq "blah") ? @x = @somearray : @y = ("another","array");'Assignment to both a list and a scalar at -e line 1, near ");"-e had compilation errors.$foo eq 'blah' ? (@x = @somearray) : @y = ('another', 'array');$ perl -MO=Deparse -e'($foo eq "blah") ? @x = @somearray : (@y = ("another","array"));'$foo eq 'blah' ? (@x = @somearray) : (@y = ('another', 'array'));-e syntax OK

请注意括号:?:= 绑定(bind)更紧密。

关于perl - 奇怪的 Perl 条件运算符行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1725174/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com