perl 自定義函式

2021-05-27 11:07:40 字數 1967 閱讀 7893

使用者函式

使用者函式又稱子程式(subroutine),在perl中用下面的結構來定義使用者函式:

sub 子程式名

這裡的子程式名與變數的取名規則類似。

以顯示歡迎詞的程式為例:

sub say_hello

使用者函式的定義可以位於程式的任何位置,比如說放在檔案的未尾。如果兩個子程式使用了相同的程式名, 後面的子程式將覆蓋前面子程式。

使用者函式中的變數預設為全域性變數,與其他程式共享。

使用者函式的呼叫:通過在子程式前加「&」呼叫,可在任一表示式內呼叫。 子程式中可以再呼叫另外的子程式。

呼叫使用者函式產生的結果稱為返回值(return value)。返回值是每次呼叫函式中最後乙個表示式的計算值。 以加法函式為例:

sub add_a_b

函式最後一條表示式為$a+$b,故返回值為$a+$b。以下是呼叫情況:

$a=5;

$b=6;

$c=&add_a_b; #$c的值為11

$d=5*&add_a_b; #$d的值為5*11即55

上述的函式功能與傳統直接寫在程式中沒什麼兩樣,如果加上引數傳遞就可以實現全新的功能了。 在perl中,如果函式呼叫後面跟著乙個用括號括起來的列表,則在函式呼叫期間該列表將被自動分配給以@_命名的特殊變數。 函式可以訪問該變數,從而確定引數的個數及賦值。

仍以加法函式為例:

sub add_a_b

$c=&add_a_b(5,6); #$c的值為11

$d=5*&add_a_b(2,3); #d的值為5*5即25

如何改變引數的個數呢?我們可以用迴圈的方式來實現:

sub add_all

$sum; #返回sum即總和的值

}$a=&add_all(3,4,5); #$a的值為3+4+5即12

$d=2*&add_all(1,2,3,4,5); #d的值為2*15即30

既然函式中的變數全為全程變數,那麼上述程式中若呼叫程式中含有$sum變數時將替換,這不是我們所要的。 那麼如何解決這一問題呢?

答案就是:使用區域性變數, 使用local()操作符就可實現此功能。在上面的程式中,只需在第一行$sum=0;前加入:

local($sum);

當函式執行時,$sum的全程變數的值被保留起來,同時建立乙個區域性變數$sum,退出函式add_all後將全程變數$sum的值恢復。如:

sub add_all

$sum; #返回sum即總和的值

}$sum=88; #$sum的原始值為88

print $sum; #顯示$sum的值即88

$a=&add_all(3,4,5); #$a的值為3+4+5即12

print $sum; #顯示$sum的值仍為88

比較:若未加入local($sum);行,最後一行的執行結果將為12。

下面再舉一例:計算十以內的加法,並以中文形式輸出。當超過十時輸出阿拉伯數字。如:輸入兩個數字,顯示「一加二等於三」。程式如下:

#/! /usr/bin/perl

sub cnumber

#主程式

print "請輸入乙個數:"

chop($num1=); 

print "請再輸入乙個數:"

chop($num2=); 

$msg=&chinese($num1)."加".&chinese($num2)."等於".

&chinese($num1+num2)."。\n"

print $msg; #列印$msg的值

其中$chinese($number)||number; 行的初級寫法為:

if ($chinese(number) else  

看看執行結果:輸入2,3,顯示:"二加三等於五。";輸入3,12,顯示:"三加12等於15。"

Perl語言入門 08 自定義函式

由於公司需要,本人最近在學習perl這種指令碼語言,本文是我在學習perl的過程中總結出來的一些心得和筆記,希望能夠幫助也在學習perl的各位同僚。廢話不多說直接上乾貨!乾貨分割線 pe r l中,使用者定義的函式稱為子例程.子例程可以在任何位置被呼叫,包括在其他子例程中呼叫.建立函式 sub 函式...

自定義函式 Excel之自定義函式

在excel中,當系統函式不能滿足我們的需求時候,我們可以使用vba自定義函式,如抓取網頁資料,翻譯詞彙,手機號歸屬地查詢等。下面將介紹2個自定義函式,idymd函式 身份證年月日性別 通過身份證號,返回性別,出生年月日。語法 idymd id 引數 id,身份證號,預設身份證長度18位。vba 如...

perl自定義模組的呼叫!

週末沒事,看了下perl的書,剛開始不是很理解perl的自定義模組呼叫。剛弄明白,順便記錄下來!1 usr bin perl 2 push inc,pwd 3 use cocoa 4 cup new cocoa 第一行指出perl直譯器的位置,第二行中,將當前目錄加到路徑尋找列表 inc中供尋找包時...