在perl中初始化哈希引用

时间:2013-09-05 02:50:55

标签: perl hash reference

以下Perl代码打印Value:0。有没有办法解决它,除了在哈希引用传递给子例程之前向哈希添加一个虚拟键?

#!/usr/bin/perl 
use warnings;
use strict;

my $Hash;

#$Hash->{Key1} = 1234;

Init($Hash);

printf("Value:%d\n",$Hash->{Key});

sub Init
{
    my ($Hash) = @_;
    $Hash->{Key}=10;
}

2 个答案:

答案 0 :(得分:3)

初始化空哈希引用。

#!/usr/bin/perl 
use warnings;
use strict;

my $Hash = {};

Init($Hash);

printf("Value:%d\n",$Hash->{Key});

sub Init
{
    my ($Hash) = @_;
    $Hash->{Key}=10;
}

答案 1 :(得分:2)

我知道答案已被接受,但我认为值得解释为什么该程序首先采用这种方式。

直到Init函数($Hash->{Key}=10)的第二行才会创建哈希,它会自动创建哈希并在$Hash标量中存储引用。此标量是函数的本地标量,与脚本正文中的$Hash变量无关。

这可以通过修改Init函数处理其参数的方式来改变:

sub Init {
    my $Hash = $_[0] = {};
    $Hash->{'Key'} = 10;
}