Perlのマップからhashrefのリストを返すにはどうすればよいですか?
質問
次のコードはほとんど大丈夫です:
my $results = { data => [
map {
my $f = 次のコードはほとんど大丈夫です:
my $results = { data => [
map {
%{次のコードはほとんど大丈夫です:
my $results = { data => [
map {
my $f = 次のコードはほとんど大丈夫です:
<*>
私だけが次のようにしたいだけです:
<*>
ただし、構文エラーが発生します。どうすれば自分のやりたいことを実行できますか、または現在のバージョンが最高のバージョンですか?
更新:以前の余分なセミコロンについて申し訳ありません。ここは遅いです。どうやって見逃したかわかりません。みんなありがとう!
->TO_JSON;
$f->{display_field} = 次のコードはほとんど大丈夫です:
<*>
私だけが次のようにしたいだけです:
<*>
ただし、構文エラーが発生します。どうすれば自分のやりたいことを実行できますか、または現在のバージョンが最高のバージョンですか?
更新:以前の余分なセミコロンについて申し訳ありません。ここは遅いです。どうやって見逃したかわかりません。みんなありがとう!
->display_field($q);
$f;
} $rs->all
]};
私だけが次のようにしたいだけです:
<*>
ただし、構文エラーが発生します。どうすれば自分のやりたいことを実行できますか、または現在のバージョンが最高のバージョンですか?
更新:以前の余分なセミコロンについて申し訳ありません。ここは遅いです。どうやって見逃したかわかりません。みんなありがとう!
->TO_JSON},
display_field => 次のコードはほとんど大丈夫です:
my $results = { data => [
map {
my $f = 次のコードはほとんど大丈夫です:
<*>
私だけが次のようにしたいだけです:
<*>
ただし、構文エラーが発生します。どうすれば自分のやりたいことを実行できますか、または現在のバージョンが最高のバージョンですか?
更新:以前の余分なセミコロンについて申し訳ありません。ここは遅いです。どうやって見逃したかわかりません。みんなありがとう!
->TO_JSON;
$f->{display_field} = 次のコードはほとんど大丈夫です:
<*>
私だけが次のようにしたいだけです:
<*>
ただし、構文エラーが発生します。どうすれば自分のやりたいことを実行できますか、または現在のバージョンが最高のバージョンですか?
更新:以前の余分なセミコロンについて申し訳ありません。ここは遅いです。どうやって見逃したかわかりません。みんなありがとう!
->display_field($q);
$f;
} $rs->all
]};
私だけが次のようにしたいだけです:
<*>
ただし、構文エラーが発生します。どうすれば自分のやりたいことを実行できますか、または現在のバージョンが最高のバージョンですか?
更新:以前の余分なセミコロンについて申し訳ありません。ここは遅いです。どうやって見逃したかわかりません。みんなありがとう!
->display_field($q),
}, $rs->all
]};
私だけが次のようにしたいだけです:
<*>
ただし、構文エラーが発生します。どうすれば自分のやりたいことを実行できますか、または現在のバージョンが最高のバージョンですか?
更新:以前の余分なセミコロンについて申し訳ありません。ここは遅いです。どうやって見逃したかわかりません。みんなありがとう!
->TO_JSON;
$f->{display_field} = 次のコードはほとんど大丈夫です:
<*>
私だけが次のようにしたいだけです:
<*>
ただし、構文エラーが発生します。どうすれば自分のやりたいことを実行できますか、または現在のバージョンが最高のバージョンですか?
更新:以前の余分なセミコロンについて申し訳ありません。ここは遅いです。どうやって見逃したかわかりません。みんなありがとう!
->display_field($q);
$f;
} $rs->all
]};
私だけが次のようにしたいだけです:
<*>ただし、構文エラーが発生します。どうすれば自分のやりたいことを実行できますか、または現在のバージョンが最高のバージョンですか?
更新:以前の余分なセミコロンについて申し訳ありません。ここは遅いです。どうやって見逃したかわかりません。みんなありがとう!
解決
map {...}
の後のコンマを省略する必要があるとPerlが考えるため、構文エラーが発生します。これは、そのマップを式ではなくブロックとして解析しているためです。 +
を前に付けると修正されます。また、匿名ハッシュにセミコロンを含めることはできません:
my $results = { data => [
map +{
# ^----------------- plus sign added
%{ map {...}
の後のコンマを省略する必要があるとPerlが考えるため、構文エラーが発生します。これは、そのマップを式ではなくブロックとして解析しているためです。 +
を前に付けると修正されます。また、匿名ハッシュにセミコロンを含めることはできません:
<*>->TO_JSON},
display_field => map {...}
の後のコンマを省略する必要があるとPerlが考えるため、構文エラーが発生します。これは、そのマップを式ではなくブロックとして解析しているためです。 +
を前に付けると修正されます。また、匿名ハッシュにセミコロンを含めることはできません:
<*>->display_field($q);
# ^---- should be comma or nothing
}, $rs->all
]};
他のヒント
問題は、 {
が「匿名ハッシュリファレンスを開始する」ことを意味するかどうかを判断するのに、Perlが先を見通していないことです。または「コードブロックを開始する」。 (理想的には)対応する}
を見て、コンマがあるかどうかを確認し、それに応じて動作しますが、動作しません。ほんの少し先を見て、推測しようとします。そして今度は間違っており、そこにあるべきではないコンマについての構文エラーを受け取ります。ただし、移動しないようにすべきです。
perldoc -f map
はすべてを教えてくれますこれについて。基本的に、 + {
を入力すると、Perlはこれが「コードブロックではない」ことを理解していると言います。そしてそれがハッシュ参照だと思います。これがおそらく構文エラーの原因です。別の提案として、それは map({HASH STUFF}、$ rs-&gt; all)
と言ってもうまくいくかもしれません-私は、Perlがここのコード参照だとは思わないでしょう。
機能しませんでしたが、 $ rs
または-&gt; TO_JSON
または $ q
という変数がありませんとにかくこれを機能させることはできませんでした。これがお役に立てば幸いです。そうでない場合は、もう少しコードを投稿してください。心配しないで、噛まないでください。
また、私たちがそれに取り組んでいる間に、このように書いてみませんか:
my $results;
$results->{data} = [ map MAGIC MAP STUFF, $rs->all ];
特に $ results
に大量のものを一度に追加する場合は、おそらく読みやすくなる可能性があります。
どのような構造を探しているのか完全にはわかりません。最初の例の map
は、ハッシュリファレンスのリスト( $ f
のすべてのバージョン)をすでに返しています。
2番目の例と同様の構文が必要な場合は、ほぼ正解です。マップブロック内の余分なセミコロンを取り除き、1組のカーリーを使用して匿名のハッシュrefを作成する必要があります。
次のようなもの:
my $results = { data => [
map { { %{どのような構造を探しているのか完全にはわかりません。最初の例の map
は、ハッシュリファレンスのリスト( $ f
のすべてのバージョン)をすでに返しています。
2番目の例と同様の構文が必要な場合は、ほぼ正解です。マップブロック内の余分なセミコロンを取り除き、1組のカーリーを使用して匿名のハッシュrefを作成する必要があります。
次のようなもの:
<*>->TO_JSON},
display_field => どのような構造を探しているのか完全にはわかりません。最初の例の map
は、ハッシュリファレンスのリスト( $ f
のすべてのバージョン)をすでに返しています。
2番目の例と同様の構文が必要な場合は、ほぼ正解です。マップブロック内の余分なセミコロンを取り除き、1組のカーリーを使用して匿名のハッシュrefを作成する必要があります。
次のようなもの:
<*>->display_field($q)
}
} $rs->all
]};
常にブロック形式でマップを使用し、コードを構造化して、簡単に分離できるようにします。エクスプレッションフォームを使用するために、オープニングカーリーの前に+を付けることができますが、それはあなたにとって本当に重要ですか?
他のすべてのことは別として、最初の例は問題ありません。次に進み、実際の問題を解決します。 :)