標量 $ $cents 一個獨立的數值(數字或字串)
數組 @ @large 一列數值,用編號做鍵字
散列 % %interest 一組數值,用字串做鍵字
子過程 & &how 一段可以調用的 Perl 代碼
類型團 * *struck 所有叫 struck 的東西
$answer = 42; # 一個整數
$pi = 3.14159265 # 一個"實"數
$pet = "Camel"; # 字串
$sign = "I ove my $pet"; # 帶代換的字串
$cose = 'It cose $100'; # 不帶代換的字串
$thence = $whence; # 另一個變量的數值
$salsa = $moles * $avocados; # 一個胃化學表達式
$exit = system("vi $file"); # 一條命令的數字狀態
$cwd = `pwd`; # 從一個命令輸出的字串
數組 @varray = ("0","1","a","b","c");
$varray[0]="0";
對象 %vobject = ("Sun" => "Sunday",
"Mon" => "Monday",
"Tue" => "Tuesday",
"Wed" => "Wednesday",
"Thu" => "Thursday",
"Fri" => "Friday",
"Sat" => "Saturday" );
$vobject{"Sun"} = "Sunday";
$vobject{"other"} = ["Leah", "Rachel", "Bilhah", "Zilpah"];
$vobject{"Jacob"} = {
"Leah" => ["Reuben", "Simeon", "Levi", "Judah", "Issachar", "Zebulun"],
"Rachel" => ["Joseph", "Benjamin"],
"Bilhah" => ["Dan", "Naphtali"],
"Zilpah" => ["Gad", "Asher"],};
open(SESAME, "filename") # 從現存文件中讀取
open(SESAME, "<filename") # (一樣的東西,明確地做)
open(SESAME, ">filename") # 創建文件並寫入
open(SESAME, ">>filename") # 附加在現存文件後面
open(SESAME, "| output-pipe-command") # 設置一個輸出過濾器
open(SESAME, "input-pipe-command |") # 設置一個輸入過濾器
close(SESAME)
讀行操作符 <> 來讀入一行
open(GRADES, "grades") or die "Can't open grades: $!n";
while ($line = <GRADES>) {
($student, $grade) = split(" ", $line);
$grades{$student} .= $grade . " ";
}
等於 == eq 如果 $a 等於 $b 返回真
不等於 = ne 如果 $a 不等於 $b 返回真
小於 < lt 如果 $a 小於 $b 返回真
大於 > gt 如果 $a 大於 $b 返回真
小於或等於 <= le 如果 $a 不大於 $b 返回真
比較 <=> cmp 相等時爲 0,如果 $a 大爲 1 如果 $b 大爲 -1
-e $a 存在 如果在 $a 中命名的文件存在則爲真
-r $a 可讀 如果在 $a 中命名的文件可讀則爲真
-w $a 可寫 如果在 $a 中命名的文件可寫則爲真
-d $a 目錄 如果在 $a 中命名的文件是目錄則爲真
-f $a 文件 如果在 $a 中命名的文件是普通文件則爲真
-T $a 文本文件 如果在 $a 中命名的文件是文本文件則爲真
--循環控制--
if ($city eq "New York") {
}
elsif ($city eq "Chicago") {
}
else {
}
unless ($destination eq $home) { print "I'm not going home.en"; }
while (@ARGV) { process(shift @ARGV);}
foreach $user (@users) { }
foreach $key (sort keys %hash) { }
last , next (類似break,continue)
--END--
while ($line = <FILE>) {
if ($line =~ /http:/) {
print $line;
}
}
=~ 符號(模式綁定操作)
在 $line 中尋找匹配正則表達式"http:",如果發現了該表達式,操作符返回真並且執行代碼段
while (<FILE>) { print if /http:/; }
缺省的變量$_
正則表達式
空白 [tnrf] s
詞 [a-zA-Z_0-9] w
數字 [0-9] d
+:代表 {1,},意思爲"最少一次".
*:表示 {0,},表示"零次或多次".
?:表示 {0,1},表示"零或一次".
$_="larry:JYHtPh0./NJTU:100:10:Larry Wall:/home/larry:/bin/tcsh"
print /.+:/;
並且想用 /.+:/ 來匹配“larry:”,但是因爲 + 是貪婪的,這個模式將匹配一直到 /home/larry: 爲止。因爲它儘可能多地匹配直到最後出現的一個冒號。有時候你可以使用反向的字符類來避免上邊的情況,比如使用 /[^:]+:/,表示匹配一個
print reverse sort map {lc} keys %hash;
引起構造
常用 通用 含義 替換
' ' q// 文本字串 否
" " qq// 文本字串 是
` ` qx// 執行命令 是
() qw// 單詞數組 否
// m// 模式匹配 是
s/// s/// 模式替換 是
y/// tr/// 字符轉換 否
" " qr// 正則表達式 是