我对Perl语言很陌生,在我使用的代码中有以下一行:
$BASEDIR = &getcwd();我想知道为什么在调用getcwd之前有一个getcwd,而且我找不到任何关于它的参考。有人能帮我吗?
非常感谢!
发布于 2019-11-08 08:57:19
它导致子程序的原型被忽略。
$ perl -e'
sub f($@) { print("@_\n"); }
my @a = (4,5,6);
f(4,5,6);
f(@a);
&f(@a);
'
4 5 6
3
4 5 6但这可能不是这里使用它的原因。毕竟,Cwd::getcwd没有一个原型。&不能用于命名操作符(例如,[医]漏斗的函数,例如print),因此一些初学者在子程序中使用它来区分它们和操作符。我相信这是一本流行的Perl书推荐的实践。
发布于 2019-11-08 09:02:15
简单地说,它是可选的,除非您运行的是一个非常旧的perl版本。
有关更多细节,请参见perlsub手册页(根据环境运行perldoc perlsub或man perlsub )。
可以使用显式的"&“前缀调用子例程。在现代Perl中,"&“是可选的,如果子例程已经预先声明,那么括号也是可选的。当仅仅命名子例程时,"&“不是可选的,例如当它被用作定义()或undef()的参数时。如果您希望使用"&$subref()“或"&{$subref}()”构造来执行带有子例程名称或引用的间接子例程调用,也不是可选的,尽管"$subref->()“表示法解决了这个问题。有关这一切的更多信息,请参见perlref。
https://stackoverflow.com/questions/58763156
复制相似问题