• ベストアンサー

Perlのスクリプトで意味が分かりません

for ( 1..$winfo{'LIMIT'} ) { my ( $wkey ) = sprintf( "%03d",$_ ); $wnum{ $wkey } = sprintf( "%s名",$_ ); } とあるのですが、forの括弧の中が、普通と違うので意味が分かりません。 どのような意味になるのでしょうか。 宜しくお願い致します。

  • Perl
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • sample_
  • ベストアンサー率76% (20/26)
回答No.3

for文と言えば、 for(my $i=0, $i<@hoge.length; $i++){  #何かの処理 } を想像されるかもしれませんが、foreach文のeachを省略しても perlは、foreach文だなっと解釈して処理してくれます。 つまり省略せずにきちんと書くと foreach my $value ( 1..$winfo{'LIMIT'} ) { my ( $wkey ) = sprintf( "%03d",$value ); $wnum{ $wkey } = sprintf( "%s名",$value ); } のようになり上記の場合 (1..$winfo{'LIMIT'})の1個1個の要素が $valueに格納されて処理がループされるところが my $valueの部分を省略すると暗黙的に$_に格納されることを利用して foreach ( 1..$winfo{'LIMIT'} ) { my ( $wkey ) = sprintf( "%03d",$_ ); $wnum{ $wkey } = sprintf( "%s名",$_ ); } となりforeachはforと書いてもperlではforeachだと認識してくれるので for ( 1..$winfo{'LIMIT'} ) { my ( $wkey ) = sprintf( "%03d",$_ ); $wnum{ $wkey } = sprintf( "%s名",$_ ); } となってます。 ( 1..$winfo{'LIMIT'} )の中身は他の方より説明がありますので 省略させてもらいます。 perlでは省略形式がやたらと多いんで最初は戸惑うことが多いかと思いますが、案外すぐになれることができますんでがんばってください!

その他の回答 (2)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

#1さんと同じになりますが範囲演算子ってやつですね。 覚えておくとたまに便利です。 http://www.rfs.jp/sb/perl/02/03.html#8.%E7%AF%84%E5%9B%B2%E6%BC%94%E7%AE%97%E5%AD%90

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

1から$winfo{'LIMIT'}までという意味だと思いますが。 たとえば$winfo{'LIMIT'}が10だったら1から10ですね。

関連するQ&A

  • Perlスクリプト (); wantarry, (localtime)[0..2]; について。

    人様の作ったスクリプトの解析をしています。 下記のスクリプトについて質問があります。 my $now = zikoku(); print "$now です。\n"; sub zikoku { my ($sec, $min, $hour) = (localtime)[0..2]; if (wantarray) { return ($hour, $min, $sec); } else { return sprintf "%02d:%02d:%02d", $hour, $min, $sec; } } まず、zikoku(); の部分なのですが、現在自分はサブルーチンは&で呼び出すものとしか認識しておらず、ここではどのような用法で使われているのかがわかりません。();は何なのでしょうか?? また、localtime関数の次の[0..2]の意味が分かりません。 そして、wantarray関数自体の働きは一応理解しているのですが、ここではwantarray関数にどのような意味があるのかが分かりません。 分かる方いらっしゃいましたらご教授頂けると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perl このプログラムの解説をお願いします

    Perl初心者です。 簡易なタイマーのプログラムです。 (1)$s=shift||60; この部分の shift と || はどういった意味合いを持っているのでしょうか。 (2)for(1..$s) このfor構文の括弧内はどういった意味合いを持っているのでしょうか。 $s=shift||60; $|=1; for(1..$s){ sleep 1; print"$_\r" } print"\n"

    • ベストアンサー
    • Perl
  • Perlでsprintf("%02d",$mont

    Perlでsprintf("%02d",$month)ってどうゆう意味ですか?

    • ベストアンサー
    • Perl
  • この記号の意味って何ですか?

    ΔS~ -R[3/2lnN+3,47] この式の「~」これってどういうことを意味しているんでしょうか? あと、[ ]この括弧は、この括弧( )とは違うんでしょうか? 違うなら、この括弧[ ]はどういう意味なんでしょうか?

  • perlについての質問です

    &あああ("ファイル名1", "AGT"); &あああ("ファイル名2", "ACA"); &あああ("ファイル名3", "TAT"); &あああ("ファイル名4", "TGA"); sub あああ{ open(FILE, "処理させるファイル") or die "$!"; my ($file, $tag) = @_; open(NEWFILE, "> $file") or die "$!"; my $x = 0; my @ti; while(<FILE>){ if($_ =~ "^>"){ $x ++; $ti[$x] = $_; } elsif($_ =~ "^$tag"){ print NEWFILE $ti[$x].$_; } } print "$x\n"; close NEWFILE; } このプログラムをサブルーチンではなく forかなんかで実行させ 自由にファイル数と$tagを設定し 実行できるようにしたいのですが できますでしょうか>< forをまわす回数を指定しSTDINなんかで指定し そのforの中でファイル処理に必要な条件や 吐き出すファイルの名前をSTDINで指定するようなものを書きたいです ちなみにperl初心者です 質問が意味不明かもしれないです>< よろしくおねがいします

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

    はじめましてstaraman_sです。 今はPerl/CGI辞典という本を使いながらPerlの勉強をしていますが、インターネットで検索しても解決できず困っています。 皆さんのお力をお貸しください。 疑問点 sub getCookie { my ($tmp, $name, $value); for $tmp (split(/; */, $ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/, $tmp); $value =~ s/\%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $COOKIE{$name} = $value; } } 本の中の掲示板のプログラムの中に上記のようなプログラムが書いてあるのですが、最後の方に$COOKIE{$name} = $value;とあります。変数$COOKIEの後に中括弧を使い{$name}と書いているのは、どういった文法からきているのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • perl-cgiのリネームについて

    Perl-CGIで ABCという、ディレクトリの中のファイルの名前を、ランダムな名前に変換したいのですがうまくいきません。 これを動作させるたびになぜか、どんどんファイルが減っていってしまいます。 どなたか、教えていただけないでしょうか? 宜しくお願い致します。 #!/usr/local/bin/perl print "Content-Type: text/plain\n\n"; $| = 1; my ($sec,$min,$hour,$mday,$mon,$year,$wno) = localtime(time); my ($nowtime) = sprintf("%02d_%02d_%02d_%02d_%02d_",$year+1900,$mon+1,$mday,$hour,$min,$sec); #ディレクトリのファイル個数を記録する $dir = "./ABC/"; # ← ディレクトリを変数にセットする opendir DIR, $dir; @files = grep { !m/^(\.|\.\.)$/g } readdir DIR; # ← 「.」 「..」 以外のファイルを取得 close DIR; srand; for (my $i = @files; --$i; ) { my $j = int rand ($i + 1); next if $i == $j; @files[$i, $j] = @files[$j, $i]; } $num = 0; use File::Copy; foreach(@files){ $getpath = "$dir"."$_"; if( copy($getpath, "$dir".$nowtime.$num++.'.dat') eq 1){ $num++; unlink($getpath);}else{print "Copy Error"; exit;} }

    • ベストアンサー
    • CGI
  • 英文の意味が分かりません

    「I was very happy for my older sister 」 という例文に出くわしました。 さっぱり意味が分からないのですが、「be happy for」は、一つの熟語なのでしょうか? だとしたら、意味はなんののでしょうか? どなたか、教えては下さいませんか? 宜しくお願い致します。

  • Perl ランク付け

    名前,順位,点数...etc とテキストファイルにあるなかで、 山本,2,74 鈴木,1,98 山田,3,54 鈴木,1,99 山田,1,100 この場合、1位の数が誰が多いのかを調べたいのですが、 まず for my $D_1(@DATA){ my @temp = split/,/, $D_1; if($temp[1] =~ /1$/){ push(@D_1,$D_1); } } print @D_1; これで、 結果↓ 鈴木,1,98 鈴木,1,99 山田,1,100 このように抽出させたのですが、 ここから、1位が多い人 すなわち、鈴木という値がほしいのですが、どうすればいいのでしょうか?

  • perlで以下の動作が出来る機能を作っています。

    perlで以下の動作が出来る機能を作っています。 1.ファイル名が載っているfname.txtを読み込む。 2.読み込んだファイル名を開く。 3.ファイルの内容を変換。 4.変換したファイル内容をnew_fileディレクトリに保存。※ファイル名はそのまま。 1~4までを作ったのですが、fname.txtで指定した全てのファイル名を変換して保存したいのに、一番最初に記載されてあるファイル名しか置換されません。書籍などで調べてもわからないのと今日中に製作したいのでここで質問しました。 ご教授お願いします。 以下にソースを貼ります。 #!/usr/local/bin/perl -w use strict; my $x = 0; my $y = 0; my $z = 0; open(IN,"<"."fname.txt")or die "cannot open txt_file: $!";#fname.txtを開く while(<IN>){ #chomp $_;#改行してファイル名を書き込んでいるので、改行を消去 my $fn = $_; my @F = $fn; foreach my $FNAME (@F){ open(FILE,"$FNAME")or die "cannot open txt_file: $!";#fname.txtに記載してあるファイルを開く open(OUT,">". "new_file/$FNAME")or die "cannot write txt_file: $!";#new_fileを開いて書き込む while(<FILE>){#以下、ファイルの置換内容 my @d; if (m/^[X1-9]+ (.*)/s) { ($y,$z)=(0,0); $d[0] = ++$x; $d[1] = 0; $d[2] = 0; $_ = $d[0] . " " . $1; } if (m/^[X1-9]+\.[X1-9]+ (.*)/s) { $z=0; $d[0] = $x; $d[1] = ++$y; $d[2] = 0; $_ = $d[0] . "." . $d[1] . " " . $1; } if (m/^[X1-9]+\.[X1-9]+\.[X1-9]+ (.*)/s){ $d[0] = $x; $d[1] = $y; $d[2] = ++$z; $_ = $d[0] . "." . $d[1] . "." . $d[2] . " " . $1; } print OUT $_; } } close(IN); close(FILE); close(OUT); exit ; }

専門家に質問してみよう