perl - 在 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 完全陌生,所以这真的不足为奇......
解决方案
由于分配给哈希是文件中的最后一件事,您可以使用
my %pets = do('Animals.pm');
$pets{bird}{speak}
但是“我有一个格式不可用的生成文件”的整个概念是没有意义的。当您更改生成的输出时,请确保使用正确的内容,例如 JSON 或 YAML。
推荐阅读
- reactjs - Kendo React - X 轴共享 Y 轴的图表
- bash - 使用别名在一行中运行多个 git 命令
- sql-server - 重新创建复制时的身份范围冲突
- python-3.x - pytest 由于 ModuleNotFoundError 而失败,但在使用“python -m pytest”时有效
- sql - Oracle SQL 获取上周日
- php - 格式化为特定 HTML 的递归树
- javascript - 如何切换自身/目标元素
- javascript - Javascript 生成器函数似乎没有被调用
- javascript - 如果在内容仍在滚动时点击它,移动设备上的滚动到顶部按钮不起作用
- scala - 使用带有列名列表的 Spark DataFrame 过滤器