1.遞迴
略 2.
作用域規則:全域性、字典和動態的
ø識別符號的「作用域」是指程式中乙個特定的部分。只有在這個部分中,才可對此識別符號進行引用。有的識別符號可在程式中的任何地方引用;另一些則只能在有限的部分才能引用。
ø字典作用域變數,只有在定義他的那個**快中才能使用它。
ø動態作用域變數,只有從它建立位置開始,一直到當前塊結束之前,才可使用它。ø使用
our定義全域性變數;
my定義字典變數;
local
定義動態變數。
ø在子程式中,所有字典和動態變數肯定會「覆蓋」同名的全域性變數,但不是刪除。
ø在子程式中定義的字典變數,只能在這個子程式內訪問,如果在子程式中存在另乙個子程式,那麼這個子程式將不能使用字典變數。但子程式中定義的動態變數,卻可以被使用。
ø假如乙個子程式要求使用來自另乙個子程式的變數來完成任務,那麼應把該變數作為乙個引數明確的傳遞給子程式,而不是把它宣告成全域性變數或動態變數。
3.名字空間、包和模組
perl
利用「包」或「名字空間」來決定變數和子程式識別符號的可訪問性。也可用包來訪問在其他名為「模組」的檔案中定義的識別符號。
在預設情況下,
perl
原始碼檔案中的全域性識別符號(全域性變數和子程式)屬於
main
包的符號表的一部分。
ø可以使用
package
語句對當前包進行修改。ø使用
require
關鍵字可以向程式新增乙個新的包
ørequire
關鍵字首先在當前目錄中查詢新新增的語言包,然後在由陣列
@inc
指定的目錄中查詢。
ø完整的變數名是由包名、::和變數名組成的。如
$firstpackage :: variable
模組模組本質上就是一種「包」,它使程式設計師能更全面的控制模組使用者對那個模組的包內的識別符號進行引用。模組的優點在於:程式設計師可設定乙個識別符號無論如何都可由模組使用者使用——好像這個識別符號本來就是在使用者的程式中定義的那樣。便可在不採用完整形式的前提下,使用其他地方的識別符號。
øuse
和require
語句類似,主要的區別在於:
use是在編譯時匯入模組和包的,
require
是在執行時匯入的。如在編譯時匯入,
perl
保證在程式執行前,便可讓包進入可用狀態,否則的話,可能不能發現包的缺失。
ø在基本的「包」的基礎上,模組還提出了額外的幾項要求。首先,檔案必須有乙個
.pm副檔名。
require
這個關鍵字允許指定其他副檔名,如
.pl。
ø為了能夠從乙個模組匯出識別符號,以便在另乙個檔案的名字空間裡使用。這樣在其他檔案使用識別符號的時候,便不再需要指定完整形式的名字。為了達到這個目的,必須把模組設定成為乙個
exporter
模組。這個
perl
標準模組提供了相應的功能,可匯出識別符號,以便在其他檔案中使用。
use exporter;
它的作用就是指出當前模組使用
exporter
模組。our@isa = qw ( exporter );
它的作用是指出在特殊的內建陣列
@isa
內,包含了
exporter
。換言之,當前模組「就是」(
isa)乙個
exporter
。這樣一來,我們的模組就具有了
exporter
的特性,允許把名字從乙個模組空間匯入其他名字空間。
現在,模組已具有了輸出識別符號的能力。隨後,必須指定要匯出的識別符號。
our @export =qw( @array&greeting );
它可把專案新增到特殊的內建陣列
@export
中。使用這個模組的任何程式都可以直接使用陣列
@array
和子程式
greeting
內的識別符號ø使用
use匯入的模組,在模組的末尾必須增加如下語句
return 1;
表示模組匯入完成。模組的最後一條可執行語句必須是返回真值的乙個語句。
øuse
語句的其他特點:1.在
use後面加上乙個版本號,如下所示:
use v
5.6.0
那麼prel
會把指定的版本號同系統中安裝的
perl
的版本號對比,假如指定的版本號大於當前的版本號,便會產生乙個錯誤。
2.除了能夠匯入乙個完整的模組外,
perl
還允許匯入模組的不同部分。假如為
use提供了乙個引數列表,那麼它只會從模組裡匯入特定的專案。如:
usefirstmodule qw( @array );
上述命令將只匯入
@array
陣列。3.
use關鍵字還有乙個搭檔—
no關鍵字。利用
no關鍵字,程式可明確規定不從乙個名字空間裡匯入指定專案。語法等價於
use。
4.預編譯指令
預編譯指令(
pragmas
)是指一種特殊的語句,編譯器用它來設定自己的編譯選項。
øuse strict
語句:use strict
語句可強迫程式設計師把所有變數都宣告為包變數或字典作用域變數。另外,他也強迫程式設計師用引號把所有字串封閉起來,而且必須明確地呼叫每乙個子程式。
可以向strict
傳遞一些特殊的「標記」引數,從而讓
perl
知道應該去檢查什麼,其中兩個標記是『
vars
』和『subs
』。比如,
vars
標記要求
perl
確保每個變數名都採用完整形式—同時包含它的包名。
比如,subs
標記要求
perl
拒絕用乙個裸字呼叫子程式。
乙個變數可以通過
4種途徑滿足
use strict
的要求。首先,隨
my關鍵字定義的變數處在字典作用域中,可在定義他的那個塊裡用他的短名字來進行引用。第二,隨
our關鍵字定義的包變數放置在符號表中。在定義這些變數的那個包的範圍內,可用它的短名字來進行訪問。而在包外,就必須用完整形式的名字來訪問他們。第三,所有情況下都可利用完整形式的名字來訪問變數—包括定義他們的那個包中。最後,乙個程式可指定乙個
use vars
語句,在後面跟隨乙個變數名列表,如下所示:
usevarsqw( 變數1
變數2變數3);ø
usewarnings
語句這個預編譯命令用於警告使用者一些可能出現的打字錯誤、使用了未初始化變數以及**裡其他潛在的問題。
ø也可以使用
no命令關閉
warnings
和strict
。例如使用如下命令:
nostrict;
記住,一旦進行了這樣的設定,那麼遮蔽效果會一直持續到**塊末尾解除—或者直接使用
use strict
重新啟用。
øuse constant
語句使用
use constant
語句可以建立乙個固定標量變數,作為乙個常量使用。
øuse diagnostice
語句它可以顯示更加詳細的錯誤提示資訊。
øuse integer
語句告訴程式使用整數運算方式來執行所有的數**算。
perl學習筆記1 z
陣列1 在perl 中,如果將乙個非整數值當作陣列的下標使用,不會造成語法錯誤,但仍然會造成邏輯錯誤。例如,在乙個陣列下標表示式中,乙個非數字的字串下標求值結果為零,因此,表示式返回的肯定是陣列中的第乙個元素。2 對於陣列來說,並不一定要求其中的所有元素都具有同樣的型別。不過,所有陣列元素至少都得為...
perl學習筆記3 z
1 雜湊片斷,如果在花括號中提供了多鍵,便會返回與那些鍵相對應的值,結果生成的列表會被當作乙個陣列對待。所以無論是雜湊片斷還是陣列片斷,都要採用 符號。2 應用於雜湊的函式 keys 函式可返回乙個列表,其中包含了雜湊內的所有鍵值。values 函式也能返回乙個列表,其中包含了雜湊中的所有值。eac...
perl學習筆記4 z
1 塊標籤 對任何迴圈塊來說,除了 do while 或者do until 結構外,他們都可以設定乙個 標籤 label 除了來對 塊作簡要說明之外,這個標籤還可以做 next last 和redo 等迴圈控制命令的乙個 目的地 或 目標 使用。注意,在指定標籤名的時候,在它後面要跟乙個冒號 且標籤...