• ベストアンサー

Perlで1~10まで全部足す。簡単に書くには?

題名のとおりなんですが。 Perlで1~10まで全部足すのに、 1番簡単に書いたらどんな感じなるでしょうか? (一回足すごとに結果は表示) 私は全然浮かばず、 $a = 1 print "$a\n" $b = $a + 1 print "$b\n" $c = $b +2 " …続く こんな感じのお粗末なものを書きました。 whileやforを使えばもっと簡単に書けると思いますが、 どなたかご存知でしたら教えてください。

noname#21798
noname#21798
  • Perl
  • 回答数5
  • ありがとう数3

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

  • ベストアンサー
  • bitsu
  • ベストアンサー率34% (39/113)
回答No.3

#変数の初期化 $a = 1; #$aが10以下の間繰り返し while ($a <= 10) { #&aの中身を表示 print "$a\n"; #$aに1足す a ++; } こんな感じでどうですかね?

noname#21798
質問者

お礼

ありがとうございます。 解説が書いてありよくわかりました。

その他の回答 (4)

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

print join "\n", map ( $a+=$_ , 1..10);

noname#21798
質問者

お礼

いつもの人回答ありがとうございます。 シンプルでこれが一番いいと思います。 強いて言えば、少し解説が欲しかったです。

  • bitsu
  • ベストアンサー率34% (39/113)
回答No.4

ごめんなさいNo1とNo3です。 間違えて2回送ってしまいました・・・orz

  • hara_peko
  • ベストアンサー率28% (11/38)
回答No.2

my $total; for (1..10) { $total += $_; print "$total\n"; } とか my $total; print +($total += $_), "\n" for (1..10); でいいですか?

noname#21798
質問者

お礼

ありがとうございます。 OKなんですけど、解説が欲しかったです。

  • bitsu
  • ベストアンサー率34% (39/113)
回答No.1

#変数の初期化 $a = 1; #$aが10になるまで繰り返し while ($a <= 10) { #&aの中身を表示 print "$a\n"; #$aに1足す a ++; } こんな感じでどうですかね?

関連するQ&A

  • Perlのキャプチャ

    プログラム #!/usr/bin/perl my $str = "abc,def,ghi"; ($a,$b,$c) = $str =~ /(.*),(.*),(.*)/; print $a,"\n"; print $b,"\n"; print $c,"\n"; 実行結果 abc def ghi このようなプログラムで ($a,$b,$c) = $str =~ /(.*),(.*),(.*)/;は それぞれ$a,$b,$cにabc,def,ghiが入ります. キャプチャしたすべてを変数に入れるならこの方法ですが, defだけが欲しいのに変数を3つ用意する必要がないと思います. 間違った表記ですが, ($b) = $str =~ /(.*),(.*),(.*)/$2/; 2つ目にキャプチャした$2が変数$bに入るような表記は出来ないのでしょうか?

  • perl初心者です。宜しくお願い致します。

    ファイルの容量が大きく。perlを使用してデータの集計をしています。 "A"がきたらflag1をたてなさい。 "B"がきたらflag2をたてなさい。 "C"がきたらflag3をたてなさい。 これでAとBとCを抜き取ること&AからCまでの時間を取得したのですが、 Bの数のmaxの値だけを抜き取りたいのですが、Bがきたときの数をすべて 出力してしまいます。下記の文だと、Bが4回きたら、1,2,3,4と出力してしまいます。 それで4だけを出力したいのですがどのように書き換えたらようか教えて頂けますでしょうか。 '----------------------------------------------------------------------------- open (IN,"< $ARGV[0].txt") or die; open (OUT,"> $ARGV[0]_out.txt") or die; $flag =0; my $a, $b, $c; $count = 0; ####################################################### while($line =<IN>){ ($time,$data) = split(/\s+/,$line); if($data eq "A") { $flag=1; $a = $time; #print OUT $line; #print OUT "\n"; } elsif($data eq "B"){ $flag=2; $count++; $count == $data; print OUT ("$count\n") } #print OUT ("$count\n"); elsif($data eq "C"){ $flag=0; $count=0; $b = $time; $c = $b - $a; print OUT ("time $c\n") } } -------------------------------------------------------------------------------

  • perl $b=$a=~/パターン/

    perlで $b=$a=~/パターン/; ($b)=$a=~/パターン/; のような表現をまれにみかけるのですが、 $b=$a=~/パターン/; の$bには何が得られるのでしょうか。 どんなときに使うのでしょうか。 ($b)=$a=~/パターン/; に/g修飾子を付けると 何も得られなくなってしまいますが なぜでしょうか。 例えば、 (1)のように $bには1が入っているので最初は /\d\d\d/に一致した数が 得られているのかと思ったのですが、 (2)のようにしても1のままです。 また、(3)のようにしてみても1のままです。 $bには何が得られるのでしょうか。 (4)では$bに1つ目の(\d)にマッチした結果が、 $cに2つ目の(\d)にマッチした結果が 入っているのでこれは理解できますが、 (5)のようにgを付けると、$b,$cには 何も入らなくなってしまいますが なぜでしょうか。 $a=~/(\d)\d(\d)/g;からは、 (1,3,4,6)のリストが返されて、 このリストの頭の2つの要素(1と3)が ($b,$c)に得られるのではないのでしょうか。 (1) my $a='a123b456c'; my $b=$a=~/\d\d\d/; my $c; print "$b\n";---> 1 (2) $b=$a=~/\d\d\d/g; print "$b\n";---> 1 (3) $b=$a=~/(\d)\d(\d)/g; print "$b\n";---> 1 (4) ($b,$c)=$a=~/(\d)\d(\d)/; print "$b $c\n";---> 1 3 (5) ($b,$c)=$a=~/(\d)\d(\d)/g; print "$b $c\n";--->空白 よろしくお願いします。 Windows7 , ActivePerl(v5.16.3)

    • ベストアンサー
    • Perl
  • perlの制御文について

    汚くて申し訳ありません。 以下のようなperlのプログラムを組んだのですが制御文が思い通りに動きません。 比較対象の数字の先頭の0を取れば正常に動くのですがどうしても0をはずすことはできないのです。 いろいろ試してみたのですがどうしてもうまきかないので知恵を貸してください。 $input = <STDIN>; if($input > 0130){ print "A\n"; } elsif(($input > 0120)&&($input < 0130)){ print "B\n"; } else{ print "C\n"; }

  • Perlで複数の値を返す良い方法はありますか?

    以下のように多重代入できるかと思って確かめましたが、 結果は以下の通りでした。 $a=[] $b=[20] 方法はいろいろとありそうですが、Perl苦手でわかりません。 sub test{ local $cc = ''; local $s = ''; $cc = 'AAAAA'; $s = 20; # return $cc, $s; } $a, $b = &test; print "\$a=[$a]\n"; print "\$b=[$b]\n"; exit; __END__

    • ベストアンサー
    • Perl
  • perlの構文がおかしいようです。

    構文は以下の通りです。IF文のところがおかしいようですが、どこに間違いがあるのか教えていただけないでしょうか。 sub ippack { my ($a, $b, $c, $d) = @_; return ($a << 24) | ($b << 16) | ($c << 8) | $d; } sub ipunpack() { my ($n) = @_; return (($n>>24)&0xFF,($n>>16)&0xFF,($n>>8)&0xFF,$n&0xFF); } open (IN,"<useIP.txt") while(my $input = <IN>) { if ($input =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+) ([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/){; my $n = &ippack($1,$2,$3,$4); my $m = &ippack($5,$6,$7,$8); $n = $n & $m; $m = ~$m & 0xFFFFFFFF; for(my $i = 0; $i <= $m; $i++) { print join(".", &ipunpack($n+$i))."\n "; } } if-else($input =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/);{ print "$input\n"; } print "\n"; }

    • ベストアンサー
    • Perl
  • Perlの戻り値について

    配列の戻り値が理解できていないのですが、 Perlで正しく動作させるためには どのように記述したら良いのでしょうか? 戻り値の動作を詳しく書いてある(出来れば図入りで) 本はありますか? 例) sub a { my @a = ('A'); return (@a, "B", 2); } my (@a, $b, $c) = &a; print "a=[@a] b=[$b] c=[$c]\n"; # a=[A] b=[B] c=[2] # これを期待していたが # a=[A B 2] b=[] c=[] # こちらになる

    • ベストアンサー
    • Perl
  • Perl あっていますでしょうか?

    " " と ' ' の相違は? ""の内にある変数名は、その値に変換されます。 ''の内にあるものは、そのまま文字列として扱われます。 エスケープシーケンスは "" の内に記述した場合のみです。 $a="Hello"; 文字列Helloを変数$aに代入する。 $b="$a"; 変数$aを変数$bに代入する。 $c='$a'; $aという文字列を変数$cに代入する。 ""の内で""を使うことは出来ません。 ''の内で''も使うことは出来ません。 使うときはエスケープシーケンスを使います。 print "\"Hello\"\n"; 文字列"Hello"を表示させます。 print "'Hello'"; 'Hello'を表示させます。 ""の内で''又は''の内で""を使うことは出来ます。 $a="あいうえお"; 文字列 あいうえお を変数$aに代入する。 print "\n$a\n"; 改行して あいうえお表示して 改行する。 print '\n$a'; 文字列\n$aを表示する。 文字列の結合 . (ピリオド)を使って前後の文字列を連結することが可能です。 $a="Hello"." "."World"; 変数$aに文字列Helloと半角スペースとWorldをつないだものを代入します。 $a="c"x3; 変数$aに文字cを3回つないだものを代入します。 $a="A"; 文字Aを変数$aに代入する。 $b="B"; 文字Bを変数$bに代入する。 $c="C"; 文字Cを変数$cに代入する。 print $a.$bx3.$c; 文字Aと文字Bを3回結合したものと文字Cを表示する。 画面にはabbbcと表示されます。

    • ベストアンサー
    • Perl
  • perlの型と8進数、10進数

    ある文字列からsubstrで3桁の数値を切り取り、計算に使いたいのですがゼロ詰めの数値の場合8進数になると思っていたのですが、文字列の場合は10進数の数値になります。 これは仕様でしょうか? perlは型がないので、AもBもCも同じ値だと思っていましたが、 そのあたりについて詳しい方、違いを知っている方教えて頂けますか? #-- A -- my $s = "007008009010"; print int( substr($s, 0, 3) ) . "\n"; print int( substr($s, 3, 3) ) . "\n"; print int( substr($s, 6, 3) ) . "\n"; print int( substr($s, 9, 3) ) . "\n"; print; #-- B -- print int("007") . "\n"; print int("008") . "\n"; print int("009") . "\n"; print int("010") . "\n"; print; #-- C -- print int(007) . "\n"; # 7 #print int(008) . "\n"; #print int(009) . "\n"; print int(010) . "\n"; # 8

    • ベストアンサー
    • Perl
  • Perlで<select multiple>の複数データを取得する方法

    Perlで、<select multiple>のデータを取得する方法を教えてください。 以下のように複数選択できるselectタグがあります。これで送信したデータを Perlで受けると、ARRAY(0x9bf0d18)のようになってしまいます。 環境は、以下のとおりです。(必要な部分だけ記載しています) ■送信元のHTML <select name="test" size="3" multiple> <option value="a">a <option value="b">b <option value="c">c </select> ■受け側のPerl use CGI_Lite; my %in = $cgi->parse_form_data(); print"Content-type: text/html\n\n"; print"$in{'test'}\n"; ■結果 ARRAY(0x9bf0d18) 以上、よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう