• ベストアンサー

オライリーの初めてのPerlの練習問題4.12の解答

sub totalを自作して以下のコードと組み合わせて走らせなさいという問題です。 my @fred = qw{1 3 5 7 9}; my $fred_total = &total(@fred); print "The total of \@fred is $fred_total.\n"; print "Enter some numbers on separate lines: "; my $user_total = &total(<STDIN>); print "The total of those numbers is $user_total.\n"; ここの、<STDIN>で、標準入力にどのように入力したら和が正確に表示されるのでしょうか? 1 3 5 7 9 エンター Ctrl+D 1,3,5,7,9 エンター Ctrl+D qw{1,3,5,7,9} エンター Ctrl+D などいろんな入力を試しましたが、どれも配列として受け取ってくれず、 Argument "1,3,5,7,9\n" isn't numeric などのエラーがでてしまいます。 on separate linesの意味がよくわかりません。 「線で区切れ」と言われても・・・、です。 標準入力からの配列の入力方法をご存知の方、ぜひご教授ください。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

単純に 1(エンター) 3(エンター) 5(エンター) 7(エンター) 9(エンター) CTRL+D(またはCTRL+Z 、windows系) で良いと思います。 セパレートラインズは、要するに改行で区切れということかと sub total { my $sum=0; foreach (@_){ $sum += $_; } return $sum; }

haniwannko
質問者

お礼

>セパレートラインズは、要するに改行で区切れという ことかと ズバリそのとおりでしたっ。 OSはfreeBSDなので、Ctrl+Dでした。 ご回答ありがとうございましたっ。

その他の回答 (1)

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

こんなんでどうでしょうか? 入力データはカンマで区切られた文字列です。 my @fred = qw{1,3,5,7,9}; my $fred_total = &total(@fred); print "The total of \@fred is $fred_total.\n"; print "Enter some numbers on separate lines: "; my $user_total = &total(<STDIN>); print "The total of those numbers is $user_total.\n"; sub total {   my $Param = shift;   my @Data = split(/,/, $Param); # カンマで区切られた値を@Data配列にセット(/,/を/ /に変えれば区切りはスペース)   my $Sum = 0;   foreach $Num (@Data) {     # 配列のよう素数だけループして合計を求める     $Sum += $Num;   }   return $Sum           # 求めた合計を返す }

haniwannko
質問者

お礼

なるほど。split関数を使うのもアリですね。 ご回答ありがとうございました。

関連するQ&A