在Perl中的子例程中访问全局哈希

在Perl中的子例程中访问全局哈希,perl,hash,global-variables,subroutine,Perl,Hash,Global Variables,Subroutine,我创建了一个全局散列,当我试图从Perl子例程中访问该散列时,它无法访问它 我已宣布: `%HASH = ();` 并尝试在子例程中访问它,如下所示: $HASH{$key} = $value; 我做错什么了吗?在这里很好: 输出: 请注意,在ures下,在本例中,您必须使用包名%main::truth完全限定全局变量,或者使用创建一个词汇范围的局部名称。而今天,没有严格限制和警告的编程不是一件好事™. 事实上,激活它们会告诉您一些有用的信息。在这里可以很好地工作: 输出: 请注意,在ure

我创建了一个全局散列,当我试图从Perl子例程中访问该散列时,它无法访问它

我已宣布:

`%HASH = ();`
并尝试在子例程中访问它,如下所示:

$HASH{$key} = $value;
我做错什么了吗?

在这里很好:

输出:

请注意,在ures下,在本例中,您必须使用包名%main::truth完全限定全局变量,或者使用创建一个词汇范围的局部名称。而今天,没有严格限制和警告的编程不是一件好事™. 事实上,激活它们会告诉您一些有用的信息。

在这里可以很好地工作:

输出:


请注意,在ures下,在本例中,您必须使用包名%main::truth完全限定全局变量,或者使用创建一个词汇范围的局部名称。而今天,没有严格限制和警告的编程不是一件好事™. 事实上,激活它们会告诉您一些有用的信息。

是否在同一文件中的子文件之前声明了哈希?您是否有“使用严格”和“使用警告”功能?发布更多的代码展示一些相关的代码来演示你的问题。感谢大家的帮助。我使用:push@{$hash{$key}},$value在数组中推送哈希值,但没有对数组进行排序,因此找不到该值,在我看来,它似乎无法访问该值。我的错,谢谢你的帮助:@iDev你不是在一个数组中,而是在你的散列中的一个匿名数组引用中。请注意,如果它不存在,将创建它。有关详细信息,请参阅哈希上的输出。在中了解有关引用的更多信息。在几乎所有的情况下,使用和帮助发现错误的东西。谢谢你,我们。。这很有启发性!:是否在同一文件中的子文件之前声明哈希?您是否有“使用严格”和“使用警告”功能?发布更多的代码展示一些相关的代码来演示你的问题。感谢大家的帮助。我使用:push@{$hash{$key}},$value在数组中推送哈希值,但没有对数组进行排序,因此找不到该值,在我看来,它似乎无法访问该值。我的错,谢谢你的帮助:@iDev你不是在一个数组中,而是在你的散列中的一个匿名数组引用中。请注意,如果它不存在,将创建它。有关详细信息,请参阅哈希上的输出。在中了解有关引用的更多信息。在几乎所有的情况下,使用和帮助发现错误的东西。谢谢你,我们。。这很有启发性!:在这种情况下,“我们的”是绝对必要的吗?我用“我的”试过了,效果也不错。据我所知,“我们的”是当你想与整个软件包共享时使用的。在这种情况下,“我们的”是绝对必要的吗?我用“我的”试过了,效果也不错。据我所知,当您想与整个软件包共享此信息时,会使用“我们的”。
#!/usr/bin/env perl

use strict;
use warnings;
use feature 'say';

our %truth = (); # "global" truth: lexical name
                 # for the package variable %main::truth

sub add_to_truth {
    my ($thing, $value) = @_;
    $truth{$thing} = $value;
}

add_to_truth(answer => 42);
say $truth{answer};
42