尝试了解Perl排序函数的结果
发布时间:2020-12-15 21:14:47 所属栏目:大数据 来源:网络整理
导读:我正在尝试排序一个函数的结果,如排序func();被烧了,因为没有回来.我猜Perl认为函数调用是一个排序例程,后面没有数据. Perldoc表示第二个参数可以是子程序名称或代码块.我看到func()作为一个调用,而不是一个名字.我根本不认为这是DWIMMY. 为了进一步探索如何
我正在尝试排序一个函数的结果,如排序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(): @an"; @a = sort &func; print "2. sort &func: @an"; @a = sort +func(); print "3. sort +func(): @an"; @a = sort (func()); print "4. sort (func()): @an"; @a = sort func; print "5. sort func: @an"; 输出,没有生成警告: 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输出函数的名称? 解决方法
将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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |