婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Perl 哈希的創建和引用介紹

Perl 哈希的創建和引用介紹

熱門標簽:河南虛擬外呼系統公司 電話機器人哪里有賣 惠州龍門400電話要怎么申請 熱門電銷機器人 上海企業外呼系統 外呼電信系統 萬利達百貨商場地圖標注 okcc外呼系統怎么調速度 智能機器人電銷神器

語法
創建'引用'僅有兩種方法,使用它也是兩種。

創建引用

創建規則 1
如果你在一個變量前加一個'/'號,你就得到了這個變量的'引用'。

    $aref = /@array;         # $aref 保存著指向@array的'引用'
    $href = /%hash;          # $href 保存著指向%hash的'引用'
當你把'引用'保存在類似 $aref 或 $href的變量中,你就可以象操作其他標量一樣copy或保存它。

    $xy = $aref;             # $xy 現在保存了指向 @array 的'引用'
    $p[3] = $href;           # $p[3] 現在保存了指向 %hash 的'引用'
    $z = $p[3];              # $z 現在保存了指向 %hash 的'引用'
這些例子展示了如何創建命名變量的'引用',但是有時候,我們創建的數組或哈希沒有名字。這個和你使用沒有放到變量中去的字符串'/n'或數字'80'類似。

創建規則 2

[ ITEMS ] 創建了一個新的、匿名的數組,并返回一個指向這個數組的'引用'。 { ITEMS } 創建了一個新的、匿名的哈希,并返回那個哈希的一個'引用'。

    $aref = [ 1, "foo", undef, 13 ];  
    # $aref 保存了這個數組的'引用'
    $href = { APR =>; 4, AUG =>; 8 };   
    # $href 保存了這個哈希的'引用'
從規則 2 中得到的'引用'和從規則 1 中得到的'引用'是同一種類型的:

        # 這里:
        $aref = [ 1, 2, 3 ];
        # 和上面一樣:
        @array = (1, 2, 3);
        $aref = /@array;
前面一種方法是后面兩行的縮寫,除了第一種方法沒有創建一個多余的數組變量@array。

如果你只是編寫符號 [], 你將得到一個新的、空匿名數組。如果你使用符號 {},就能得到一個新的、空匿名哈希。

使用引用

當你創建了一個'引用'后,你可以對它做什么操作呢?它是標量,你可以象處理任何標量一樣保存和取回它。除此之外,還有兩種使用方法:


使用規則 1
你可以始終用一個帶有大括號的數組'引用',來替換一個數組的名字。例如,用 @{$aref} 代替 @array。

下面是一個用法的一些例子:

數組:

        @a              @{$aref}                一個數組
        reverse @a      reverse @{$aref}        對一個數組做倒序排序
        $a[3]           ${$aref}[3]             數組中的一個成員
        $a[3] = 17;     ${$aref}[3] = 17        對一個成員賦值
上面每行中,兩個表達式實現的是同一種功能。左邊那個是對數組@a操作,右邊那個是對'引用'$aref所指向的數組操作。它們對數組產生相同的作用。

使用哈希的'引用'和數組的'引用'完全一樣。

        %h              %{$href}              一個哈希
        keys %h         keys %{$href}         從哈希中將鍵取出來
        $h{'red'}       ${$href}{'red'}       哈希中的一個成員
        $h{'red'} = 17  ${$href}{'red'} = 17  對一個成員賦值
你對一個'引用'無論想做什么,使用規則 1 已經告訴你怎么做了。 你只要象使用常規的數組或哈希一樣編寫Perl代碼,然后把數組或哈希的名字用 {$reference}來替代。‘當我只有一個'引用'時,怎么來遍歷整個數組?'你這樣寫:

        for my $element (@array) {
           ...
        }
接著用'引用'替代數組名@array:

        for my $element (@{$aref}) {
           ...
        }
‘怎當我只有一個'引用'時,怎么來打印一個哈希的內容?'先寫一個打印整個哈希的代碼:

        for my $key (keys %hash) {
          print "$key =>; $hash{$key}/n";
        }
然后用'引用'代替那個哈希的名字:

        for my $key (keys %{$href}) {
          print "$key =>; ${$href}{$key}/n";
        }

使用規則 2

使用規則 1 是你真正需要的,因為它告訴了你怎么來處理一個'引用',而它對幾乎任何的'引用'都有效。但是我們通常做的事情只是和數組或哈希中的一個成員有關,使用規則 1 卻是很笨重的方法,所以還有簡單的方法。

${$aref}[3] 太難閱讀,所以我們這樣寫 $aref->[3]。

${$href}{red} 寫的太笨重, 所以我們這樣寫 $href->{red}。

如果 $aref 保存的是一個數組的'引用',那么 $aref->[3] 就是這個數組的第四個成員。不要和 $aref[3] 相混淆,這個代表的是一個完全不同的數組的第四個成員,這個迷惑的數組是@aref。 變量 $aref 和 @aref 是完全不相關的,就像 $item 和 @item 一樣。

同樣的, $href->{'red'} 是哈希'引用' 的變量$href的一部分,甚至這是一個沒有名字的哈希。而$href{'red'} 是另一個容易混淆的命名哈希 %href 的一部分。很容易忘記寫上符號' ->',如果出現這種情況,當你的程序從一個你不想取數據的數組和哈希中取出了成員,你會得到奇怪的計算結果。

例子
讓我們來看一個例子:

首先,記住 [1, 2, 3] 創建了一個匿名數組,包含了 (1, 2, 3),然后返回一個數組的'引用'。

現在想一下:

        @a = ( [1, 2, 3],
               [4, 5, 6],
               [7, 8, 9]
             );
@a 是一個擁有三個成員的數組,每一個成員是另一個數組的'引用'。

$a[1] 是其中的一個'引用'。它指向一個數組,這個數組包含了(4, 5, 6),因為這是一個數組的'引用',使用規則 2 告訴我們可以這樣寫 $a[1]->[2],用來取得這個數組的第三個成員。  $a[1]->[2] 值是6。 同樣的,$a[0]->[1] 值是 2。這里我們就像在使用一個二維數組;你可以是用 $a[ROW]->[COLUMN] 來取得或設置數組中任何一行任何一列中的成員。

這些符號看起來還是有些麻煩,所以還有更加簡單的用法:

箭頭符號規則
在兩個下標之間的箭頭是可選的。

我們可以用這個寫法$a[1][2]來代替$a[1]->[2];它們是相同的。相對于$a[0]->[1] = 23,我們這樣寫$a[0][1] = 23;它們也是相同的。

現在它們看起來真的象二維數組了!

你可以發現為什么箭頭這么重要。沒有它們,我們必須這樣寫${$a[1]}[2],而不是$a[1][2]。對于三維數組,它們使我們可以簡單地寫成$x[2][3][5]而不是寫成難讀的${${$x[2]}[3]}[5]方式。

解決辦法
下面是前面提出來的問題的解決方法,就是關于城市和國家名稱的重新格式化。

復制代碼 代碼如下:

       my %table;
       while (>) {
        chomp;
         my ($city, $country) = split /, /;
         $table{$country} = [] unless exists $table{$country};
         push @{$table{$country}}, $city;
       }
       foreach $country (sort keys %table) {
         print "$country: ";
        my @cities = @{$table{$country}};
        print join ', ', sort @cities;
        print "./n";
      }

這個程序分成兩部分: 第 2--7 行完成數據的輸入和數據結構的創建。 第 8-13 行分析這個數據并打印報告。我們設置了一個哈希 %table,它的鍵是國家名稱,它的健值是這個國家名稱對應的城市名的數組的'引用'。這個數據結構看起來如下:

           %table
        +-------+---+   
        |       |   |   +-----------+--------+
        |Germany| *---->| Frankfurt | Berlin |
        |       |   |   +-----------+--------+
        +-------+---+
        |       |   |   +----------+
        |Finland| *---->| Helsinki |
        |       |   |   +----------+
        +-------+---+
        |       |   |   +---------+------------+----------+
        |  USA  | *---->| Chicago | Washington | New York |
        |       |   |   +---------+------------+----------+
        +-------+---+
我們先來分析輸出部分。假設我們已經擁有了這個結構,那么我們怎么來輸出呢?

復制代碼 代碼如下:

       foreach $country (sort keys %table) {
         print "$country: ";
        my @cities = @{$table{$country}};
        print join ', ', sort @cities;
        print "./n";
      }

%table是一個普通的哈希,我們從它這里可以取得一列鍵,對鍵進行排序,并遍歷所有的鍵。這里唯一使用'引用'的是第10行。$table{$country} 查看了哈希中的鍵$country并取得它的值。這個健值是對應國家中的城市數組的'引用'。 使用規則 1 告訴我們可以通過使用 @{$table{$country}}來恢復整個數組。第10行就象

        @cities = @array;
不同的是這里的數組的名字被'引用' {$table{$country}}所替代。符號 @ 告訴Perl去獲取整個數組。得到了城市的列表后,我們照樣對其進行排序,合并城市名,并打印出來。

第2-7行負責創建數據結構,如下:

復制代碼 代碼如下:

       while (>) {
        chomp;
         my ($city, $country) = split /, /;
         $table{$country} = [] unless exists $table{$country};
         push @{$table{$country}}, $city;
       }

第 2-4 行獲取城市和國家的名稱。第5行查看這個國家名稱是不是已經作為一個鍵存放在哈希里面了,如果沒有,程序就使用符號[] (創建規則 2)創建一個新的、空的匿名數組,同時把一個指向這個匿名數組的'引用'作為健值放到哈希里面去了。

第6行將城市名放到對應的數組里面。$table{$country} 現在保存了一個'引用',它指向所對應的國家的城市的數組。第6行就象

        push @array, $city;
不同的是這里的數組名被{$table{$country}}所替代。 命令 push 將城市名加到這個'引用'指向數組的最后。

這里有一個要點被我忽略了。第5行是不需要的。我們可以取掉它。

復制代碼 代碼如下:

       while (>) {
        chomp;
         my ($city, $country) = split /, /;
       ####  $table{$country} = [] unless exists $table{$country};
         push @{$table{$country}}, $city;
       }

如果在哈希 %table 中已經有這個國家名 $country的記錄,那么,加不加第5行沒有任何區別。第6行會自己定位到$table{$country}這個'引用'指向的數組,把值 $city 放到數組中去。但是如果在%table中沒有那個鍵,比如Greece,那么它會怎么辦呢?

這是Perl,它會自己準確地完成工作。你想把一個Athens賦值給一個不存在地數組,那么Perl會幫助你創建一個新的、空的匿名數組,將它放到哈希%table里面去,然后把值 Athens 放到這個數組中。這個被稱為'自動生成' --讓事物自己自動產生出來。 Perl 發現在哈希里面沒有這個鍵,就自動地創建了一個新的哈希記錄。 Perl 發現你想要使用數組作為哈希的健值,它就自動創建一個匿名的空數組,并將指向這個數組的'引用'放到那個哈希中去。一般, Perl 創建的數組只有一個成員大小,用于保存這個新的城市名。


其他集錦
我承諾以10%的細節來使你得到90%的好處,那就意味著我跳過了90%的知識的細節。現在來看一下其中的重要的部分,這個比閱讀手冊 the perlref manpage 要容易得多,手冊討論了100%的細節。

手冊 the perlref manpage中的一些集錦:

你可以對任何東西創建'引用',包括標量,函數和其他的引用。 

在 使用規則 1 中,當大括號里面是一個象$aref這樣的標量變量時,你可以省略掉這個大括號。例如, @$aref 和 @{$aref}是一樣的,$$aref[1] 和 ${$aref}[1]是一樣的。 如果你是初學者,建議你還是養成加上大括號的習慣。 

下面的操作不會copy '引用'指向的數組: 
        $aref2 = $aref1;
你將得到兩個'引用',它們都指向同一個數組。如果你修改了$aref1->[23]的值,那么你查看變量$aref2->[23]時,它也相應地變了。

要copy這個數組,你需要這樣

        $aref2 = [@{$aref1}];
使用符號 [...] 來創建一個新的匿名數組, 而且這個新的數組的'引用'被賦值給了$aref2 。 這個新的數組用'引用'$aref1所指向的數組的內容來初始化。

同樣的,要copy一個匿名哈希,你需要這樣

        $href2 = {%{$href1}};

如果要判斷一個變量保存的內容是不是'引用',使用函數ref 。如果它的參數是'引用',返回的值是'真'。實際上,它做得更好:如果是一個哈希的引用,它返回'HASH',如果是一個數組的引用,那么就返回'ARRAY'。 

如果你想像字符串一樣使用'引用'的話,你得到的字符串就像 
        ARRAY(0x80f5dec)   or    HASH(0x826afc0)
如果看到一個像這樣的字符串,你應該知道你錯誤地輸出了一個'引用'。

這種顯示方式的另一個作用是你可以用eq來比較兩個'引用',看它們是不是指向相同的東西。(你通常可以使用 == 來比較,因為它更會)


你可以像使用'引用'一樣來使用一個字符串。如果你使用"foo"作為一個數組的'引用',它就是指向數組 @foo的一個引用。這被稱為'軟引用'或‘符號引用 '。 使用申明 use strict 'refs' 可以取消這個功能,如果你不小心使用了它,會導致各種可能的錯誤。 

你可能更喜歡查看 the perllol manpage,而不是手冊 the perlref manpage;它詳細地討論了列表的列表和多緯數組。然后,你可以繼續學習手冊 the perldsc manpage;它是數據結構的Cookbook, 它提供了處理哈希的數組,數組的哈希,以及其他數據結構的方法。

您可能感興趣的文章:
  • php-perl哈希算法實現(times33哈希算法)
  • Perl哈希表用法解析
  • perl哈希的一個實例分析
  • Perl 哈希Hash用法之入門教程
  • perl哈希hash的常見用法介紹
  • Perl與JS的對比分析(數組、哈希)

標簽:綿陽 綏化 百色 周口 秦皇島 合肥 淮安 周口

巨人網絡通訊聲明:本文標題《Perl 哈希的創建和引用介紹》,本文關鍵詞  Perl,哈希,的,創,建和,引用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Perl 哈希的創建和引用介紹》相關的同類信息!
  • 本頁收集關于Perl 哈希的創建和引用介紹的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    天天综合日日夜夜精品| 另类调教123区| 天涯成人国产亚洲精品一区av| 日韩av网站在线观看| 国产精品99久久久久久宅男| 91在线你懂得| 日韩三级视频在线观看| 国产精品人成在线观看免费 | 日韩黄色小视频| 国产在线一区二区综合免费视频| 成人av动漫网站| 日韩精品一区在线| 亚洲伊人色欲综合网| 麻豆国产一区二区| 成人午夜免费电影| 日韩欧美亚洲国产精品字幕久久久| 国产精品久久久久久户外露出| 日韩成人免费电影| 91视频在线观看免费| 久久综合国产精品| 婷婷成人激情在线网| 91视频精品在这里| 国产肉丝袜一区二区| 美日韩一区二区| 成人免费福利片| 精品日韩成人av| 日韩电影在线免费| 欧美三区在线视频| 亚洲天堂免费在线观看视频| 韩国欧美国产1区| 色欧美片视频在线观看在线视频| 久久精品视频网| 国产真实乱对白精彩久久| 在线成人av影院| 亚洲国产aⅴ天堂久久| 97久久久精品综合88久久| 久久日一线二线三线suv| 日韩国产精品久久久| 在线观看亚洲精品视频| 中文字幕欧美区| 国产成人综合亚洲91猫咪| 337p粉嫩大胆色噜噜噜噜亚洲| 日本伊人色综合网| 91精品欧美一区二区三区综合在 | 午夜欧美视频在线观看| 91免费看视频| 亚洲综合男人的天堂| 91免费观看视频在线| 亚洲欧洲精品一区二区三区不卡| 成a人片国产精品| 中文字幕在线不卡| 粉嫩av一区二区三区粉嫩| 日韩精品一区二区三区中文不卡| 奇米色一区二区三区四区| 欧美一区二区精美| 狠狠色伊人亚洲综合成人| 久久青草欧美一区二区三区| 国产高清不卡一区| 1024成人网| 欧美日韩色综合| 久久国产尿小便嘘嘘| 精品国产不卡一区二区三区| 国产一区二区三区美女| 国产精品激情偷乱一区二区∴| 成人精品高清在线| 一区二区三区在线视频免费观看 | 欧美日本韩国一区| 日韩电影在线观看电影| 精品人伦一区二区色婷婷| 不卡视频一二三| 午夜成人在线视频| www精品美女久久久tv| 久久精品99久久久| 国产精品无圣光一区二区| gogogo免费视频观看亚洲一| 亚洲一区中文日韩| 久久久久久亚洲综合影院红桃 | 日日摸夜夜添夜夜添亚洲女人| 欧美va亚洲va国产综合| 国产91清纯白嫩初高中在线观看 | 欧美人狂配大交3d怪物一区| 国产真实乱子伦精品视频| 亚洲人123区| 日韩欧美一二三区| 大桥未久av一区二区三区中文| 一区二区三区日韩欧美| 久久影院午夜片一区| 在线欧美日韩国产| 日韩黄色免费电影| 精品国产乱码久久久久久闺蜜 | 欧美国产精品劲爆| 欧美一区二区三区小说| 国产成人啪免费观看软件| 久久美女高清视频| 欧美人与禽zozo性伦| www.一区二区| 久久国产精品99久久人人澡| 自拍偷拍亚洲欧美日韩| 日韩精品一区二区三区视频播放 | 色婷婷国产精品| 国产一区二区三区视频在线播放| 亚洲一区二区三区自拍| 91精品国产欧美一区二区成人| 韩国v欧美v日本v亚洲v| 亚洲高清不卡在线| 亚洲免费观看高清完整版在线| 精品成人免费观看| 欧美一级二级三级蜜桃| 在线一区二区三区做爰视频网站| 高清在线观看日韩| 午夜免费久久看| 夜夜爽夜夜爽精品视频| 国产精品国产三级国产三级人妇| 久久只精品国产| 精品国产凹凸成av人网站| 欧美一区二区福利视频| 在线成人av影院| 99精品桃花视频在线观看| 国产1区2区3区精品美女| 狠狠色丁香久久婷婷综合_中| 一个色综合av| 亚洲国产成人av好男人在线观看| 一区二区在线观看免费视频播放| 中文av一区特黄| 精品国产欧美一区二区| 日韩欧美www| 精品免费国产二区三区| 精品99久久久久久| 久久久综合视频| 国产婷婷色一区二区三区| 亚洲国产精品二十页| 欧美成人精品3d动漫h| 日韩视频免费直播| 精品日韩av一区二区| 精品欧美一区二区三区精品久久 | 91网站最新地址| 国产一区二区三区四区五区入口| 国产专区欧美精品| 国产成人av网站| va亚洲va日韩不卡在线观看| 国产成人亚洲精品狼色在线| 国内成人免费视频| 成人精品一区二区三区中文字幕| 国产成人激情av| 91在线国内视频| 欧美一级理论性理论a| 国产精品美女久久久久久久| 午夜在线成人av| 国v精品久久久网| 69av一区二区三区| 亚洲欧洲美洲综合色网| 久久精品国产成人一区二区三区 | 91亚洲精品一区二区乱码| 欧美一区日韩一区| ...av二区三区久久精品| 卡一卡二国产精品 | 玖玖九九国产精品| 色网站国产精品| 欧美激情一区二区三区在线| 丝袜诱惑制服诱惑色一区在线观看 | 日韩视频免费观看高清完整版在线观看 | 日韩欧美你懂的| 亚洲精选在线视频| 国产成人精品免费看| 91精品国产手机| 亚洲一区成人在线| 99国产一区二区三精品乱码| 久久久久久久久久久久久夜| 视频一区二区欧美| 欧美亚洲综合色| 亚洲欧美日韩一区| 成人妖精视频yjsp地址| 欧美zozozo| 日本成人超碰在线观看| 欧美色网站导航| 一区2区3区在线看| 色婷婷综合久久久久中文| 国产精品欧美极品| 成人性生交大片免费看视频在线| 欧美电视剧在线观看完整版| 亚洲成av人在线观看| 色88888久久久久久影院按摩| 国产精品第一页第二页第三页| 黑人精品欧美一区二区蜜桃| 91精品国产免费| 日韩av不卡一区二区| 欧美精选一区二区| 天天av天天翘天天综合网色鬼国产| 一本色道久久加勒比精品 | 一区二区三区电影在线播| 99精品视频在线免费观看| 国产精品成人免费在线| 成人视屏免费看| 国产精品成人免费| 色香蕉成人二区免费| 亚洲一二三四区不卡| 欧美三级中文字幕| 奇米影视在线99精品| 日韩欧美国产不卡| 国产九色sp调教91|