通過原型定義程式設計師自己的函式,可以像perl內建函式一樣呼叫自己的函式。
原型對引數的個數,引數的型別等做各種約束。使用原型定義函式,函式更安全更好用。
下面是本人對函式原型的理解,僅供交流學習。
按照基本方式定義mypush
子例程
sub mypush
呼叫mypush @array, $item;
,
如果子例程傳入的第乙個引數是陣列@,則不管之後有多少實參,此刻都是列表上下文,所有引數組成乙個列表,子例程得到乙個新列表[@array, $item, ...]
,這無法對@array
修改,因此必須傳入乙個陣列引用才可以,我們優化mypush
函式。
優化的mypush
函式
sub mypush
現在呼叫mypush \@array, $item;
,用反斜線\
傳入陣列的引用,mypush
可以對陣列進行修改。然而每次呼叫都需要反斜線引用。
用原型定義mypush
sub mypush (+@)
$scalar
@$ref;
}
使用+@
定義mypush,現在呼叫mypush @array, $item;
mypush \@array, $itme1, $item2;
mypush @array, $item1, $item2;
都能對@array
修改增加元素,且原型能對引數進行型別檢測。
通過使用原型定義的子例程,按規則對引數進行增強或者約束,這就是原型的作用。
使用原型宣告子例程的格式為
sub func (+@)
原型的種類有如下幾種
\ ## 提供引用
$ ## 標量上下文
@ ## array,列表上下文
% ## hash,列表上下文
## 多選一,和在正規表示式中一樣
; ## 必選引數和可選引數的分隔符
_## 原型的最後乙個字元或分號前的字元可用_代替$,如果沒有提供該引數,預設讀入當前$_
& ## 要求引數為\&foo或sub{},作為第乙個引數時,可省略sub
+ ## 是$的特殊代替選項;可接受直接量陣列、雜湊,將其解析為引用;也可接受陣列、雜湊的引用
* ## 可接受檔案控制代碼引數,包括裸名、常量、標量表示式、型別團和型別團的引用
宣告
呼叫理解
sub mylink ($$)
mylink $old, $new
將引數解析為在標量上下文中的值,兩個值
sub myreverse (@)
myreverse $a,$b,$c
將引數解析為list,提供列表上下文環境
sub myjoin ($@)
myjoin 「:」,$a,$b,$c
第乙個引數解析為標量值,其他引數解析為list
sub mypop (;+)
mypop @array
沒有必要引數,可選引數為』+』能接受的所有值
sub mysplice (+;$$@)
mysplice @array,@array,0,@pushme
必要引數解析為\@array
,可選引數解析為scalar @array, 0, @alist
sub mykeys (+)
mykeys %
『+』標量值解析為標量值,陣列或雜湊解析為引用
sub mypipe (**)
mypipe readhandle, writehandle
將引數解析為檔案控制代碼
sub myindex ($$;$)
myindex &getstring, 「substr」
&getstring
解析為標量上下文中的返回值,其他選項解析為標量
-myindex &getstring, 「substr」, $start
sub mysyswrite (*$;$$)
mysyswrite outf, $buf
必要選項解析為檔案控制代碼和標量值
-mysyswrite outf, $buf, length($buf)–$off, $off
可選選項解析為標量值
sub myopen (*;$@)
myopen handle--
myopen handle, $name
-myopen handle, 「–|」, @cmd
sub mysin (_)
mysyn $a
最後乙個$字元,可改寫為_,$a解析為正常標量
-mysyn
沒有實參時,函式內預設使用當前$_作為_位置的引數
sub mygrep (&@)
mygrep $a,$b,$c
解析為函式引用,解析為list
sub myrand ($)
myrand 42
sub mytime ()
mytime
無引數的函式
perl內建變數
以下為個人所知的perl內建變數,如有缺,請發帖新增 當前頁可列印的行數,屬於perl格式系統的一部分 根據上下文內容返回錯誤號或者錯誤串 列表分隔符 列印數字時預設的數字輸出格式 perl直譯器的程序id 當前輸出通道的當前頁號 與上個格式匹配的字串 當前程序的組id 當前程序的有效組id 設定1...
Perl 內建變數
當前頁可列印的行數,屬於perl格式系統的一部分 根據上下文內容返回錯誤號或者錯誤串 列表分隔符 列印數字時預設的數字輸出格式 perl直譯器的程序id 當前輸出通道的當前頁號 與上個格式匹配的字串 當前程序的組id 當前程序的有效組id 設定1表示處理多行格式.現在多以 s和 m修飾符取代之.當前...
PERL 內建變數
use vars qw myconfig myconfig config file name default config 其中 qw含義見下表所示 perl 的內建特殊變數 還有很多的,例如常用的還有 ar ar inc env 等等,有很多,不可能一一枚舉了,這裡給出乙個比較有 總結性的列表,是...