1

我在一本书中遇到过一段代码,如下所示:

#for (some_condition) {
#do something not particularly related to the question
$var = $anotherVar+1, next if #some other condition with $var
#}

我不知道$anotherVar+1next之前的逗号 (",") 有什么作用。这种语法结构是如何调用的,它是否正确?

4

3 回答 3

5

逗号运算符在perlop中描述。您可以使用它来分隔命令,它首先评估其左操作数,然后评估第二个操作数。在这种情况下,第二个操作数是改变程序流程的下一个操作数。

基本上,这是一种较短的写作方式

if ($var eq "...") {
    $var = $anotherVar + 1;
    next
}

逗号可以在 C 中以类似的方式使用,您可以在 for 循环中经常找到它:

for (i = 0, j = 10; i < 10; i++, j--)
于 2020-01-29T20:14:32.020 回答
3

在任何情况下,逗号都是运算符。在通常看到的列表上下文中,这是将值连接到列表中的一种方法。在这里,它在标量上下文中使用,它运行前面的表达式、后面的表达式,然后返回下面的表达式。当它不是参数分隔符时,这是它在 C 和类似语言中的工作方式的保留;请参阅https://docs.microsoft.com/en-us/cpp/cpp/comma-operator?view=vs-2019

my @stuff = ('a', 'b'); # comma in list context, forms a list and assigns it
my $stuff = ('a', 'b'); # comma in scalar context, assigns "b"
my $stuff = 'a', 'b'; # assignment has higher precedence
                      # assignment done first then comma operator evaluated in greater context
于 2020-01-29T20:12:06.530 回答
2

考虑以下代码:

$x=1;
$y=1;

$x++ , $y++ if 0; # note the comma! both x and y are one statement
print "With comma: $x $y\n";

$x=1;
$y=1;

$x++ ; $y++ if 0; # note the semicolon! so two separate statements

print "With semicolon: $x $y\n";

输出如下:

With comma: 1 1
With semicolon: 2 1

逗号类似于分号,只是命令的两边都被视为单个语句。这意味着在只需要一个语句的情况下,逗号的两边都会被计算。

于 2020-02-01T17:30:54.173 回答