加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

理解Perl中的引用

发布时间:2020-12-15 23:27:29 所属栏目:大数据 来源:网络整理
导读:我正在尝试理解Perl中的引用教程 perldoc perlreftut 到目前为止,使用下面的代码,我正在初始化一个空哈希 my %table 这是整个计划 #!/usr/bin/perl -w use strict;my %table;while (DATA) {chomp;my ($city,$country) = split /,/;#$table{$country} = [] un
我正在尝试理解Perl中的引用教程

perldoc perlreftut

到目前为止,使用下面的代码,我正在初始化一个空哈希

my %table

这是整个计划

#!/usr/bin/perl -w 
use strict;

my %table;

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

print @{$table{$country}};
}



__DATA__
Chicago,USA
Frankfurt,Germany
Berlin,Germany
Washington,USA
Helsinki,Finland
New York,USA

有人可以向我解释下面这一行,因为我很困惑,因为我在这里看到一个引用(我认为),但它被初始化为带有%table的哈希.

push @{$table{$country}},$city;

解决方法

你是 declaring哈希%表.声明是告诉Perl有一个词法范围的变量.初始化是指您第一次为变量赋值.你没有 initialize它,所以Perl提出了一个默认值.因为它是一个哈希值,所以它以一个空列表()开头,该列表为false.

你在这一行中有一个解引用运算符.

push @{$table{$country}},$city;

它将值$table {$country}作为数组引用,取消引用它,然后将$city推入该数组.有一个名为auto-vivification的功能可在推送值之前自动创建必要的数组引用.

因此,在输入的第一轮之后,您现在拥有以下数据结构:

%table = ( 'USA' => [ 'Chicago' ] )

%table是一个哈希值,但该哈希中的关键USA包含一个数组引用.

要在Perl中创建多级数据结构,需要参考.但第一级不需要作为参考.它可以是散列或数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读