my %book = (
'name' => 'abc',
'author' => 'monk',
'isbn' => '123-890',
'issn' => '@issn',
);
my %chapter = (
'title' => 'xyz',
'page' => '90',
);
如何通过引用将 %book 合并到 %chapter 中,这样当我写“$chapter{name}”时,它应该打印“abc”?
您可以将 的键/值复制%book
到%chapter
:
@chapter{keys %book} = values %book;
或者类似的东西
%chapter = (%chapter, %book);
现在可以say $chapter{name}
了,但是变化%book
没有体现在%chapter
。
您可以包括%book
通过参考:
$chapter{book} = \%book;
现在你可以了say $chapter{book}{name}
,而且变化确实得到了体现。
要拥有一个允许您说出$chapter{name}
并反映变化的界面,必须使用一些高级技术(这对于tie
魔术来说是相当微不足道的),但除非您真的必须这样做,否则不要去那里。
您可以编写一个子例程来检查一个键的哈希列表。该程序演示:
use strict;
use warnings;
my %book = (
name => 'abc',
author => 'monk',
isbn => '123-890',
issn => '@issn',
);
my %chapter = (
title => 'xyz',
page => '90',
);
for my $key (qw/ name title bogus / ) {
print '>> ', access_hash($key, \%book, \%chapter), "\n";
}
sub access_hash {
my $key = shift;
for my $hash (@_) {
return $hash->{$key} if exists $hash->{$key};
}
undef;
}
输出
Use of uninitialized value in print at E:\Perl\source\ht.pl line 17.
>> abc
>> xyz
>>