1

我创建了一个全局哈希,当我尝试从 Perl 子例程中访问该哈希时,它无法访问它。

我已将其声明为:

`%HASH = ();`

并尝试在子程序中访问它:

$HASH{$key} = $value;

难道我做错了什么?

4

1 回答 1

8

在这里工作正常:

#!/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

请注意,在严格的情况下,您必须使用它们的包名称(在这种情况下)完全限定您的“全局”变量,%main::truth或者使用我们的. 今天没有限制(和警告)的编程不是一件好事™。事实上,激活它们会告诉你一些有用的东西。

于 2012-10-25T20:39:25.987 回答