我建立了一个简单的子程序,并且我有一个关于是否需要括号的问题。Perl子程序 - 它们是否需要用圆括号调用?
#!/usr/bin/perl
sub echo {
print "@_ \n" ;
}
echo(@ARGV);
当我使用
echo @ARGV
或
echo (@ARGV)
或(无空格)
echo(@ARGV)
他们所有的工作。哪一个是正确的?
我建立了一个简单的子程序,并且我有一个关于是否需要括号的问题。Perl子程序 - 它们是否需要用圆括号调用?
#!/usr/bin/perl
sub echo {
print "@_ \n" ;
}
echo(@ARGV);
当我使用
echo @ARGV
或
echo (@ARGV)
或(无空格)
echo(@ARGV)
他们所有的工作。哪一个是正确的?
parens是可选的。你需要他们在某些情况下,以明确显示其值是函数的自变量,例如,传递结果时,一个函数调用另一个函数:
myfunc(1, 2, otherfunc(3), "z");
如果没有括号的3左右,otherfunc
将同时接收3和“z”作为参数。
正如xxfelixxx提到的那样,最好始终使用它们。
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
工作,它绕过了函数可能声明的任何原型(参数类型的一种形式))。至于约定:
[TMTOWTDI](https://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it)? –
'perldoc perlstyle'建议'函数名和它的左括号之间没有空格。“使用括号表明它是用户定义的函数,而不是内置函数。 – xxfelixxx
@xxfelixxx:良好的信息空间,但要清楚:我假设你建议采用_convention_来调用所有用户定义的函数_with_小括号和内置_without_(但是,技术上,可以调用内置函数_can_ _with_小括号和用户定义的函数_can_可以被调用_without_括号,如果预先声明的话)。 – mklement0