【发布时间】:2013-06-26 14:30:24
【问题描述】:
我试图对函数的结果进行排序,如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 输出函数的名称?
【问题讨论】:
-
两个很好的答案,希望我能同时选择。谢谢!
标签: perl