Perl的“sort()”函数中的“$a”和“$b”究竟是什么?

前端之家收集整理的这篇文章主要介绍了Perl的“sort()”函数中的“$a”和“$b”究竟是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我了解如何使用Perl的sort()函数获取我想要的结果,这更多的是关于sort()的内部运算的问题.

“$a”和“$b”变量来自哪里?我阅读了关于排序的文件,似乎不清楚.什么是“$a”和“$b”,什么使他们特别?

例如:

my @sorted_list = sort {$a cmp $b} @unsorted_list;

“$a”和“$b”怎么样,为什么你不会得到“$a”或“$b”的“全局符号需要显式包名称错误

解决方法

$a和$b是免除全局变量;它们是免除的,因为Perl允许它们被使用(任何地方)而不被声明.它们由排序函数设置.在排序(严格模式)中使用任何其他未声明的全局将触发错误.

排序函数接受各种形式的输入,一个是代码块,这是您所指的形式.

{$a cmp $b}是一个代码块,它被解析并作为“块代码”传递给排序函数,Perl检查参数进行排序,如果它接收到代码块,sort将设置$a和$b,如果它们作为代码块中的包全局变量存在,并且将分配给$a和$b的每对项目分配.所有你需要做的是指他们来控制排序算法.否则,使用内部算法(我认为是合并排序).

http://perldoc.perl.org/functions/sort.html

$a和$b不是词法,它们是包全局变量(或全局变量).

主要可以写:

sort {$main::a cmp $main::b} @list;

或者在另一个包中,你可以写:

package foo;

sort {$foo::a cmp $foo::b} @list;

你不应该这样实际前缀我正在演示$a和$b实际上是您当前包中的全局变量,而不是一些魔术$a在排序函数中,尽管Perl知道允许您使用严格模式来定义它们.

您不能只使用任何变量(严格模式).尝试:

sort {$A cmp $B} @list;

Global symbol "$A" requires explicit package name at sort.pl

您不能在排序范围内使用词汇(我的$a).

my $a;
sort {$a cmp $b} @list;

Can't use "my $a" in sort comparison at sort.pl line 13.

Perl中的$a和$b是特殊的.他们是免除严格的模式,这是无关的排序,虽然排序是免除的原因.

原文链接:https://www.f2er.com/Perl/171553.html

猜你在找的Perl相关文章