本代码将一个list的指针和一个标量传入perl 子例程中,完成排序后输出。
perl的指针可以直接看做是一个标量,在使用时,表明以什么方式解析此指针即可(list, scalar 还是 hash):
#! perl
# author : ez
# date : 2015/7/2
# describe : ...
use strict;
use warnings;
sub sort_order ($$) {
my ($array_ptr, $desc) = (shift, shift);
my @res = undef;
if ($desc) {
@res = sort {$b <=> $a} @$array_ptr;
} else {
@res = sort {$a <=> $b} @$array_ptr;
}
print "@res ";
}
sub main {
sort_order ([0x13, 0x18, 0x14, 0x19, 0x20, 0x0, 0x28, 0x15, 0x21,
0x29, 0x32, 0x16, 0x17, 0x1, 0x30, 0x26, 0x24, 0x25,
0x11, 0x33, 0x24, 0x5, 0x7, 0x31, 0x3, 0x27, 0x2], 1);
}
&main;
当调用sort_order 时,创建了一个匿名的list,用 [] 进行定义,随后又传入一个标量,这样可以看做子例程需要传入两个标量。
之后通过判断$desc 的值确定是进行正序排序还是逆序排序。
此处sort 函数的使用可以 sort subroutine list
{} 定义了一个匿名子例程的指针,用于描述两个数据之间的判断方法,$b , $a 是匿名子例程的局部变量。