亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Perl > 正文

perl引用的相關(guān)知識分享

2020-10-31 15:18:49
字體:
供稿:網(wǎng)友

為何使用引用?

在perl4中,hash表中的value字段只能是scalar,而不能是list,這對于有些情況是很不方便的,比如有下面的數(shù)據(jù):
Chicago, USA
Frankfurt, Germany
Berlin, Germany
Washington, USA
Helsinki, Finland
New York, USA

我們想要按國家將城市分類,每個國家后面對應(yīng)城市列表,如果用perl4來做,必須將城市列表組合成字符串才行,如果用perl5就可以用引用來做,有了引用,就可以構(gòu)造復(fù)雜的hash結(jié)構(gòu),就可以用列表作為hash的值了。

如何定義引用

方法一 使用斜線/

定義變量的時候,在變量名前面加個/,就得到了這個變量的一個引用,比如

復(fù)制代碼 代碼如下:

# 數(shù)組的引用
my@array= (1,2,3) ;
my$aref=/@array ;
#哈希的引用
my%hash= ("name"=>"zdd","age"=>30,"gender"=>"male") ;
my$href=/%hash ;
#標(biāo)量的引用
my$scalar=1 ;
my$sref=/$scalar ;

方法二 匿名引用

方法一不是很常用,最常用的還是匿名引用,方法如下
匿名數(shù)組引用-用[]定義
$aref= [ 1,"foo",undef,13 ];

匿名數(shù)組的元素仍然可以是匿名數(shù)組,所以我們可以用這種方法構(gòu)造數(shù)組的數(shù)組,可以構(gòu)造任意維度的數(shù)組。
my $aref = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
]

匿名哈希引用-用{}定義

$href= { APR =>4, AUG =>8 };

使用引用

定義了引用之后,可以使用不同的方法來訪問引用,這里主要有三種方法。記憶這三種方法有個訣竅,將他們與普通的變量訪問作比較即可。

方法一

與普通變量的訪問方法相比,假設(shè)原來的變量名是name,則此方法在所有name出現(xiàn)的地方用$name代替,如下:

復(fù)制代碼 代碼如下:

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

# 方法一

復(fù)制代碼 代碼如下:

print $$sref, "/n" ;  # 用$sref代替sref
print @$aref, "/n" ;   # 用$aref代替aref
print %$href, "/n" ;   # 用$href代替href
print $$aref[2], "/n" ;
print $$href{'zdd'}, "/n" ;

#方法二
復(fù)制代碼 代碼如下:

#與普通變量的訪問方法相比,假設(shè)變量原來的名字是name,則現(xiàn)在用{$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

#同理,哈希引用的使用方法如下。
復(fù)制代碼 代碼如下:

%h          %{$href}           A hash
   keys%h      keys%{$href}        Get the keys from the hash
   $h{'red'}      ${$href}{'red'}       An element of the hash
   $h{'red'} =17   ${$href}{'red'} =17    Assigning an element

注意:當(dāng){}內(nèi)部是$var的形式時,{}是可以省略的,也就是說@{$aref}等價于@$aref,不過初學(xué)最好養(yǎng)成使用{}的習(xí)慣。

方法三
前兩種方法比較繁瑣,這種很簡潔,就是使用箭頭符號->

復(fù)制代碼 代碼如下:

$aref->[]  數(shù)組解引用
$href->{}  哈希解引用
$href->()  子過程解引用
$aref->[0] =3 ;
$href->{name} ="autumn" ;
$sref=2 ;
也可以將引用賦值給其他變量
my$aref1=$aref ;
my$href1=$href ;
my$scalar1=$scalar ;

解引用總結(jié)

復(fù)制代碼 代碼如下:

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" ;
print @$aref, "/n" ;
print %$href, "/n" ;
print $$aref[2], "/n" ;
print $$href{'zdd'}, "/n" ;
# 方法二
print ${$sref}, "/n" ;
print @{$aref}, "/n" ;
print %{$href}, "/n" ;
print ${$aref}[2], "/n" ;
print ${$href}{'zdd'}, "/n" ;
# 方法三,不適用于標(biāo)量
print $aref->[0], "/n" ;
print $href->{'zdd'}, "/n" ;
數(shù)組的數(shù)組
@a = (
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
)

我們知道[1, 2, 3]定義了一個(1, 2, 3)的匿名引用,所以數(shù)組a實際上包含三個元素,每個元素是一個引用,該引用指向一個數(shù)組,所以我們可以用下面的方法來訪問數(shù)組元素(注意,下標(biāo)從0開始)

$a[1][2]表示第二行第三列元素6,也可以寫成$a[1]->[2],不過很少有人這么寫。還可以寫成${$a[1]}[2],幾乎沒人這么寫!

多維數(shù)組的另一個寫法如下:

復(fù)制代碼 代碼如下:

my $aref = [1, [2, 3], [4, 5, 6]] ;
print $aref->[0] , "/n" ; #1
print $aref->[1][1], "/n" ; #3
print $aref->[2][0], "/n" ; #4

這兩者的區(qū)別有以下幾點:
1)、前者是真正的數(shù)組,所以定義變量是使用@,后者是指向匿名數(shù)組的引用,所以定義的時候使用$
2)、前者的數(shù)組元素是匿名數(shù)組,而外層數(shù)組則是實體數(shù)組,后者無論元素還是外層數(shù)組都是匿名數(shù)組
3)、前者可以用$a[x][y]的形式訪問,而后者只能用解引用的方式訪問,即$a->[x][y]的形式。

數(shù)組的哈希,哈希的數(shù)組,哈希的哈希

也就是哈希表中的每個元素也是一個哈希表,比如一個學(xué)生集合組成的哈希,其key是學(xué)生名字(唯一),其值是每個學(xué)生的屬性,比如年齡,身高及學(xué)號等。

復(fù)制代碼 代碼如下:

my $student_properties_of = {
    'zdd' => {
        'age' => 30,
        'hight' => 170,
        'id' => '001',
    },
    'autumn' => {
        'age' => 27,
        'hight' => 165,
        'id' => '002',
    }
} ;

引用的賦值

$aref2 = $aref1; 將使得$aref2和$aref1指向同一個數(shù)組,如果想將$aref1指向的數(shù)組拷貝一份給$aref2的話,使用下面的方法,[]里面對數(shù)組進行解引用,而[]以解引用后的數(shù)組為內(nèi)容生成了一個新的匿名數(shù)組,又賦值給$aref2。
$aref2 = [@{$aref1}];

注意:不能使用下面的形式,外層的[]是不可缺少的。由于=左邊是標(biāo)量,所以右邊的數(shù)組會被解釋為標(biāo)量環(huán)境,得到的是數(shù)組元素個數(shù),而不是元素本身。但是如果加上[]就可以了,這樣perl知道這是一個匿名數(shù)組的賦值。
$aref2 = @{$aref1};

判斷一個變量是否是引用

使用ref函數(shù)即可,如果變量是引用則返回真,否則返回假。實際上它更智能,它會返回引用對應(yīng)的類型,比如HASH或者ARRAY。

復(fù)制代碼 代碼如下:

my $aref1 = [1, 2, 0] ;
print ref $aref1, "/n" ; #輸出 ARRAY
if (ref $aref1) {
    print "true/n" ; #輸出 true
}

判斷兩個引用是否指向同一個目標(biāo)

可以用eq,這將以字符串的形式判斷,也可以使用==

復(fù)制代碼 代碼如下:

my $aref1 = [1, 2, 0] ;
my $aref2 = $aref1 ;
print $aref1, "/n" ;
print $aref2, "/n" ;
if ($aref1 eq $aref2) {
    print "reference equal/n" ;
}
if($aref1 == $aref2) {
    print "reference equal/n" ;
}

產(chǎn)生如下輸出:
ARRAY(0x248bec)
ARRAY(0x248bec)
reference equal (eq)
reference equal (==)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产视频在线一区| 国产精品99精品无码视| 九九热在线视频免费观看| 小说区亚洲自拍另类图片专区| 国产色综合一区| 日韩av在线网页| 黄色av中文字幕| 国产午夜精品理论片在线| 国产一二三区av| 男人网站视频| 欧美精品一区在线| 丁香久久综合| 成人在线视频网站| 在线天堂中文| 精品久久久久一区二区三区| 亚洲激情影院| 中文字幕线观看| 欧美日韩精品久久久免费观看| 欧美日韩另类一区| 在线播放evaelfie极品| 久久精品亚洲麻豆av一区二区| 羞羞的视频免费| 日韩精品在线免费播放| 国产中文字幕二区| 色欧美激情视频在线| 久久久久久91| 久久夜精品香蕉| 亚洲国产成人在人网站天堂| 精品人妻一区二区三区浪潮在线| 国产成人免费观看网站| 亚洲综合自拍偷拍| 午夜av区久久| 欧美一级专区免费大片| 在线观看老湿视频福利| 精品国产1区二区| 久久福利资源站| 中文字幕av影视| 亚洲成av人综合在线观看| 国产精品自拍在线观看| 中文字幕第三页| av电影天堂一区二区在线观看| 亚洲色图美腿丝袜| 国产欧美一区二区三区鸳鸯浴| 欧美精品tushy高清| 疯狂蹂躏欧美一区二区精品| 欧美 日韩 国产精品免费观看| 亚洲一一在线| eeuss国产一区二区三区四区| 国产成人+综合亚洲+天堂| 欧美男人操女人视频| 日韩精品一区二区三区免费观看| 人猿泰山h版在线观看| 欧美性受xxxx白人性爽| 欧美精品在线视频| 97人人模人人爽人人喊38tv| 国产对白videos麻豆高潮| 香港经典三级在线| 精品视频国产| 3d动漫精品啪啪| xxx国产hd| 国产成人综合自拍| 日韩欧美国产综合在线一区二区三区| 蜜桃视频一区二区在线观看| 欧美在线欧美在线| 中文字幕资源网在线观看免费| 成年人视频网站免费观看| 亚洲欧洲成人精品av97| 国产精品热久久久久夜色精品三区| 欧美黄色录像| 亚洲国产精品第一页| 亚洲精品中文字幕成人片| 亚洲老板91色精品久久| 一本色道久久综合亚洲精品不| 久久精品成人欧美大片古装| 亚洲视频小说图片| 国产成人的电影在线观看| 欧美一区免费观看| 人妻无码一区二区三区久久99| 欧洲日韩成人av| 亚洲欧美国产日韩中文字幕| 成人免费一区二区三区| 本道综合精品| 国产精品扒开腿做爽爽爽视频| 狠狠色噜噜狠狠狠狠888奇米| 美女被人操网站| 91精品在线国产| 狠狠躁少妇一区二区三区| 欧美一区二区久久| 东方aⅴ免费观看久久av| 欧美影院一区二区三区| 亚洲福利视频在线| 亚洲精品xxx| 精品三级av在线导航| 久久精品国产屋| 亚洲免费视频一区二区三区| 欧美一区二区三区四区在线| 久久99久久久久久久噜噜| 91sao在线观看国产| 国产嫩草在线视频| 亚洲综合日韩中文字幕v在线| 亚洲国产一区二区精品专区| 青青草在线播放| 嫩草视频免费在线观看| 中文av字幕一区| 国产精品一区二区精品| 天堂成人免费av电影一区| 91福利视频网站| 免费国产亚洲视频| 欧美成人三级在线观看| 欧美激情导航| 国产精品综合色区在线观看| 日韩理伦片在线| 一区二区三区精品99久久| 精品久久一区二区三区| h视频久久久| 欧美三级伦理在线| 亚洲第一在线综合网站| 成人高潮aa毛片免费| 国产福利久久久| 18以下岁禁止1000部免费| 久久亚洲精精品中文字幕早川悠里| 国产二级c片l毛片| 法国空姐在线观看免费| 亚洲午夜性刺激影院| 久久久久久毛片| 亚洲最大激情中文字幕| 国产原创在线播放| 日韩av大全| 久久久夜夜夜| 欧美激情一区二区三区在线视频| 好男人www社区| ass精品国模裸体欣赏pics| 国产一区二区三区小说| 催眠调教后宫乱淫校园| 亚洲午夜日本在线观看| 麻豆视频一区| 日本理论片2828理论片| 日韩国产在线观看| 国产色综合久久| 中文字幕2019第三页| 三级不卡在线观看| 欧美精品videosex极品1| 爽好久久久欧美精品| 欧美三级电影精品| www中文字幕在线观看| 黄色工厂在线观看| 全球成人免费直播| 国产日韩欧美三级| 国产剧情麻豆剧果冻传媒视频免费| 欧美高清视频一区二区三区在线观看| 国产精品久久看| 免费白浆视频| 欧美日韩精品中文字幕| 国产成人香蕉在线视频网站| 久久免费资源| 久久久久久久爱| 伊人久久久久久久久久久| 韩国v欧美v亚洲v日本v| 影音先锋中文资源站| 正在播放国产精品| 国产91免费在线观看| 国产人妻互换一区二区| 色视频免费在线| 性猛交富婆╳xxx乱大交天津| 日本最新高清不卡中文字幕| 黄色99视频| 香蕉加勒比综合久久| 亚洲国产综合在线观看| 日本成人超碰在线观看| 欧美13~18sex性hd| 韩国主播福利视频一区二区三区| 精品影片在线观看的网站| c#hpsocket| 日本韩国精品一区二区在线观看| 日韩av手机在线免费观看| 欧美中文在线观看国产| 在线观看国产一区二区| 成人午夜视频在线观看| 久久久久久激情| 亚洲精品综合网| sese在线| 久久久国产成人精品| 在线成人精品视频| 麻豆精品精品国产自在97香蕉| 国产一级片网址| 国产亚洲精品久久久久久青梅| 天天av天天爱| 日韩电影中文字幕在线| 午夜精品福利一区二区| 国模视频一区二区三区| 手机在线精品视频| 精品视频一二区| 成人免费毛片男人用品| 亚洲欧美另类在线视频| 欧美丝袜一区二区| 成人性生活av| 欧美日韩一区二区三区在线播放| 手机在线国产视频| 一区二区三区国产在线观看| 亚洲欧洲视频在线观看| 国产免费亚洲高清| 日本视频中文字幕一区二区三区| 国产粉嫩一区二区三区在线观看| 性欧美疯狂xxxxbbbb| 亚洲精品国产无天堂网2021| 中文字幕在线视频日韩| 国产一二三四视频| 91视频地址| 丝袜足脚交91精品| 噜噜噜在线观看播放视频| 久热国产精品视频| 午夜精品影视国产一区在线麻豆| 欧美午夜不卡在线观看免费| 亚洲乱色熟女一区二区三区| 青春草在线观看| 国产成人免费9x9x人网站视频| 中文字幕亚洲综合久久| 中文字幕欧美日韩精品| 国产尤物99| 少妇aaaaa| 精品国产一区二区三区在线观看| 91免费看片网站| 天天干天天舔天天操| 亚洲风情亚aⅴ在线发布| 日韩特黄一级片| 欧美日韩精品免费观看视频| 老熟妇高潮一区二区高清视频| 高清免费电影在线观看| 东京热av一区| 粗大的内捧猛烈进出视频| 日韩欧美国产一区二区在线播放| 精品欧美日韩一区二区| 91免费版在线观看| 国产一区二区三区高清| 亚洲精品天堂在线| 综合精品久久| 高潮一区二区| 亚洲日本久久久| 亚洲高清不卡在线| 久久精品播放| 亚洲精华一区二区三区| 国产精品人人爱一区二区白浆| 婷婷伊人五月天| 国产日韩一区二区在线| 国产又大又粗又爽| 从欧美一区二区三区| 久久精品欧美一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 91国产丝袜播放在线| 78国产伦精品一区二区三区| 色欲无码人妻久久精品| 老牛影视免费一区二区| 在线免费福利| 国产91精品一区二区麻豆亚洲| 欧美激情va永久在线播放| 三年中国中文在线观看免费播放| 999精品视频在这里| 欧美日本高清| 日本福利片在线观看| 一区二区三区四区蜜桃| 国产成人免费在线观看视频| 日本小视频网站| 亚洲无线码在线一区观看| 久久综合毛片| 日韩一区二区三区精品视频| 一区二区三区午夜| 在线免费观看a级片| 久久久久久久久99| 欧美三级在线观看视频| 天天射夜夜爽| 91精品韩国| 久久久激情视频| 97视频在线观看视频免费视频| 日韩精品无码一区二区| 午夜美女久久久久爽久久| 韩国精品美女www爽爽爽视频| 欧美成人精品在线| 成人video亚洲精品| 美腿丝袜亚洲综合| 91嫩草国产线观看亚洲一区二区| 男人的天堂在线视频| 999精品在线视频| 国产超碰精品在线观看| 美女被爆操网站| 加勒比成人在线| 欧美在线|欧美| 丁香六月综合激情| 久久久久久欧美| 日日摸夜夜夜夜夜添| 久久久久久久欧美精品| 久久国内精品自在自线400部| 日韩av在线播放中文字幕| 精品久久久久成人码免费动漫| 日韩欧美2区| 18成人免费观看视频| 亚洲福利电影网| 久久久精品少妇| 国产九九热视频| 性xxxx奶大欧美高清| 蜜桃999成人看片在线观看| 男人用嘴添女人下身免费视频| 中文字幕在线不卡一区二区三区| 亚洲人成网站免费播放| 精品国产精品国产偷麻豆| 青青草华人在线视频| 女人扒开双腿让男人捅| 91官网在线| 在线播放一区二区三区| 内射国产内射夫妻免费频道| 日本大片免费看| 九九精品久久久| 欧美jizzhd欧美精品巨大| 成人aaaa| 国产视频亚洲| 青青青爽久久午夜综合久久午夜| 熟妇无码乱子成人精品| 欧美日韩国产小视频| 精品九九在线| 国产精品日日爱| 最新在线观看av网站| 116极品美女视频在线观看| 五月激情久久久| www.av中文字幕| 午夜视频在线免费| 日本中文字幕成人| 日韩电影一区二区三区四区| 丁香婷婷深情五月亚洲| 四虎国产精品成人免费影视|