Perl教學(xué)(14)Perl5的包與模塊之一
發(fā)表時(shí)間:2024-06-11 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一、require函數(shù)用require函數(shù)可以把程序分割成多個(gè)文件并創(chuàng)建函數(shù)庫(kù)。例如,在myfile.pl中有定義好的Perl函數(shù),可用語(yǔ)句require ("myfile.pl"); 在程序中包含進(jìn)來(lái)。當(dāng)Perl解釋器看到這一語(yǔ)句,就在內(nèi)置數(shù)組變量@INC指定的目錄中尋找文件...
一、require函數(shù)
用require函數(shù)可以把程序分割成多個(gè)文件并創(chuàng)建函數(shù)庫(kù)。例如,在myfile.pl中有定義好的Perl函數(shù),可用語(yǔ)句require ("myfile.pl"); 在程序中包含進(jìn)來(lái)。當(dāng)Perl解釋器看到這一語(yǔ)句,就在內(nèi)置數(shù)組變量@INC指定的目錄中尋找文件myfile.pl。如果找到了,該文件中的語(yǔ)句就被執(zhí)行,否則程序終止并輸出錯(cuò)誤信息:
Can't find myfile.pl in @INC
作為子程序調(diào)用參數(shù),文件中最后一個(gè)表達(dá)式的值成為返回值,require函數(shù)查看其是否為零,若為零則終止。例如myfile.pl最后的語(yǔ)句是:
print ("hello, world!\n");
$var = 0;
因?yàn)樽詈蟮恼Z(yǔ)句值為零,Perl解釋器輸出下列錯(cuò)誤信息并推出:
myfile.pl did not reture true value
可以用簡(jiǎn)單變量或數(shù)組元素等向require傳遞參數(shù),如:
@reqlist = ("file1.pl", "file2.pl", "file3.pl");
require ($reqlist[$0]);
require ($reqlist[$1]);
require ($reqlist[$2]);
還可以不指定文件名,即:
require;
這時(shí),變量$_的值即作為文件名傳遞給require。
注:如果@INC中有多個(gè)目錄中含有同一個(gè)文件,則只有第一個(gè)被包含。
1、require函數(shù)和子程序庫(kù)
用require函數(shù)可以創(chuàng)建可用于所有Perl程序的子程序庫(kù),步驟如下:
a、確定存貯子程序庫(kù)的目錄
b、將子程序抽取放到單獨(dú)的文件中,將文件放到子程序庫(kù)目錄
c、每個(gè)文件末尾加一句非零值的語(yǔ)句,最簡(jiǎn)單的辦法是語(yǔ)句 1;
d、在主程序中用require包含一個(gè)或多個(gè)所需的文件。
e、運(yùn)行主程序時(shí),用 -I 選項(xiàng)指定子程序庫(kù)目錄,或者在調(diào)用require前將該目錄添加到@INC數(shù)組中。
例如:假設(shè)目錄/u/perldir中存有你的Perl子程序庫(kù),子程序mysub存貯在文件mysub.pl中,F(xiàn)在來(lái)包含上該文件:
unshift (@INC, "/u/perldir");
require ("mysub.pl");
對(duì)unshift的調(diào)用把目錄/u/perldir添加到@INC數(shù)組,對(duì)require的調(diào)用將mysub.pl文件的內(nèi)容包含進(jìn)來(lái)作為程序的一部分。
注意:
1、應(yīng)該使用unshift來(lái)向@INC中添加目錄,而不是push。因?yàn)閜ush增加到@INC的末尾,則該目錄將被最后搜尋。
2、如果你的庫(kù)文件名與/usr/local/lib/perl中的某文件同名,則不會(huì)被包含進(jìn)來(lái),因?yàn)閞equire只包含同名文件中的第一個(gè)。
2、用require指定Perl版本
Perl 5中,可以用require語(yǔ)句來(lái)指定程序運(yùn)行所需的Perl版本。當(dāng)Perl解釋器看到require后跟著數(shù)字時(shí),則只有其版本高于或等于該數(shù)字時(shí)才運(yùn)行該程序。例如,下面語(yǔ)句表明只有Perl解釋器為5.001版或更高時(shí)才運(yùn)行該程序:
require 5.001;