我正在尝试排序一个函数的结果,如排序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,特别是没有警告.
解决方法
将func()分析为sort func(),即使用例程功能对空列表[()]进行排序.
并且#5解析为sort(“func”),排序包含(bareword)字符串func的列表.也许这里应该有一个警告,但没有.
分离输出:
$perl -MO=Deparse -e '@a1 = sort func();' -e '@a2=sort &func;' \ -e '@a3=sort +func();' -e '@a4=sort (func());' -e '@a5=sort func;' @a1 = (sort func ()); @a2 = sort(&func); @a3 = sort(func()); @a4 = sort(func()); @a5 = sort('func'); -e Syntax OK