• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >perl > Perl 哈希的创建和引用介绍

Perl 哈希的创建和引用介绍

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了perl 子函数哈希引用,perl 哈希,perl 哈希排序,perl 哈希数组,perl 哈希赋值等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

语法
创建'引用'仅有两种方法,使用它也是两种。

创建引用

创建规则 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]方式。

解决办法
下面是前面提出来的问题的解决方法,就是关于城市和国家名称的重新格式化。
&nbs

您可能想查找下面的文章:

  • Perl 哈希的创建和引用介绍
  • perl引用的相关知识分享

相关文章

  • Perl使用chdir的实例代码
  • perl 简明教程 perl教程集合
  • 关于Perl里面正则表达式规范
  • perl中的字符串操作函数chomp与chop介绍
  • Perl学习笔记之文件操作
  • fdupe 查找重复文件的Perl脚本代码
  • perl脚本实现限制ssh最大登录次数(支持白名单)
  • Perl一句话命令行编程中常用参数总结
  • Perl AnyEvent中的watcher实例
  • perl的POD权限问题处理

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Windows和Linux系统下perl连接SQL Server数据库的方法
    • Perl基本数组排序方法介绍
    • perl写的一个随机编故事的程序(rand随机函数)
    • perl的logwrapper使用实例代码
    • Perl中捕获警告信息、异常信息并写入日志详解
    • perl中heredoc使用说明
    • perl处理csv文件的小例子
    • perl中5个常见错误
    • Perl文件读取的经典用法分享
    • perl 读取所需文件的路径,然后打开相应的文件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有