perl - 为什么打印语句的行为顺序相反?

标签 perl

在我的 perl 程序中,我有以下代码:

@alpha=('toM','jERRy','mickeY','MARio');
print sort{$a cmp $b} @alpha,'  "***MIDDLE STRING***"  ';

在这里它打印

' "***MIDDLE STRING***" '



首先是排序的@alpha 列表。为什么它以相反的顺序打印,当
print "a","b";

打印

ab



以正确的顺序。我在谷歌上搜索了帮助,但它谈到了 perl 的“反向”函数/方法,但我没有在我的代码中使用该函数。我发现答案无关紧要。

我想它使用“堆栈”数据结构处理“打印”函数的内部工作,但我不知道。有人帮帮我。

提前致谢...

最佳答案

print sort {$a cmp $b} @alpha,'  "***MIDDLE STRING***"  ';      #1
print sort {$a cmp $b} (@alpha,'  "***MIDDLE STRING***"  ');    #2

print (sort {$a cmp $b} @alpha), '  "***MIDDLE STRING***"  ';   #3
(print sort {$a cmp $b} @alpha), '  "***MIDDLE STRING***"  ';   #4

print ((sort {$a cmp $b} @alpha), '  "***MIDDLE STRING***"  '); #5

print sort {$a cmp $b} @alpha;                                  #6
print '  "***MIDDLE STRING***"  ';

print sort(@alpha), '  "***MIDDLE STRING***"  ';                #7
print sort({$a cmp $b} @alpha), '  "***MIDDLE STRING***"  ';    #8

#1 和 #2 是等价的:sort正在对包含 @alpha 的所有元素的列表进行操作加上字符串,这要归功于 Perl 的列表自动展平。您可能想在 sort 周围添加一些括号。 (#3),但这也无济于事,因为它被解释为两个元素的列表(#4):调用 print 的结果, 和字符串。因此该字符串不会被打印,因为它与 print 无关。 .

您可以使用一组额外的括号 (#5) 或将其拆分 (#6),但要知道 sort {$a cmp $b} @alphasort @alpha 相同,您可以省略块,括号变得简单(#7)。按照同样的规则,如果你确实需要一个比较函数,你可以把两个参数都放在 sort 中。在括号内,不以逗号分隔 (#8)。

我还喜欢为不同类型的排序定义 subs,以使代码更易于阅读:
sub numerically { $a <=> $b }
sub backward { $b cmp $a }

print sort(numerically @array);    # Sort numerically ascending.
print sort(backward @array);       # Sort lexicographically descending.

关于perl - 为什么打印语句的行为顺序相反?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029947/

相关文章:

perl - 如何在 Perl 中将数字转换为文本?

linux - Perl Cron Jobs = 高服务器负载?

perl - 覆盖类的 "is"属性(Moose)

perl - 在perl中随机化矩阵,保持行和列的总数相同

perl - 如何在没有 apache 的情况下运行我的 perl CGI 脚本?

perl - yt-dlp 获取仅音频链接 -> ffmpeg 管道音频 -> ffplay

xml - perl - 从 xml 文件中删除节点

perl - 如何使用 https 和 perl Dancer 将我的服务器设置为独立服务器?

regex - 无法识别的转义\m 在 PERL 的正则表达式错误中通过

string - 我可以在 Perl 5 中为字符串创建文件句柄,我如何在 Perl 6 中做到这一点?