Perl - 未定义的变量 - 为什么?
Perl - undefind variable - why?
为什么会给出如下输出? $a1 已定义...
package A1;
use Hash::Merge;
use Data::Dumper;
sub new
{
my $class = shift;
my $self =
{
length => 2,
};
return bless $self, $class;
}
1;
my $a1 = A1->new();
print("a1 = " . ref($a1) . "\n");
my %a = {'1' => $a1};
my $a3 = \%a;
print( Dumper($a3));
输出:
a1 = A1
$VAR1 = {
'HASH(0x247c568)' => undef
};
我希望值是 'A1(0x...)' 而不仅仅是未定义的...
花括号引入了哈希引用,但%a
是哈希,不是引用。所以把reference字符串化作为key,没有什么东西可以作为value,所以还是undefined
尝试
my %a = (1 => $a1);
相反。
你也可以直接创建引用而不用 %a
:
my $a3 = {'1' => $a1};
你应该总是use warnings;
。 Perl 会告诉你
Reference found where even-sized list expected at ...
为什么会给出如下输出? $a1 已定义...
package A1;
use Hash::Merge;
use Data::Dumper;
sub new
{
my $class = shift;
my $self =
{
length => 2,
};
return bless $self, $class;
}
1;
my $a1 = A1->new();
print("a1 = " . ref($a1) . "\n");
my %a = {'1' => $a1};
my $a3 = \%a;
print( Dumper($a3));
输出:
a1 = A1
$VAR1 = {
'HASH(0x247c568)' => undef
};
我希望值是 'A1(0x...)' 而不仅仅是未定义的...
花括号引入了哈希引用,但%a
是哈希,不是引用。所以把reference字符串化作为key,没有什么东西可以作为value,所以还是undefined
尝试
my %a = (1 => $a1);
相反。
你也可以直接创建引用而不用 %a
:
my $a3 = {'1' => $a1};
你应该总是use warnings;
。 Perl 会告诉你
Reference found where even-sized list expected at ...