• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「Learning Perl」(第4章、問3))

Learning Perl 第4章問3:Perl初心者の問題について

このQ&Aのポイント
  • Perl初心者が「Learning Perl」(第5版)の4章の問3でつまずいています。
  • 質問コードの結果が期待通りではなく、$barneyの値が1となってしまいます。
  • 質問者は、$barneyの値が100になるように修正する方法を知りたいとしています。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

above_average では、「@list」すなわち、平均値以上の値を持つ要素の配列を返してます。 一方、その呼び出し部では「my $barney = above_average(100, 1..10);」で、$barney というスカラー変数で受けています。 配列をスカラーコンテキストで評価すると、その配列の要素数になりますので、 $barney には、above_average の結果の「平均値以上の値を持つ要素の数」が代入されます。 つまり、1になります。 「100」すなわち、結果の最初の要素を得たいのなら、 ---ここから--- my($barney) = above_average(100, 1..10); ---ここまで--- これで、「($barney)」という配列に、above_average の返した配列が代入されますので、 $barney には、その最初の要素である100が代入されます。 あるいは、平均以上の要素を全て表示したいのなら、 ---ここから--- my @barney = above_average(100, 1..10); print "\@barney = @barney\n"; ---ここまで--- のように配列変数で受けてください。

study_perl
質問者

お礼

さっそく素晴らしい回答をくださいまして、ありがとうございました。 本のページ上でも、ちゃんと my @barney = above_average(100, 1..10); print "\@barney = @barney\n"; となっていました。 @を$と一文字書き間違えてただけで、コンパイルエラーにもならずに全然違った結果が得られるんだということを、身に染みて理解できました。 たいへん勉強になりました。ありがとうございました。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

リストをスカラーに代入すれば、リストの長さが入ります。

study_perl
質問者

お礼

回答、ありがとうございました。

関連するQ&A