1

これはおそらく簡単な質問ですが、私には理解できません。Data::Dumper で印刷すると、次のようなルーチンから返される構造があります。

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

しかし、私はそれからデータを取得することはできません。試し$data{value}ても何も得られません。私はPerlにあまり詳しくありません。誰でも私を助けることができますか?私は何が欠けていますか?

4

4 に答える 4

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これらは別個の変数ですが、それは非常に紛らわしいです。)

于 2012-07-11T17:37:35.347 に答える
1

それは、サブルーチンの書き方によって異なります。ハッシュへの参照を返していると思います。その場合、コードは次のようになります。

my $data = my_subroutine();
print $data->{value}, "\n";
于 2012-07-11T17:31:08.923 に答える
0

問題は、変数の TYPE を尊重していないことです。Perl は、%シジルで示されるハッシュと、 を使用したハッシュ参照をサポートしています$。2 番目はスカラーであり、データを取得するには逆参照する必要があります。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
于 2012-07-11T17:33:41.203 に答える
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 が匿名ハッシュへの参照であるためです。

于 2012-07-11T17:41:52.683 に答える