这可能是一个简单的问题,但我无法弄清楚。我有一个从例程返回的结构,当我用Data :: Dumper打印时,看起来像
$VAR1 = {
'date' => 'May 15, 2012',
'value' => '0.20'
};
但我无法从中获取数据。如果我尝试$data{value}
我什么也得不到。我对Perl并不熟悉。谁能帮我?我错过了什么?
答案 0 :(得分:6)
您的$VAR1
是哈希引用,而不仅仅是哈希。因此,您需要取消引用变量以获取数据:
$VAR1->{date}
$VAR1->{value}
这是Perl,所以TMTOWTDI(有多种方法可以做到):
$$VAR1{date}
$$VAR1{value}
但是,明确的->
箭头操作符通常更容易理解;左边的操作数是一个引用,右边的位访问它($hash->[0]
表示数组引用; $hash->{item}
表示哈希引用。)
你可以改用:
my %VAR2 = ('date' => 'May 15, 2012', 'value' => '0.20');
现在你可以写:
$VAR2{date}
$VAR2{value}
(我本可以同时使用%VAR1
和$VAR1
;它们是不同的变量 - 但这会让人感到特别困惑。)
答案 1 :(得分:1)
这取决于子程序的编写方式。我猜它会将一个引用返回给一个哈希,在这种情况下你的代码应该是这样的:
my $data = my_subroutine();
print $data->{value}, "\n";
答案 2 :(得分:0)
问题是你没有尊重变量的TYPE。 Perl支持哈希,由%
sigil表示,哈希引用使用$
。第二个是标量,必须取消引用才能获取数据。使用perl的调试器:
DB<1> $VAR1 = { 'date' => 'May 15, 2012', 'value' => '0.20' };
DB<2> x $VAR1->{'date'}
0 'May 15, 2012'
DB<3> x $VAR1->{'value'}
0 0.20
答案 3 :(得分:0)
#!/bin/perl
$VAR1 = { 'date' => 'May 15, 2012', 'value' => '0.20' };
$date = $$VAR1{date};
$value = $$VAR1{value};
print "$date\n";
print "$value\n"
打印出来:
May 15, 2012
0.20
原因是$ VAR1是对匿名哈希的引用。