語法元素
| C | Perl | Perl語法說明
|
註釋
| /* … */
| # …
| 只支持單行註釋
|
變量
| int a, b, c;
char c=』A』;
int x[10];
| my ($a, $b, $c);
my $c='A';
my @x;
my %h;
| 聲明使用my標示
表示值的變量以$開頭,表示數組的變量以@開頭,表示哈希表的變量以%開頭。
聲明可以省略(不建議)
|
字符串
| char* h1=」hello\n」;
char* h2=」hello\\n」;
| $h1=」hello\n」;
$h2=』hello\n』;
| 雙引號解釋內部的\n,而單引號則不解釋
|
一維數組
| int arr[10];
arr[0]=0;
for(i=0;i<10;i++)
arr=i;
| my @arr;
$arr[0]=0;
@arr[3..5]=(3..5);
| 數組聲明以@標示
動態數組,不需要指定大小
數組下標從0開始
訪問數組元素值的時候,要以$開頭表示訪問的是數值
[3..5]表示數組中下標為3到5之間的元素組成的數組
數組之間可以直接賦值
|
多維數組
| int arr[10][10];
arr[0][1]=9;
| my @arr;
$arr[0][1]=9;
| Perl並不直接支持多維數組,而是以數組引用的方式間接支持。例如arr[0]的內容就是一個數組的引用地址。
|
指針
| char c;
int* x=&c;
c='a';
printf(*x);
| my $c;
my $x=\$c;
$c='a';
print $x;
| \和C中的&類似,意思是取引用
|
| void hello() {
printf(「Hello\n」);
}
void (*hi)()=hello;
(*p)();
| sub hello{
print "Hello\n";
}
my $hi = *hello;
&$hi;
| &表示調用函數
*取函數的代碼地址
不必用括號把參數括起來
調用時的括號也是可選的
|
條件語句
| if (x>0) x=0;
x>0 ? x=0 : ;
| if ($x>0) { $x=0; }
$x=0 if $x>0;
$x=0 unless $x<=0;
$x>0 ? $x=0 : ;
| if 結構可以反轉,意義不變,注意前句沒有分號。
顧名思義, unless是「除非」的意思。這裡的四個表達方式是等價的。注意第一種方式中,條件部分的圓括號和語句部分的花括號是不可省略的。
|
循環語句
| 略
| foreach (@arry)
foreach my $key(@ary)
foreach $count (1..10)
| for/while的語法都和C類似。
foreach關鍵字也可以用for,意義不變。
|
函數
| int max(int x, int y)
{
return x>y?x:y;
}
int n=max(1,2);
| sub max
{
my ($x, $y)=@_;
return $x>$y?$x:$y;
}
my $n=max(1,2)
| 注意下劃線」_」也是一個合法的變量名。而@_是Perl內置的一個數組,內容為函數的參數。
my ($x, $y) 表示聲明了一個有兩個元素的數組,並將兩個元素映射到$x和$y上。
($x,$y)=@_;則表示兩個數組之間的複製,@_中對應的元素的值就賦值給了$x和$y.這是一個簡便的寫法,也可以這樣寫
my $x=$_[0]; my $y=$_[1];
return是可選的,默認返回最後一個表達式的值
|
語法約束
| 1. 編譯時打開編譯器所有的警告選項
2. 使用lint工具 | | 3. perl –w myprogram.pl 打開運行警告開關,如果運行時Perl檢查到了可能的錯誤,會顯示警告信息,否則它默認是什麼也不提示繼續執行。
4. #!/usr/bin/perl –w 在代碼文件第一行中加入-w選項開關
5. use strict; 使用嚴格語法約束
|
運行
| 編譯後直接執行
| | 1. perl myprogram.pl 手工執行
2. #!/usr/bin/perl
Unix下在代碼第一行加入,然後給文件加上可執行的屬性 chmod +x myprogram.pl,之後就可以用./myprogram.pl命令來運行。
3. 訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。下,安裝ActivePerl的時候,已經將.pl後綴的文件和perl的解釋程序關聯起來了,因此直接雙擊文件圖標就可以運行。
|
需要說明的是,在Perl的世界中有一句名言「條條大路通羅馬」, 這句話的意思是說同樣一件事情Perl允許你用很多種不同的方式去做。因此上表的例子風格是按照C的習慣來寫的,並且為了簡化起見,只是挑選了與C相似的內容。事實上,Perl包含了很多C沒有的東西,例如內置的Hash表、隊列、正則表達式、格式定義等等。