gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:03:19 24 4
gpt4 key购买 nike

在我的 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/

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