perl: 函数和排序

函数(子程序):

Perl中的函数括号可以写也可以不写,除非不写影响含义。

 

自定义子程序:

sub    function-name{

    expressions;

}

 

子程序的返回值:

所有perl子程序都有返回值,子程序中最后一个语句运算结果默认是程序的返回值。

return操作符会从子程序立即返回某个值。

 

子程序参数:

给子程序传参数只需要在调用子程序时在子程序后面加上圆括号和参数就可以了。

perl将参数列表存放在   @_   这个特殊数组变量中,子程序获取整个变量得到参数个数和参数值。

这个特殊的数组变量只在子程序执行期间有效。在子程序中使用$_[n]表示每个参数的值。

@_  是子程序的私有变量,每个子程序都有一个自己的@_。

 

子程序的私有参数:

Perl中默认的变量都是全局变量。

可以使用my操作符来创建私有的词法变量和数组(其实拥有列表的值)。

my    arg1, arg2;    #my只能私有一个变量arg1,arg2不会被私有化。

my  (arg1, arg2);    #使用括号可以同时私有括号内的变量。

私有变量和数组只在当前的块(子程序,控制流等)中有效。

词法变量不能保留变量的值。

建议所有参数的第一次出现都使用my

my ($arg1, $arg2, …);

($arg1, $arg2, …) = @_;

等效于:

my(arg1, arg2, …) = @_;      #直接创建私有变量并赋值。

 

长参数列表:

sub    function {

    If (@_ != 2) {

        Print “Warning!  The argument is wrong.\n”;

}

 

持久性私有变量:

使用my申明的词法变量不能保存变量的值,而且每次调用这个词法变量都可能被赋予不同的值。

使用state申明变量,这个变量还是私有变量,但是可以在子程序多次调用期间保留变量的值。

state   $arg/@arr;

 

调用子程序:

如果子程序的定义在调用之前可以写成可以像调用内置函数一样:

function    arg1, arg2;

建议所有子程序调用都使用&参数用括号:

&function(arg1, arg2, …);

如果自定义字函数和内置函数同名使用&调用的是自定义函数,不使用&调用的是内置函数。

 

--------------------------------------------------

排序子函数:

 

数字排序

sub   by_number {$a <=> $b}

my @result = sort   by_number @numbers;

等效于:

my @result = sort {$a<=> $b} @numbers;    #从小到大排序

my @result = reverse sort{$a<=> $b} @numbers;    #从大到小排序

my @result = sort{$b<=> $a} @numbers;    #从大到小排序

 

字符串排序

sub   ASCIIbeticaly {$a cmp $b }

sort    ASCIIbetically    @strings;

 

转换成小写字母排序

sub    case_insensitive { “\L$a” cmp “\L$b” }

sort    case_insensitive    @strings;

 

哈希值排序:

sub    by_value{ $hash{$b} <=>$hash{$a}}    #哈希的值从大到小排序。

my   @result = sort by_value keys %hash;

foreach   my  $keys   (@result){

    print “$keys => $score{$keys}\n”;

}

 

sub   by_value_and_key{

    $hash{$b} <=> $hash{$a}

        or

   $a cmp $b

}

my @result = sortby_value_and_key keys %hash;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值