首页 > 解决方案 > 在 Perl 中,如何访问在另一个包中定义的变量

问题描述

我有一个我无法控制的生成的 perl 脚本。它定义了一个包和一个散列。我需要从我可以完全控制的另一个 perl 脚本访问哈希。

生成的 perl 脚本:

package Animals;

my %pets = (
  'cat' => {
     'legs' => 4,
     'name' => 'Garfield',
     'speak' => 'Meowrrr!'
  },
  'bird' => {
     'legs' => 2,
     'name' => 'Tweety',
     'speak' => 'Pi pi pi!'
  },
  'dog' => {
     'legs' => 4,
     'name' => 'Pluto',
     'speak' => 'Wooof wooof!'
  }
)

我可以控制的另一个 perl 脚本:

sub main {
  #some other code
  require Animals;
  #some other code
  #print for instance the what the bird's saying
  print $Animals::pets->{'bird'}->{'speak'};
}

我尝试了各种不同的语法,但对我没有任何用处。我对 perl 完全陌生,所以这真的不足为奇......

标签: perlvariablesscopepackage

解决方案


由于分配给哈希是文件中的最后一件事,您可以使用

my %pets = do('Animals.pm');
$pets{bird}{speak}

但是“我有一个格式不可用的生成文件”的整个概念是没有意义的。当您更改生成的输出时,请确保使用正确的内容,例如 JSON 或 YAML。


推荐阅读