プロが教えるわが家の防犯対策術!

下記のperlのソースでperl 01.pl 01.txtの出力が常に1となる。
@tmp=<>;
$result=grep{$tmp[$_] =~ /^end_of_file/} 0 .. $#tmp;
print $tmp[$result];

01.txtには漢字が入っている。これが悪さをしているんだろうか。入力ファイルは、sjis。perlのソースもsjisです。

宜しく、お願いします。

A 回答 (2件)

「これはリストにしても動きません。

」は何を言っているのでしょうか?

・どのようなソースで
・どのような入力ファイルを与えたときに
・どのような結果を期待していたところ
・実際にはどのような結果になった
のか, 具体的かつ詳細に書いてもらえませんか?
    • good
    • 0
この回答へのお礼

早速の返事有難う御座います。
済みません、私の勘違いでした。解決しました。

お礼日時:2015/08/31 17:08

本質的には


grep の返り値に関するあなたの知識が足りない
から.

http://perldoc.perl.org/functions/grep.html
    • good
    • 0
この回答へのお礼

早速の回答有難う御座います。やりたい事と言うのはgrepで通常は値を求めますが今回は値では無くてリストの何番目の要素なのかを求めると言う事です。前回のは、確かに、スカラーでは無くてリストにしないといけないのかも知れないですが。これはリストにしても動きません。

前回と違いますが下記は動きます。
@list=( 'a', 'b', 'c', 'c', 'd', 'c', 'f', 'c' );
@result=grep{$list[$_] =~ /^c/} 0 .. $#list;
for (@result){
print;print "\n";
}
これを実行すると、先頭がcで始まる文字の要素のインデックスのリストが得られます。下記の実行結果になります。
2
3
5
7

前回と今回違うのは、入力が外部のファイルなのかの違いだけでやっている事は同じです。済みませんが、宜しくお願いします。

お礼日時:2015/08/31 15:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!