gpt4 book ai didi

perl - Perl 究竟是如何处理运算符链的?

转载 作者:行者123 更新时间:2023-12-04 21:58:34 28 4
gpt4 key购买 nike

所以我有这段代码不起作用:

print $userInput."\n" x $userInput2; #$userInput = string & $userInput2 is a integer

如果数字超过 0,它会打印一次,但如果数字大于 1,它不会打印出其余部分。我来自 java 背景,我假设它首先进行连接,然后结果将是与 x 相乘的结果。运算符(operator)。当然,这不会发生。现在,当我执行以下操作时它可以工作:
$userInput .= "\n";
print $userInput x $userInput2;

我是 Perl 的新手,所以我想确切地了解链接是怎么回事,如果我能做到的话。

最佳答案

您在询问运算符优先级。 (“链接”通常是指方法调用的链接,例如 $obj->foo->bar->baz。)

Perl 文档页面 perlop从所有运算符的列表开始,按优先级顺序排列。 x与其他乘法运算符具有相同的优先级,.与其他加法运算符具有相同的优先级,所以当然是 x首先被评估。 (即,它“具有更高的优先级”或“绑定(bind)更紧密”。)

与在 Java 中一样,您可以使用括号解决此问题:

print(($userInput . "\n") x $userInput2);

请注意,这里需要两对括号。如果您只使用了内括号,Perl 会将它们视为指示 print 的参数。 , 像这样:
# THIS DOESN'T WORK
print($userInput . "\n") x $userInput2;

这将打印一次字符串,然后复制 print的返回值若干次。在 ( 之前放置空格没有帮助,因为空格通常是可选的并且被忽略。在某种程度上,这是运算符优先级的另一种形式:函数调用比其他任何东西都绑定(bind)得更紧密。

如果你真的讨厌有比绝对必要的更多的括号,你可以用一元 + 打败 Perl运算符(operator):
print +($userInput . "\n") x $userInput2;

这将 print 分开来自 ( ,所以 Perl 知道该行的其余部分是一个表达式。一元 +没有任何作用;它的主要用途正是这种情况。

关于perl - Perl 究竟是如何处理运算符链的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15182925/

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