- ベストアンサー
オライリーの初めての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の意味がよくわかりません。 「線で区切れ」と言われても・・・、です。 標準入力からの配列の入力方法をご存知の方、ぜひご教授ください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
単純に 1(エンター) 3(エンター) 5(エンター) 7(エンター) 9(エンター) CTRL+D(またはCTRL+Z 、windows系) で良いと思います。 セパレートラインズは、要するに改行で区切れということかと sub total { my $sum=0; foreach (@_){ $sum += $_; } return $sum; }
その他の回答 (1)
- PrintScree
- ベストアンサー率25% (538/2091)
こんなんでどうでしょうか? 入力データはカンマで区切られた文字列です。 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 # 求めた合計を返す }
お礼
なるほど。split関数を使うのもアリですね。 ご回答ありがとうございました。
お礼
>セパレートラインズは、要するに改行で区切れという ことかと ズバリそのとおりでしたっ。 OSはfreeBSDなので、Ctrl+Dでした。 ご回答ありがとうございましたっ。