perl: 函數和排序

來源:互聯網
上載者:User

標籤: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;

perl: 函數和排序

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.