發新話題

perl中匿名散列表與引用

perl中匿名散列表與引用

引用,在 perl 裡是很有用的,特別是高級、複雜的編程,與 OO 風格的編程中,經常用到。
如果你的 匿名散列與引用使用得比較概念清楚,正確使用的話,可以省很多事


下面是一個命名散名
複製內容到剪貼板
代碼:
my %personal_info = (
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
);



要注意喲,上面的賦值是 () 用括號喲


用起來很簡單,比較好的方法是用以下方法
複製內容到剪貼板
代碼:
print " my name is $personal_info{'name'} \n";



接著就是一個引用,對散列的引用
說明一下,引用,其實就像 c 語言裡的指針,是一個標量,存放的是一個內存地址,這個地址存著引用對像。
比如說一個散列的引用,其實就是這個散列的開始地址,這個地址直接保存著引用的散列。
複製內容到剪貼板
代碼:
my $personal_info_ref = \%personal_info;


引用就是這麼簡單,在變量 ( 標量,數組,散列) 前加 \ 就行了。



為了使用這個引用指向的散列數據,可以這樣使用
方法之一
複製內容到剪貼板
代碼:
my $tsingson_name = $$personal_info_ref{'name'};



你可以這樣得到這是不是一個散列的引用
複製內容到剪貼板
代碼:
print ref $personal_info_ref;



當然,比較推薦的用法是第二個 ,就是小箭頭用法
複製內容到剪貼板
代碼:
my $tsingson_name = $personal_info_ref->{'name'};



下面的代碼,可以看這個引用是什麼類型,當然結果是打印出 HASH
就是引用的是散列
複製內容到剪貼板
代碼:
print ref $personal_info_ref;



接著我們看一個匿名散列,其實匿名散列,就是沒有命名的散列表。
我們用引用來作例子。
複製內容到剪貼板
代碼:
my $personal_ref = {
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
};



注意喲,上面是 {} 花括號喲
這一段代碼是等於上面代碼的合成,在 {} 裡就是匿名散名,可以看作以下代碼的簡化
複製內容到剪貼板
代碼:
my %personal = (
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
); ######## 這裡是小括號

my $perlsonal_ref = \%personal; #### 這裡就是引用



對比一下上面的代碼,你可以知道匿名散列與引用,可以簡化代碼,使用小箭頭也可以清楚使用數據了。

#############################################################################################

看看一個實際代碼吧,是一個函數調用
複製內容到剪貼板
代碼:
$usertable->add({
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
});



可能見過這樣的代碼吧,呵呵,這裡傳遞給函數的,就是一個 匿名散列的引用。

上面的代碼,也就是相當於下面的代碼
複製內容到剪貼板
代碼:
my $personal_ref =
{
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
};

$usertable->add($personal_ref);




my %personal =
(
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
);

my $personal_ref = \%personal;

$usertable->add($personal_ref);



#######################################################
這裡就有一個技巧在,就是使用引用來傳遞散列表給函數

我們看看這們函數內是如何使用的
複製內容到剪貼板
代碼:
package Personal;
use strict;

sub add {
my $self = shift;
my $personal_ref = shift;

if (ref $personal_ref eq 'HASH')
{
my $name = $personal_ref->{'name'};
}

return;
}



kao, 為什麼這樣啊,看起來很煩嘛
這裡,使用 散列引用,是為了代碼更為清楚準確,因為散列表可以清楚知道變量是什麼,對於將來維護與排錯,增加功能或信息都很方便。

比如加一個國家屬性,只要在 散列表裡加
複製內容到剪貼板
代碼:
Code

my $personal_ref =
{
id => '452226197705300020',
name => 'tsingson',
sex => 'man',
age => '25',
title => 'perl fans',
state => 'china', ###### 看,加在這裡了
};

$usertable->add($personal_ref); #### 這裡還是沒變



看看函數里修改的地方
複製內容到剪貼板
代碼:
package Personal;
use strict;

sub add {
my $self = shift;
my $personal_ref = shift;

if (ref $personal_ref eq 'HASH')
{
my $name = $personal_ref->{'name'};
if ( exists $personal_ref->{'state'} ) ############## 代碼加在這裡了
{
print $personal_ref->{'state'}; ############## 處理
}
}

return;
}



我想,通過上面的說明,應該了解散列引用與匿名散列了吧。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。