Perl究竟如何处理运算符链接?
所以我有一些不起作用的代码:
print $userInput."n" x $userInput2; #$userInput = string & $userInput2 is a integer 如果数字当然超过0,它会打印出来一次就好了,但是如果数字大于1,它就不会打印出来.我来自java背景,我认为它首先进行连接,然后是结果将是与x运算符相乘的结果.但当然不会发生这种情况.现在它在我执行以下操作时有效: $userInput .= "n"; print $userInput x $userInput2; 我是Perl的新手所以我想知道链接到底发生了什么,如果我能做到的话. 解决方法
你问的是操作符优先权. (“链接”通常是指方法调用的链接,例如$obj-> foo-> bar-> baz.)
Perl文档页面perlop以优先级顺序的所有运算符列表开始. x具有与其他乘法运算符相同的优先级,并且.与其他加法运算符具有相同的优先级,因此当然首先计算x. (即,它“具有更高的优先级”或“更紧密地绑定”.) 与在Java中一样,您可以使用括号解决此问题: print(($userInput . "n") x $userInput2); 请注意,这里需要两对括号.如果您只使用内括号,Perl会将它们视为指示要打印的参数,如下所示: # THIS DOESN'T WORK print($userInput . "n") x $userInput2; 这将打印一次字符串,然后重复打印的返回值一定次数.在前面放置空格(没有帮助,因为空格通常是可选的并且被忽略.在某种程度上,这是运算符优先级的另一种形式:函数调用绑定比其他任何东西更紧密. 如果你真的讨厌有更多括号而不是严格必要,你可以用一元运算符击败Perl: print +($userInput . "n") x $userInput2; 这将打印与()分开,因此Perl知道该行的其余部分是单个表达式.一元没有任何效果;它的主要用途就是这种情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |