為何使用引用?
在perl4中,hash表中的value字段只能是scalar,而不能是list,這對于有些情況是很不方便的,比如有下面的數據:
Chicago, USA
Frankfurt, Germany
Berlin, Germany
Washington, USA
Helsinki, Finland
New York, USA
我們想要按國家將城市分類,每個國家后面對應城市列表,如果用perl4來做,必須將城市列表組合成字符串才行,如果用perl5就可以用引用來做,有了引用,就可以構造復雜的hash結構,就可以用列表作為hash的值了。
如何定義引用
方法一 使用斜線/
定義變量的時候,在變量名前面加個/,就得到了這個變量的一個引用,比如
代碼如下:
# 數組的引用
my@array= (1,2,3) ;
my$aref=/@array ;
#哈希的引用
my%hash= ("name"=>"zdd","age"=>30,"gender"=>"male") ;
my$href=/%hash ;
#標量的引用
my$scalar=1 ;
my$sref=/$scalar ;
方法二 匿名引用
方法一不是很常用,最常用的還是匿名引用,方法如下
匿名數組引用-用[]定義
$aref= [ 1,"foo",undef,13 ];
匿名數組的元素仍然可以是匿名數組,所以我們可以用這種方法構造數組的數組,可以構造任意維度的數組。
my $aref = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
匿名哈希引用-用{}定義
$href= { APR =>4, AUG =>8 };
使用引用
定義了引用之后,可以使用不同的方法來訪問引用,這里主要有三種方法。記憶這三種方法有個訣竅,將他們與普通的變量訪問作比較即可。
方法一
與普通變量的訪問方法相比,假設原來的變量名是name,則此方法在所有name出現的地方用$name代替,如下:
代碼如下:
my $scalar = 1 ;
my @array = (1, 2, 3) ;
my %hash = ('zdd' => 30, 'autumn' => 27) ;
my $sref = /$scalar ; # scalar reference
my $aref = /@array ; # array reference
my $href = /%hash ; # hash reference
# 方法一
代碼如下:
print $$sref, "/n" ; # 用$sref代替sref
print @$aref, "/n" ; # 用$aref代替aref
print %$href, "/n" ; # 用$href代替href
print $$aref[2], "/n" ;
print $$href{'zdd'}, "/n" ;
#方法二
代碼如下:
#與普通變量的訪問方法相比,假設變量原來的名字是name,則現在用{$name}來代替name。
@a @{$aref} An array
reverse@a reverse @{$aref} Reverse the array
$a[3] ${$aref}[3] An element of the array
$a[3] =17; ${$aref}[3] =17 Assigning an element
#同理,哈希引用的使用方法如下。
代碼如下:
新聞熱點
疑難解答