• ベストアンサー

レコードセットを配列のハッシュ形式で返すメソッド

DBI.pmのメソッドで、 selectall_arrayref()は配列の配列形式、 selectall_hashref()はハッシュのハッシュ形式でレコードセットを返しますが、 配列のハッシュ形式で返すメソッドは存在するのでしょうか。 ハッシュのキーは列名として、 ハッシュの値はORDER BY句で指定したとおりに整列された配列へのリファレンスとなるような、ハッシュを生成しようとしています

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

my $arrayref = $dbh->selectall_arrayref('select * from user_info', {Slice => +{}}); print Dumper($arrayref); --- $VAR1 = [      {       'name' => 'Alice',       'id' => '1'      },      {       'name' => 'Bob',       'id' => '2'      }     ];

zyousuke
質問者

お礼

こんにちは! なんとselectall_arrayref()でハッシュの配列を受け取ることができたのですね。 selectall_arrayref()の柔軟な用法を知らずに格好悪い質問をしてしまいました。 selectall_arrayref()の第二引数に戻り値の形式を指定できるのですね! ハッシュの配列がほしいときは{Slice => {}}とするのですね。 このとき{}ではなく+{}とすると、どうなるか試してみたのですが違いは分かりませんでした。 {}の前に+を付けるとどうなるのでしょうか??? また便利な関数Data::Dumper()を覚えました(^_^)b

その他の回答 (1)

回答No.2

> このとき{}ではなく+{}とすると、どうなるか試してみたのですが違いは分かりませんでした。 > {}の前に+を付けるとどうなるのでしょうか??? +{}と書くとハッシュリファレンスであると明示できます。 数は多くないですが、{}がハッシュリファレンスなのか、そうでないのか曖昧になることがあります。他人が書いたコードを見てビックリしないぐらいには理解したほうがよいでしょう。 use strict; use warnings; use Data::Dumper; use feature 'say'; sub proto_func ($) { say 'proto_func($)'; } proto_func {say 'hoge'}; # Odd number of elements in anonymous hash at foo.pl line 11. proto_func +{a => 1}; sub hashref_ambiguous { {@_} } # return {@_} sub hashref_strict { +{@_} } # return +{@_} my $ambiguous = hashref_ambiguous( 'a', 'b' ); my $strict = hashref_strict( 'a', 'b' ); print Dumper($ambiguous); # $VAR1 = 2; print Dumper($strict); # $VAR1 = { #      'a' => 'b' #     };

zyousuke
質問者

お礼

{}や+{}はselectall_arrayref()の引数専用の書き方ではなくPerl全体としての書き方だったのですね。 {}は空ハッシュ、+{}は空ハッシュへのリファレンスを意味していたのですね。 ご紹介のコードは+の有無によって違いが発生する例ですね。 このコードを解読するのもいささか時間がかかりました^^; 新しく覚えたワードはfeatureプラグマ、say関数です。 しかしながら配列の各要素はスカラー値と決まっているのでselectall_arrayref()の第二引数に書くときは+を省略して{}と書けるといったところでしょうか。

関連するQ&A

専門家に質問してみよう