0
my %book = (
'name' => 'abc',
'author' => 'monk',
'isbn' => '123-890',
'issn' => '@issn',           
);

my %chapter = (
'title' => 'xyz',
'page' => '90',             
);

如何通过引用将 %book 合并到 %chapter 中,这样当我写“$chapter{name}”时,它应该打印“abc”?

4

2 回答 2

3
  1. 您可以将 的键/值复制%book%chapter

    @chapter{keys %book} = values %book;
    

    或者类似的东西

    %chapter = (%chapter, %book);
    

    现在可以say $chapter{name}了,但是变化%book没有体现在%chapter

  2. 您可以包括%book通过参考:

    $chapter{book} = \%book;
    

    现在你可以了say $chapter{book}{name},而且变化确实得到了体现。

要拥有一个允许您说出$chapter{name}并反映变化的界面,必须使用一些高级技术(这对于tie魔术来说是相当微不足道的),但除非您真的必须这样做,否则不要去那里。

于 2013-07-19T06:59:03.710 回答
1

您可以编写一个子例程来检查一个键的哈希列表。该程序演示:

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
>> 
于 2013-07-19T09:09:25.950 回答