トップページphp
1001コメント294KB

Perl コーディング初心者質問コーナー Part26

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/07/24 19:48ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
0047nobodyさん03/07/25 02:55ID:???
はい、なんとなく思います。
00481203/07/25 02:56ID:???
なんとなく読みこんでるとおもったんですが、、、
0049nobodyさん03/07/25 03:00ID:???
>>43=12かよ
0050nobodyさん03/07/25 03:03ID:???
どひゃー
00514303/07/25 03:05ID:???
43 ne 12 です。

>>45>>46
ファイルは、$/をセパレータに、なんというか、セパレータまでのデータを
1行として、そこまでを評価していくんだと思います。

その、全部捨ててるっていうのがなんというか、腑に落ちないんです。

あの、ダンプでしたっけ?PERLがなにやってるかを逐一ログに残すやつ。
それを見たら少しは理解できるとおもうんですが、
abnormal program termination
ってでちゃうんです。

困ったなあ
0052あぼーんNGNG
あぼーん
00533803/07/25 03:15ID:???
すまん。俺も超初心者なんだ・・・。
0054nobodyさん03/07/25 03:22ID:???
>>51
単に1行読むたびに$_に代入されるから、直前に読んだデータが上書きされてるだけ。
それが見かけ上「捨ててる」ってこと。
んでEOFまで逝っちゃうと、あとは何度読んでもundefが返ってくる。
それと、普通はwhileの条件式に<FILEHANDLE>を書いてループをまわすものだけど、
謎の変数$countでまわしてる。これは一体どこから出てきて何が入ってるのか。

腑に落ちないって、どういう結果を期待してるの?まずそれを教えてよ。
0055nobodyさん03/07/25 03:47ID:???
>>43
そのコードに入る前の $count の値が 0 以上ならば $count-- < 0 は偽。
よって <FILEHANDLE> は一度も評価されないまま while から抜けるから、
これ以前に読み込んでいないなら tell は -1 を返す筈。
$count の値が 0 未満なら無限ループ。
あと行入力演算子が $_ に自動で代入してくれるのは while の条件部に
書いた時のみ。
00563803/07/25 03:54ID:???
すみませんでした。
なんとなくで、分かりにくい説明ありがとうございました。
00575403/07/25 03:55ID:???
>あと行入力演算子が $_ に自動で代入してくれるのは while の条件部に
>書いた時のみ。

あ、ほんとだ。リファレンス本見たらそう書いてあった……
おいらも適当なこと言ってすまんかった。反省。そしてありがとう。

0058nobodyさん03/07/25 04:08ID:???
質問に混じって茶々入れまでしてるのかよ
まじめにやれや
00593803/07/25 04:21ID:???
すみませんでした。
0060nobodyさん03/07/25 04:22ID:4OBr2CQn
祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り

ニーノさんのホームページ作り2
http://ex.2ch.net/test/read.cgi/entrance/1059029010/
ニーノ ◆p9GipySMGk によってラウンジにたてられたこのスレで、

http://page.freett.com/ninogumi/
【ニーノさんのホームページ】
というサイトが作られた。(現在もコンテンツは爆発的に増えてるよ。)

さぁ、君もアイディアを出して、2CHネラーだけの最強サイトをつくろう!

祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り

0061nobodyさん03/07/25 04:29ID:???
要は…

$lolita = <FILE>;

こういうコードがどういう動きをするか理解しないとだめだ
0062nobodyさん03/07/25 05:11ID:???
"12<>34"という形のデータを左側優先で大きい順に並べ、
左の値が同じなら、右の値の大きさの順に並べるプログラムを作ろうと思うのですが
ヒントをください。
"1<>9"
"2<>3"
"8<>4"
"2<>8"
"8<>8"

"8<>8"
"8<>4"
"2<>8"
"2<>3"
"1<>9"
と並び替えるようなものです。
0063nobodyさん03/07/25 05:28ID:???
>>62
http://m-factory.zone.ne.jp/perl/SchwartzianTransform.html
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/199909/mgp00039.html

@sorted_data = map $_->[0],
sort { $b->[1] <=> $a->[1] || $b->[2] <=> $a->[2] }
map [ $_, split /<>/ ],
@data;
00644303/07/25 07:30ID:???
>>54-57

すみません。説明不足でした。
やりたいのは、ファイルの読み飛ばしです。
$count=10だとすると、
11行目以降のファイル内容を取得することなんです・

<FILEHANDLE> while ( $count-- < 0 );
としたあとで、
push(@line,scalar(<DAT>)) while($line-- > 0); #$lineは$count以降の取得したい行数
ってやると、ちゃんと11行目以降の内容が@lineにはいるんです。
つまり<FILEHANDLE>に対するファイルポインタは、巻き戻ってないから、それを
逆に利用してるんだそうです。

で、腑に落ちないのは
>あと行入力演算子が $_ に自動で代入してくれるのは while の条件部に
>書いた時のみ。
ってところで、$_に代入しなきゃどこに入れてるんだ、っていうことです。
PERLの、なんというか一時記憶領域みたいなものに入れてるんでしょうか。
あと、$_に代入しない場合でも、やっぱり1行ずつ読んでるんですよね???

結果はいいけと、PERLがやってることがなんとなくでも理解できないと、
応用できないんかなって。
0065あぼーんNGNG
あぼーん
0066あぼーんNGNG
あぼーん
0067 ◆hMJAPH9PWA 03/07/25 11:31ID:???
| <FILEHANDLE> while ( $count-- < 0 );

…これで動いてるって?
既に>>55で指摘されてるけど、比較演算子が逆じゃない?

| ってところで、$_に代入しなきゃどこに入れてるんだ、っていうことです。
| Perlの、なんというか一時記憶領域みたいなものに入れてるんでしょうか。

そうだよ。
<FILEHANDLE>ではなく、readline(FILEHANDLE)と関数呼び出しとして書くと分かるかな?
ついでに言うと、print()とかも成功/失敗を知らせる値を返してる。
大抵は必要ないから即座に捨ててるだけで。


0068nobodyさん03/07/25 14:14ID:???
>>64
最初からその2行のコードと説明してくれれば早かったのに。
$_ を気にしてるようだが、$_ には読み込まれないから考える必要はない。

scalar(<DAT>) ← これがミソで、リストである<DAT>を強制的に
スカラとして評価することによって<DAT>の1行だけを取得しているので
ここでは1行読み込みみたいな動きになる。
0069nobodyさん03/07/25 14:37ID:???
リストと配列って同じ意味ですか?
0070nobodyさん03/07/25 15:12ID:???
そんな事より、リファンレンスが解らない…(´д⊂ヾ
0071nobodyさん03/07/25 15:26ID:???
犯罪予告キタ━━━━━(゚∀゚)━━━━━!!!!
【犯行】明日入殺します【予告】
ttp://ex.2ch.net/test/read.cgi/entrance/1059109904/l50
0072nobodyさん03/07/25 15:27ID:???
ああ、いけね
なんでリストなんて書いちゃったんだろ
0073nobodyさん03/07/25 16:09ID:ysQnpLo4
ソースをSJISで書けといわれたのですが、「表」等の文字化け
対象文字列の扱いに困っております。
$htmlの中に「表」等の文字が入っている場合、
$html =~ s/5C/5C5C/sig;
これで回避できるかと思ったのですが、どうもうまくいきません。

教えていただけたら幸いです。
0074nobodyさん03/07/25 16:15ID:???
\x5c
0075nobodyさん03/07/25 16:45ID:???
>>74
お返事有難うございます。
早速下記のようにやってみましたが、まだいかないようです。
$html =~ s/\x5c/\x5c\x5c/sig;

初心者で申し訳ないです、、、
0076nobodyさん03/07/25 16:51ID:???
>>75
$html = "表示";

この時点で、$html内には0x5cが含まれないことに注意。
あとは自分で考えてみて。
0077nobodyさん03/07/25 17:06ID:???
$html = '表示';
00787303/07/25 17:23ID:???
うーん、素で分かりません、、、

$htmlは、ヒアドキュメントを使って内部に変数が含まれて
いるため、シングルクォーと等は使えません、、、

再度しばらく考えてみます、、、
0079nobodyさん03/07/25 17:36ID:???
ヒアドキュメントでソースに直で書いてるんなら、

  表\示

でいいじゃん。
00807303/07/25 17:48ID:???
メンテナンスはプログラムが分からない人がやるので、
「表」や「能」等を平気で普通に使ってしまう可能性が
あるため、最後にまとめて変換してしまおうと考えました。

出力形式は要望であるため、変えられないのが痛い
です、、、
0081nobodyさん03/07/25 17:51ID:???
>>80
HTMLをヒアドキュメントではなく、外部ファイルにする。
これで解決。メンテナンス性もよくなって一石二鳥。
00827303/07/25 18:00ID:???
>>81
それが許されないからヒアドキュメントなのです。
できればそうしたいのですが、ロードバランサーを使用した
サーバ3台体勢なため、どんなに説明しても1ファイルで
完結してくれと、、、

すみません、無駄にスレ消費させているので書き込み自粛
します。
0083nobodyさん03/07/25 18:11ID:???
>>82
__DATA__ トークン以下に HTML データを書いて <DATA> で読む。
0084nobodyさん03/07/25 18:58ID:???
>>73
シングルクォートで囲んでおいて、変数部分を置換する。
0085nobodyさん03/07/25 20:25ID:cdWg8/H5
あるcgiでは<img src="$imgs/seee.png">できちんと画像が
表示されるのに、これでは画像が×印になってしまい
表示されません。何が抜けているのか何でも良いので
気付いた所を教えて欲しい。
sub wedd{
if(!$tpre){
$log .= "<img src=''$imgs/seee.png''><br>\n";
$tm=0;
$trpe='';
}
です。
0086nobodyさん03/07/25 20:36ID:???
>>85
サブルーチンだけでわかるわけないだろう
このサブルーチンを呼び出す前、あるいは呼び出した後のどこかが
おかしいだけ
0087nobodyさん03/07/25 20:37ID:???
$log .= "<img src=\''$imgs/seee.png\''><br>\n";
0088nobodyさん03/07/25 20:43ID:???
>>86
ハズカシイネェ
0089nobodyさん03/07/25 21:06ID:???
みんな釣られたんじゃないの?
>>87は当然としても、エスケープしないと500エラーで
画像が×どころじゃないだろ
0090nobodyさん03/07/25 21:46ID:???
釣りで処理する回答者はいらね。
0091nobodyさん03/07/25 21:49ID:???
第1問はここまで

>>86さん 2点
>>87さん 5点
>>88さん 0点
>>89さん 10点

もうちょっとがんばりましょうね
0092nobodyさん03/07/25 22:04ID:???
>87,>89
ダブルクォーテーション内のシングルクォーテーションを、しかも2個の内一つだけエスケープして意味あるのか?
>85はただの間違い探しだろ。
0093nobodyさん03/07/25 23:21ID:???
$log .= qq{<img src="$imgs/seee.png"><br>\n};

これで何点貰えるのかなぁ。
0094nobodyさん03/07/25 23:31ID:uJCpPyXD
どこにシングルクウォーテーションがあるのかぜひ教えてもらいたいものだ
0095nobodyさん03/07/25 23:32ID:uJCpPyXD
クォー
の間違いだ。スマソ
0096nobodyさん03/07/25 23:44ID:???
ここはクイズスレになったのか?
0097nobodyさん03/07/25 23:45ID:???
>>94
>>85をよく見ればわかる。一見ダブルに見えるシングル2個連続。
00988503/07/25 23:59ID:qXznWoh0
>>93
おお!
とりあえず、それで出来ました。
これで道は開けます。
どうも有り難うございました。
00994303/07/26 00:58ID:???
>>67-68
ありがとうございました。そうかreadlineか。PERLFUNCを読み直して
すっきりしました。

比較演算子は逆ですね。($count-- > 0)ですよね。
0100nobodyさん03/07/26 01:22ID:???
>>98
お前>>85のソースはコピペしたのか?
あと出力結果のHTMLソースは眺めたのか?
0101nobodyさん03/07/26 03:55ID:4h1zCzy4
perl5.005からしか使ったことがなかったのですが、
perl5.003の環境で使う状況になってしまいました、
5.003で使えない表現を纏めるにはどこをみれば良い
でしょうか?
また、HTML::Templateをつかいたいのですが、
対応していない表現が多いようで使えません。
書き換えることでつかえるようになるでしょうか?
0102あぼーんNGNG
あぼーん
0103nobodyさん03/07/26 06:32ID:???
>>101
perl -D

なんちて。
0104あぼーんNGNG
あぼーん
0105あぼーんNGNG
あぼーん
0106nobodyさん03/07/26 11:25ID:NdYn8w9o
perlのインデントとhtmlのインデントについて皆様の意見を聞かせて頂きたいと
思っております。

昔C言語を少しだけ使っておりまして、その習性に引きずられてか、htmlを作るときは
何となくインデントさせていました。例えば
<HEAD>
 <META HTTP-EQUIV="content-type" CONTENT="text/HTML;charset=euc-jp">
 <TITLE>title</TITLE>
</HEAD>
の様にですね(無駄といえば無駄なんでしょうけど…)。

そして上記のhtmlをperlで出力させる際には、
#!/usr/bin/perl
print " <HEAD>";
print "  <META HTTP-EQUIV=\"content-type\" CONTENT=\"text/HTML;charset=euc-jp\">";
print "  <TITLE>title</TITLE>";
print " </HEAD>";
等と書いてインデントされた状態のhtmlが出力されるようにしていました。

しかしif文やfor文内にてhtmlを出力する処理となった場合等、perlのソースを
インデントさせて、そこでまたさらにインデントされたhtmlを出力するために
文字列を記述していくと、なんだか非常に見づらいソースになってしまうように
感じてしまいます(ソース内でhtml部分のインデントが一致しない等)。

今後メンテするのはperlのソースなので、perlのソースとして読みやすいものにすれば
よいと思うのですが、かといって出力であるhtmlが読みづらいとメンテが大変であるとも
思います。皆様どのように考えて作られてますでしょうか?
010710603/07/26 11:42ID:???
すみません、自己レスで一部修正します。
> print " <HEAD>";
print "<HEAD>";
ですね。
ソースからコピペして、インデントを全角スペースにする時に間違えました…
0108nobodyさん03/07/26 11:46ID:???
print でスタティックに html を出力するよりは別ファイルにしたほうがよくないか?
0109nobodyさん03/07/26 12:01ID:???
俺はperl自体の記述がもっとも見やすいようにしてる。
ループとかでテーブル生成、とかそーゆー時は、出力したところが見やすいようにする。

で、最終的にプログラムが完成し、出力するHTMLが意図した通りになったのを確認したら、
出力時のタブや改行などは全部消す(出力直前に正規表現で)。
文字のスペースは全て&nbsp;を使ってるからスペースも消す。
0110nobodyさん03/07/26 12:19ID:???
別ファイルにすれば見た目に悩まなくてすむと思うけど
行数も減って処理の流れが読みやすくなるし
011110603/07/26 12:33ID:???
>>108
>>110
別ファイルということは、やっぱりrequire文でhtmlを出力するためのスクリプトを
呼び出すということでしょうか?

いろいろとあたっている時に、>>106で例に挙げているようなスクリプトで
TITLEタグの内容を変数で与えてあげられるようにしているのをよく見てまして、
やっぱり処理部分と出力部分は分けたほうがいいのでしょうねぇ、と思っては
います。
ちなみに別ファイル内でのhtml部分のインデントはどうされていますか?
0112nobodyさん03/07/26 12:36ID:???
ヒアドキュメントは?
またはprintの部分だけインデントしないとか。
011310603/07/26 12:36ID:???
>>109
デバッグ終了時に、出力時に不要な文字を消す処理を有効にする、という事ですか?
ちなみにそうなると、完成版が出力するHTMLはインデント無しですか?
0114nobodyさん03/07/26 12:45ID:???
>>112
そうですね。ヒアドキュメントも考えてみたのですが、bash等で使えるような
空白+終端文字列(<<-でしたっけ?)等が無さそうで、難儀しています…
0115nobodyさん03/07/26 12:58ID:???
>>111
ファイルオープン→読む→出力→ファイルクローズだと思うけど。

>>114
bashでシェルスクリプト組んでるの?
ちょっと良くわからない。。
0116nobodyさん03/07/26 13:12ID:???
>>115
> ファイルオープン→読む→出力→ファイルクローズだと思うけど。
それだと、外部ファイルをそのまま出力という形になって、例えばファイル中に
変数を仕込んでおいて、その変数の値を表示させる…等という事をしたい場合、
何か上手い方法はありますか?sed的な置換を駆使でしょうか?

> >>114
> bashでシェルスクリプト組んでるの?
実はOSがVineLinux2.6R1でして、/bin/sh -> bashとなっているので…
011710903/07/26 13:15ID:???
俺の場合、単純なのなら
>ファイルオープン→読む→出力→ファイルクローズだと思うけど。
これと同じようにしてる。
ただ、やや複雑になってきたりするとやっぱプログラム内で生成する。
ループでテーブル生成、ってのを多用するから。

ヒアドキュメントは、絶対左側に書くって規則があるから使わない。
しかもヒアドキュメントだと状況によって細かく出力を変えれないからあんま使い道ない気が…。
ヒアドキュメント使うなら外部にHTMLを書いたtxtを置くかな。

>別ファイルということは、やっぱりrequire文でhtmlを出力するためのスクリプトを
>呼び出すということでしょうか?
プログラム内でHTMLを生成する必要がある上、あまりに縦長で邪魔になった時は、
こーゆーのも作った事あるよ。俺は。
0118nobodyさん03/07/26 13:30ID:???
requireのほうが簡単でしょ
変数だってリファレンス使えばいいし
0119あぼーんNGNG
あぼーん
012011503/07/26 14:02ID:???
>>116
独自なタグとか作って置換、splitで切り張りとか。
書き換える部分が一点に集中してる(単一テーブルなど)の場合、
二つのファイル(ヘッダ部とフッタ部)を作ったり。

>>117
>ヒアドキュメントは、絶対左側に書くって規則があるから使わない。
変数に入れれば、思いのままに整形できるよ。
クックブックのレシピ1.11
012111503/07/26 14:37ID:???
外部ファイルを使うなら、HTML::Templateモジュールを使うと便利になるかも。

連続カキコ失礼。
0122nobodyさん03/07/26 18:21ID:???
>>101
perldelta

http://www.att.or.jp/perl/change/5004pre.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perldelta.html
0123nobodyさん03/07/26 23:22ID:UhENImdi
確か、perldocをWindows help形式に変換したものを、どこかで配ってたと思うのですが、
どこで配ってたか忘れてしまいました。
ぐぐったものの見つからず。

どなたかご存じだったら教えてください。
0124nobodyさん03/07/26 23:34ID:P3xPXFZK
}if($yh > 250 && $yh <= 280 && $gt < 51 && $iu < 71
&& $gg < 71 && $fd < 71 && $ar < 71 && $ss < 2500 ){

を書きました。
ちょっと長いから難しいかなあと思って一通りテスト
したんですが、なんと全部正しかったです。
しかし、やはりプログラム処理も間違える事
はあるんでしょうか?
0125nobodyさん03/07/26 23:36ID:???
Perlの場合って、変数名や関数名の付け方で、
ある程度、グローバルスタンダードというか、
おきまりの付け方って存在するんでしょうか?
0126nobodyさん03/07/26 23:47ID:???
>>123
ActivePerl ならインストールしたディレクトリ以下に入っているかも知れない。

>>125
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlstyle.html
0127nobodyさん03/07/27 02:46ID:???
<!HOGEHOGE>
これはHTMLだとコメントになりむしされる。
これを利用して、このように。

$hoge = "seiseishitai html no naiyou";
$hogehoge = "mouhitotsu seisei shitai html no naiyou";
open TEMP,"/path/to/template.html">
while(<TEMP>){
s/<!HOGEHOGE>/$hoge/g;
s/<!HOGE>/$hogehoge/g;
print;
}
0128nobodyさん03/07/27 03:12ID:???
>>127
> <!HOGEHOGE>
> これはHTMLだとコメントになりむしされる。
初めて知ったよ。
0129nobodyさん03/07/27 04:00ID:???
<!--HOGEHOGE-->
だった。
0130nobodyさん03/07/27 09:21ID:???
>>125
ない。「それにはいくとおりもやりかたがある」から。
C言語出身のやつはC言語での命名規則を、
Java出身のやつはJavaでの命名規則を、
使えばそれでいい。
0131nobodyさん03/07/27 09:51ID:???
"use 全部小文字"は予約されてるからパッケージ名に全部小文字は使わない。
全部大文字のsubも使わないほうが良かったような。
0132nobodyさん03/07/27 11:40ID:qAaynntQ
フォームから送られてきたデータを切り分ける処理を

foreach(split(/&/,$query)){略}

とした場合、splitは1回だけ実行されるのでしょうか。
ループのたびに実行されてたら馬鹿みたいなので。
0133nobodyさん03/07/27 11:47ID:???
ループのたびにsplitされたら、永久にまわり続けるだろう。
013413203/07/27 11:54ID:???
…そうか。少しは考えろよ俺。
くだらない質問失礼しました。
0135あぼーんNGNG
あぼーん
0136あぼーんNGNG
あぼーん
0137nobodyさん03/07/27 14:00ID:???
>>132
なんで最近こんな奴ばっかなんだよ。
>splitは1回だけ実行されるのでしょうか。
他人に聞くよりPerlに聞いた方が正確だし早い。やればわかるだろ。
0138nobodyさん03/07/27 17:20ID:LVhmum4F
テキストから、条件にあてはまるものの件数、文字、を出力します。
件数を先に出力したいから、
$n=0;
open(DATA,"data.txt");
foreach(<DATA>){
if($_ =~ m/$keyword/){ $n+=1; }
}

print "$n件見つかりました。<br><br>";
close(DATA);
open(DATA,"data.txt");

foreach(<DATA>){
if($_ =~ m/$keyword/){ print "$_<br>"; }
}

こうやってるんですが、2回データ開くってのが、ソースが変だし、効率が悪いと思うんですが、効率いい方法ありませんか?
「件数」を先に出力するので、この方法以外考えられません。
条件に当てはまったものを、配列に入れて、後で出力ってのも考えましたが、
配列は効率わるそうで・・・
ご教授お願いします
0139nobodyさん03/07/27 17:22ID:???
無限ループが心配な場合は$f++>=100 last;
とかストッパーかけておくと良い。
0140nobodyさん03/07/27 17:25ID:???
while (??) {
if ( 表示する条件 ) { continue; }
$n++;
if (??) { contine; }
if(??) { contine; }
print $_; or $xx = $_;
}

$n件見つかりました
結果$xx
0141nobodyさん03/07/27 17:27ID:???
if (??) { contine; }
if(??) { contine; }
↑ゴメン s/contine/last/g
ついでに、ここは表示するページのはじめの数から後の行数を先に求めておく。
0142nobodyさん03/07/27 17:45ID:LVhmum4F
>>140
ゴメン。難しくて理解できない・・・
ちょっと解説お願いできますか?
0143nobodyさん03/07/27 17:54ID:???
配列は効率が悪いの?
0144nobodyさん03/07/27 17:59ID:???
同じファイルを2回読むよりは効率いいんでない?
メモリは食うだろうが。
0145nobodyさん03/07/27 18:09ID:???
$n=0;
open(DATA,"data.txt");
while(<DATA>){
if($_ =~ m/$keyword/){ $n+=1; $str .= "$_<br>"; }
}
close(DATA);
print "$n件見つかりました。<br><br>$str";


これじゃだめなのん?
オープン2回が気になるなら、seekで戻せば開きなおす必要はなし。
0146nobodyさん03/07/27 18:15ID:???
@hit = ();
$n=0;
open(DATA,"data.txt");
while(<DATA>){
if(/$keyword/o){
push(@hit, $_);
$n++;
}
}

print $n. '件見つかりました。<br><br>';

foreach(@hit){
print $_. '<br>';
}
close(DATA);

んじゃ、配列使うやつ。
DATAファイルハンドルは避けたほうがいいよ。
改行もしっかり処理しよー。
■ このスレッドは過去ログ倉庫に格納されています