これはおそらく簡単な質問ですが、私には理解できません。Data::Dumper で印刷すると、次のようなルーチンから返される構造があります。
$VAR1 = {
'date' => 'May 15, 2012',
'value' => '0.20'
};
しかし、私はそれからデータを取得することはできません。試し$data{value}
ても何も得られません。私はPerlにあまり詳しくありません。誰でも私を助けることができますか?私は何が欠けていますか?
これはおそらく簡単な質問ですが、私には理解できません。Data::Dumper で印刷すると、次のようなルーチンから返される構造があります。
$VAR1 = {
'date' => 'May 15, 2012',
'value' => '0.20'
};
しかし、私はそれからデータを取得することはできません。試し$data{value}
ても何も得られません。私はPerlにあまり詳しくありません。誰でも私を助けることができますか?私は何が欠けていますか?
あなた$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
これらは別個の変数ですが、それは非常に紛らわしいです。)
それは、サブルーチンの書き方によって異なります。ハッシュへの参照を返していると思います。その場合、コードは次のようになります。
my $data = my_subroutine();
print $data->{value}, "\n";
問題は、変数の 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
#!/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 が匿名ハッシュへの参照であるためです。