$a
ve $b
muaf genel değişkenlerdir; Perl'in, ilan edilmeksizin (her yerde) kullanılmasına izin vermesinden muaftırlar. Sıralama işlevi tarafından ayarlanır. Tasnif edilmemiş herhangi bir globalin (sıkı modda) kullanılması, bir hatayı tetikleyecektir.
Sıralama işlevi, atıfta bulunduğunuz form olan bir kod bloğu olan çeşitli girdi formlarını kabul eder.
{$a cmp $b}
o ayrıştırılır ve sıralama işlevi bir "kod yığın" olarak geçirilir, bir kod bloğudur, ve Perl tür argümanlarını kontrol eder ve bir kod bloğu alırsa, sıralama
$a
ve
$b
, eğer ayarlayacaktır kod bloğu içinde paket globals olarak bulunurlar ve her bir öğe çiftinin
$a
ve
$b
'a ayrılmasını sağlar. Tek yapmanız gereken sıralama algoritmasını kontrol etmek için onlara bakmaktır. Aksi takdirde, dahili algoritma kullanılır (bence sıralama birleşimidir).
http://perldoc.perl.org/functions/sort.html
$a
ve $b
onlar paket globaller (veya sadece globaller) vardır, lexicals değildir.
bir ana olarak yazabilirsiniz:
sort {$main::a cmp $main::b} @list;
Veya başka pakette
, yazabilirsiniz: Aslında böyle bir ön ek olmamalıdır
package foo;
sort {$foo::a cmp $foo::b} @list;
; Şu anki paketinizde $a
ve $b
'un aslında globals olduğunu ve Perl'in sıkı bir modda bile tanımlamanıza izin vereceğini bilmesine rağmen, sıralama işlevinde bazı sihirli $a
olmadığını gösteriyorum.
Herhangi bir değişken (katı modda) kullanamazsınız. Deneyin: Sen tür kapsamındaki bir sözcük (benim $ a) kullanamazsınız
sort {$A cmp $B} @list;
Global symbol "$A" requires explicit package name at sort.pl
.
my $a;
sort {$a cmp $b} @list;
Can't use "my $a" in sort comparison at sort.pl line 13.
$a
ve $b
özeldir Perl yerde. Bunlar, sıralama ile ilgisiz olan sıkı moddan muaftırlar, ancak muafiyetin nedeni sort
idi.
'perldoc strict' konumundan:' sort() tarafından özel kullanımlarından dolayı $ a ve $ b değişkenleri bu denetimden muaf tutulur. – toolic
$ a ve $ b kırmızı kutularda öğelerdir. http://en.wikipedia.org/wiki/Merge_sort#mediaviewer/File:Merge-sort-example-300px.gif –