perl 被設計為90%處理文本,10%針對其它情況。
在Perl內部,沒有整型,全當雙精度浮點型來處理。
雙引號字符串內會變量內插
字符串可用“.”操作符連接。
字符串重復操作符“x”,可將左邊的字符串重復多少次,如"f"x3 # "fff"
變量的名字由“$”開頭,后接變量名。
用戶輸入用<STDIN>
chomp函數,去掉字符串尾的換行符。chomp是一個函數,作為函數,它有一個返回值。$b=chomp <STDIN>; #返回值是1。
在perl中,()通常可以省略。
undef值:Perl程序員在使用新變量時,經常不初始化,從而將變量作為0或空串使用。要分辨是undef還是真正的空串,可以用defined函數,它將在undef時返回false,其余返回true。如果想自己聲明undef值,可以使用undef:,如:
$a=undef;
(1..100),這種定義方式包含100個整數的列表。“..”是range oprator。
在Perl中,字符串列表會經常使用,有一種簡便的方法可以不用輸入大量的引號,而達到類似的功能,那就是使用qw。如:
qw(abc abcd abcde abcdef) #同("abc","abcd","abcde","abcdef")
qw表示quoted words或者“quoted by whitespace”。Perl將它們當作單引號字符串處理,不能像雙引號那樣在qw中使用\n和$var。
Perl中還允許用任何符號來作為分界符,如下,也一樣:
qw! fred barney betty wilma dino !
qw# fred barney betty wilma dino #
qw( fred barney betty wilma dino )
qw{ fred barney betty wilma dino }
qw[ fred barney betty wilma dino ]
qw< fred barney betty wilma dino >
列表賦值:($fred, $barney, $dino) = (“flintstone”, “rubble”, undef);
變量交換(swap函數,很方便也很邪乎):
($fred, $barney) = ($barney, $fred) #交換兩個變量
($betty[0],$betty[1]) = ($betty[1],$betty[0]);
數組不能成為列表的一個元素的原因是數組只能包含標量值,不能包含其它的數組。
@copy = @quarry;#將一個數組的值拷貝到另一個數組中
push的第一個參數或者pop的唯一參數必須是數組變量。他們對數組的結尾進行操作。
shift和unshift對一個數組的開頭進行操作。
和標量類似,數組也可以插入雙引號的字符串中,插入的數組元素會自動由空格分開。
Perl最常用的默認變量:$_,如下例:
$_ ="Yabba dabba doo\n"
print;
reverse函數會返回逆轉的列表,它不會改變其參數的值,所以如果返回值沒有賦值給某個變量,那這樣操作是沒有什么意義的。sort函數也一樣。
一個給定的表達式在不同的上下文中其含義是不同的。
如:一個數組的“name”,在列表上下文中,它返回列表元素,在標量上下文中,它返回數組元素的個數。
數組@people的真實名字是people。@只是一個限定詞(qualifier)。
甚至普通的賦值也產生不同的上下文:
@people = qw( fred barney betty );
@list=@people; #3個people的列表
$n=@people; #數字3
可以用scalar函數在上下文中將列表轉換為標量。如:
@rocks = qw(talc quartz jade obsidian);
print "I have ", scalar @rocks, "rocks!\n"
文件結束符:*nix系統中用Ctrl+D,在DOS中,用Ctrl+Z。
定義一個子程序的方式如下:
sub marine {
$n + = 1;
print "Hello, sailor number $n!\n";
}
如果兩個子程序同名,則后一個將覆蓋前一個。
可以使用子程序的名字(帶有&)來調用子程序。
將參數傳遞給子程序中的方法是,在程序后面接括號,括號內存放參數列表。
在Perl中,會自動將參數列表自動存放在一個叫做@_的數組中。也就是說此子程序參數的第一個值存放在$_[0]中,第二個存放在$_[1]中,依次類推。
可以任意時候使用my創建私有變量。如:
sub max {
my($m,$n);
($m,$n) = @_; #可以這樣寫,將聲明和賦值放一起:my($m,$n)=@_;
if($m > $n) {
$m
} else{
$n
}
}
在調用Perl的函數時,可以省略&,但函數的定義必須在調用之前。如果子程序和Perl一個內嵌程序同名,則必須使用&來調用它。
while (defined($line = <STDIN>)) {
print "I saw $line";
}
使用defined來檢測輸入是否結束。
<>(尖括號操作符)是一種特殊的行輸入操作。
在Unix中,-(連接號)代表標準輸入流。