我试图对函数的结果进行排序,如sort func();
因为没有返回任何内容,因此被烧毁了。我猜 Perl 认为函数调用是一个排序例程,后面没有数据。
Perldoc 说第二个参数可以是子例程名称或代码块。我将 func() 视为调用,而不是名称。我认为这根本不是 DWIMMY。
为了进一步探索它是如何工作的,我写了这个:
use strict;
use warnings;
sub func {
return qw/ c b a /;
}
my @a;
@a = sort func();
print "1. sort func(): @a\n";
@a = sort &func;
print "2. sort &func: @a\n";
@a = sort +func();
print "3. sort +func(): @a\n";
@a = sort (func());
print "4. sort (func()): @a\n";
@a = sort func;
print "5. sort func: @a\n";
输出,没有产生警告:
1. sort func():
2. sort &func: a b c
3. sort +func(): a b c
4. sort (func()): a b c
5. sort func: func
第 1 号是吸引我的行为 - 没有输出。
我很惊讶 2 有效,而 1 无效。我以为他们是等价的。
我理解 3 和 4,我用 4 来解决我的问题。
我真的对 5 感到困惑,特别是考虑到没有警告。
有人能解释一下 1 和 2 有什么区别,为什么 5 输出函数的名称吗?