1.2.4 複雜數據結構
$wife{"Jacob"} = ("Leah", "Rachel", "Bilhah", "Zilpah"); # 錯誤
$wife{"Jacob"} = ["Leah", "Rachel", "Bilhah", "Zilpah"]; # 正確
用[] 中括弧來將一個列表轉換成一個標量。
$wife[0] = ["Leah", "Rachel", "Bilhah", "Zilpah"]; #正確
$wife = ["Leah", "Rachel", "Bilhah", "Zilpah"]; #錯誤
左邊要寫成 $wife{"Jacob"} 或 $wife[0] 表明 wife 是一個數組或散列,只有對數組或散列才能這樣賦值。
訪問方式用 $wife{"Jacob"}[0] 或 $wife[0][0]
我們希望將散列結構也當成一個標量,我們可以使用花括弧來完成,如:
$kids_of_wife{"Jacob"} = {
"Leah" => ["Reuben", "Simeon", "Levi", "Judah", "Issachar", "Zebulun"],
"Rachel" => ["Joseph", "Benjamin"],
"Bilhah" => ["Dan", "Naphtali"],
"Zilpah" => ["Gad", "Asher"],};
訪問 $kids_of_wife{"Jacob"}{"Leah"}[0] = "Reuben";
1.2.5 簡單數據結構
Perl 用 package 標名命名空間,如
package Camel;
$fido = &fetch();
$fido 的真實名字是 $Camel::fido,&fetch 的真實名字是 &Camel::fetch
當我們使用:
$fido = new Camel "Amelia";
我們實際上調用了 Camel 包中的 &new,它的全名是 &Camel::new。並且當我們使用:
$fido->saddle();
的時候,我們調用了 &Camel::saddle 過程,因爲 $fido 記得它是指向一個 Camel 對象的。這就是一個面向對象程序的工作方法。
package Camel 實際上是開始了一個新包。Perl 中用 use 聲明借用其他已有包的名詞和動詞,use 同時也會檢查磁盤上載入的模塊名稱。
實際上,你必須先使用:
use Camel;
然後才能使用:
$fido = new Camel "Amelia";
不然的話,Perl 將不知道 Camel 是什麼東西。
可能 Perl 最強大的東西並不在 Perl 本身,而在於 CPAN(Comprehensive Perl Archive Network),CPAN 包含無數的用於實現不同任務模塊
。你不需要知道如何實現這些任務,只需要下載這些模塊,並簡單用下面的方法來使用它們:
use Some::Cool::Module;
然後你就可以使用模塊中的動詞。
use strict;
strict 模塊乾的事是更加嚴格地約束 Perl 中的一些規則,這樣你在很多方面必須更明確,而不是讓 Perl 去猜,例如如何確定變量的作用範
圍。
1.2.6 動詞
在 Perl 中過程和函數並沒有硬性的區別。我們經常稱動詞爲操作符(內建)或者是子過程(用戶自定義)(注:歷史上,Perl 要求你在調用
的任何用戶定義子過程的前面加一個與號(&)(參閱早先時候的 $fido = &fetch();)。但是到了 Perl 版本 5,這個與號是可選的了,所以
用戶定義動詞現在可以和內建動詞相同的方法進行調用了($fido = fetch();)。
1.3.1 如何運行
1) %perl -e 'print "Hello, world!/n";' # Unix 下
%perl -e "print 'Hello, world!'"; # Win 下
2) %perl gradation #gradation 文件中寫了 perl 腳本
3) %gradation #gradation 前加了 #! /usr/bin/perl (#!”shebang”標誌),並且該文件可執行
Windows 下的 .pl 腳本如果關聯了 perl.exe 解釋器,不用加 shebang 標誌,要加的話就是 #!C:/Perl/bin/perl.exe,就直接能執行 gradation.pl
#! /usr/bin/perl -w # -w 選項會打開所有有用的和有趣的警告信息