我在一本书中遇到过一段代码,如下所示:
#for (some_condition) {
#do something not particularly related to the question
$var = $anotherVar+1, next if #some other condition with $var
#}
我不知道$anotherVar+1和next之前的逗号 (",") 有什么作用。这种语法结构是如何调用的,它是否正确?
在任何情况下,逗号都是运算符。在通常看到的列表上下文中,这是将值连接到列表中的一种方法。在这里,它在标量上下文中使用,它运行前面的表达式、后面的表达式,然后返回下面的表达式。当它不是参数分隔符时,这是它在 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
考虑以下代码:
$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
逗号类似于分号,只是命令的两边都被视为单个语句。这意味着在只需要一个语句的情况下,逗号的两边都会被计算。