Perl にはハッシュを返すようなものはありません。
サブルーチンは引数としてリストを取り、結果としてリストを返すことができます。リストは配列とは大きく異なる生き物であることに注意してください。
あなたが書くとき
return %fileDetails;
これは次と同等です。
return ( 'something', 0, 'somethingelse', 7.68016712043654, 'else', 'burst' );
サブルーチンを呼び出してそのリストを取得するときにできることの 1 つは、それを新しいハッシュに割り当てることです。
my %result = fileDetailsSub();
キーと値のペアのリストを使用してハッシュを初期化できるため、これが機能します。(これ(foo => 42, bar => 43 )
は と同じことを覚えておいてください('foo', 42, 'bar', 43)
。
のように、ハッシュにバックスラッシュ参照演算子を使用すると、ハッシュを指すスカラーであるハッシュ参照\%fileDetails
が得られます。
同様に、 と書く\@array
と、配列参照が得られます。
ただし、 list で参照演算子を使用すると、リストへの参照は取得されません (リストは変数ではない (一時的なもの) ため、参照できません)。代わりに、参照演算子はリスト項目に分散します。 、 それで
\( 'foo', 'bar', 'baz' );
新しいリストを作成します:
( \'foo', \'bar', \'baz' );
(この場合、スカラー参照でいっぱいのリストを取得します。) サブルーチンの結果を試してみると、次のようDumper
になります。サブルーチンから返されたアイテムのリストに分散された参照演算子です。
したがって、1 つの解決策は、Dumper を使用する前に結果リストを実際のハッシュ変数に割り当てることです。もう1つは、サブからハッシュ参照(とにかくダンプしているもの)を返すことです:
return \%fileDetails;
...
my $details_ref = fileDetailsSub();
print Dumper( $details_ref );
# access it like this:
my $elem = $details_ref->{something};
my %copy = %{ $details_ref };
もっと楽しくするには、以下を参照してください。