所以我有一些不起作用的代码:
print $userInput."\n" x $userInput2; #$userInput = string & $userInput2 is a integer
Run Code Online (Sandbox Code Playgroud)
如果数字当然超过0,它会打印出来一次就好了,但是如果数字大于1,它就不会打印出来.我来自java背景,我认为它首先进行连接,然后是结果将是与x运营商相乘的结果.但当然不会发生这种情况.现在它在我执行以下操作时有效:
$userInput .= "\n";
print $userInput x $userInput2;
Run Code Online (Sandbox Code Playgroud)
我是Perl的新手所以我想知道链接到底发生了什么,如果我能做到的话.
你问的是运营商优先权.("链接"通常指方法调用的链接,例如$obj->foo->bar->baz.)
Perl文档页面perlop以优先级顺序的所有运算符列表开始. x具有与其他乘法运算符相同的优先级,并且.具有与其他加法运算符相同的优先级,因此当然x首先进行求值.(即,它"具有更高的优先级"或"更紧密地绑定".)
与在Java中一样,您可以使用括号解决此问题:
print(($userInput . "\n") x $userInput2);
Run Code Online (Sandbox Code Playgroud)
请注意,这里需要两对括号.如果你只使用内括号,Perl会将它们视为指示参数print,如下所示:
# THIS DOESN'T WORK
print($userInput . "\n") x $userInput2;
Run Code Online (Sandbox Code Playgroud)
这将打印一次字符串,然后重复print多次返回值.在空格之前放置空间(没有帮助,因为空格通常是可选的并且被忽略.在某种程度上,这是运算符优先级的另一种形式:函数调用绑定比其他任何东西都紧密.
如果你真的讨厌有更多括号而不是严格必要,你可以用一元运算+符击败Perl :
print +($userInput . "\n") x $userInput2;
Run Code Online (Sandbox Code Playgroud)
这将它print与the 分开(,因此Perl知道该行的其余部分是单个表达式.一元+没有任何影响; 它的主要用途正是这种情况.
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |