我试图从Perl哈希中获取数据的方式有什么问题?

时间:2012-07-11 17:27:52

标签: perl

这可能是一个简单的问题,但我无法弄清楚。我有一个从例程返回的结构,当我用Data :: Dumper打印时,看起来像

$VAR1 = {
  'date' => 'May 15, 2012',
  'value' => '0.20'
};

但我无法从中获取数据。如果我尝试$data{value}我什么也得不到。我对Perl并不熟悉。谁能帮我?我错过了什么?

4 个答案:

答案 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是对匿名哈希的引用。