gpt4 book ai didi

perl - 试图理解 Perl 对函数结果进行排序

转载 作者:行者123 更新时间:2023-12-03 14:45:41 24 4
gpt4 key购买 nike

我试图对函数的结果进行排序,如 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 输出函数的名称吗?

最佳答案

sort func()解析为 sort func () ,即对一个空列表进行排序 [ () ] 与例程 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

关于perl - 试图理解 Perl 对函数结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17322972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com