我构建了一个简单的子程序,我对是否需要括号进行调用有疑问。
#!/usr/bin/perl
sub echo {
print "@_ \n" ;
}
echo(@ARGV);
当我使用
时echo @ARGV
或
echo (@ARGV)
或(没有空格)
echo(@ARGV)
他们都工作了。哪一个是正确的?
答案 0 :(得分:4)
echo @ARGV
,echo (@ARGV)
和echo(@ARGV)
在技术上全部正确,但使用括号是 有时必要;除此之外,它是一个选择问题,有些人在使用什么样式时会使用约定。
将整个参数列表括在括号中总是有效 - 是否空格位于左括号之前 - echo (@ARGV)
或echo(@ARGV)
- 以及是否'重新调用内置或用户定义的函数(子例程):
perldoc perlstyle
建议在函数名称和(
- echo(@ARGV)
之间使用否空格。print (1 + 2) + 4
仅打印3
,因为(1 + 2)
被解释为整个参数列表(+ 4
添加到表达式值print
调用,其结果未输出。)print((1 + 2) + 4)
解决了歧义并打印7
。+
前缀以达到相同的效果:print +(1 + 2) + 4
也会打印7
。 不使用括号 - echo @ARGV
- 有效:
sub <name>;
。use
的模块导入 (require
是不够的。)&echo @ARGV
原则上工作,它绕过任何原型(参数类型的一种形式),该函数可能声明)。至于惯例:
答案 1 :(得分:1)
parens是可选的。在某些情况下,您需要它们来显式显示哪些值是函数的参数,例如,在将函数调用的结果传递给另一个函数时:
myfunc(1, 2, otherfunc(3), "z");
如果没有围绕3的parens,otherfunc
将同时收到3和&#34; z&#34;作为论点。
正如xxfelixxx所提到的,最好一直使用它们。