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

【Perl 】初心者コーナーPart8

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/10/24 14:11ID:???
いらっしゃーい、perlのコーディングで困ってる人のスレです。

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

1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://ebi.2ch.net/test/read.cgi/php/988809842/l50
CGIの質問はこちら【CGIだけど、なんか質問ある?part4】
http://ebi.2ch.net/test/read.cgi/php/1000804655/l50

過去ログ、その他の役立ち情報は>>2-10を見よう。
017517301/11/04 14:35ID:???
>>174
メタキャラを含んだ文字列の正規表現でエラーというのは
既に実感を伴って経験済みです。

ともあれ、無事に実現できました。ありがとうございます。
しばらく様子を見てみて、エラーが生じたりするようならまた考えてみます。
0176153 01/11/04 17:36ID:???
_gunzipたんアリガトー(・∀・)&& お久しぶり
ちょっと聞き方がタコでしたね、perlマンセーな処理が有ったんですけど
家では問題無かったのに、会社のプアマシーンだとあぼーんしたんで
少し気になったんです、流石にそこまでは面倒見てくれないですか。。。
取り合えず50回位潜ったら、一旦全部抜けて、
続きからやり直し、って言う風にしてみましたです。
0177名無しさん@お腹いっぱい。01/11/04 17:57ID:vlyHsBRz
ちょっとお聞きしたいのですが
いま、ちょっとはまってしまっています。
状態は、500文字から1000文字くらいの文字列をいくつか作って
print文で表示させたいのですが、文字列を3個作って、3カ所print文を
文字列作成後に表示させようとすると、最後のprint文の途中まで表示して
そのまま待ち状態に、一回プログラム止めて今度は5個作って表示させると
さっき止まった3個目はきちんと表示されて、今度は5個目の途中で表示が
止まってしまいます。何回か実行させてみても同じところで表示が止まって
しまいます。どうも長い文字列のprint文(いくつかある時の)最後のprint
文で起こるようなのですが
出力先はブラウザです。print文の後には文字列を使う処理がありますが
そこまで進めません。print文で止まってしまって
どなたか同じような状態になったことある方いらっしゃられませんか?
どのようにしたら正常に表示できるのでしょうか?
わかりにくい説明ですみませんが、どうぞよろしくお願いします
0178名無しさん@お腹いっぱい。01/11/04 18:05ID:???
$| = 1;
0179ぽ01/11/04 18:49ID:iWvZka32
>>170
Jcode.pm に jfold ってのがあるよ
018017701/11/04 20:39ID:vlyHsBRz
もう一つお聞きしたいのですが
perlで、C言語とかでいうデバッガみたいなものは、ないのでしょうか?
上で書いたような状態でもう2,3日苦しんでいる状態で
できれば、1行ずつとかで、実行して原因がわかればと考えたのですが
わかる方、どうかご回答よろしくお願いします
0181名無しさん@お腹いっぱい。01/11/04 20:51ID:6q0Jo2MQ
当方,C言語のプログラマです.
ある特定の定義を一気にコメント化したりするのに,
sed等のコマンドを使って,シェルスクリプトを書いてました.
こんどperl を使ってこういう処理を使用と思ってるのですが,
あなたの使っているいいソースありませんか?(笑)
0182名無しさん@お腹いっぱい。01/11/04 21:59ID:RPCUxOjp
>>181
s2p とか a2p を使うと吉かと。
018317701/11/04 22:19ID:vlyHsBRz
書き忘れたのですが
いくつかのcgiを経由して、情報を集めて処理するcgiで現象が起きています
引き継いでいるデータがかなりあるので、困っています
一個のモジュールでのデバックはやったことあるのですが、
画面表示(html)->入力データ処理・検索・画面表示(cgi)->入力データ処理・画面表示(cgi)->
のような感じで、最終的に現象の起こっているcgiに行く頃にはかなりの情報があります
こういう場合コマンドラインでのデバックって可能なのでしょうか?
htmlもそのまま表示されてボタンとか押せないですよね
何かいい方法ありませんでしょうか?
よろしくお願いします
0184名無しさん@お腹いっぱい。01/11/04 22:46ID:PfX5esry
CGIほとんど書いたことないんで詳しいことは他の方に譲りますが
#っていうか間違ってるかも知れない
180>
perl -d script_name

183>
use CGI::Carp;
HTMLのコメント文としてデバッグ情報を出力
perl -d -MModule -e '1;' してmoduleをテスト
スクリプトそのものを少し書き換えてコマンドラインで動くようにする
とかいうのを思い付きます。
018517701/11/04 22:57ID:vlyHsBRz
>>184さん
ありがとうございます。
調べて試してみます
018615101/11/05 01:45ID:J/g4IyEG
>>169
やはりrefererを使ってはじくしか無いのですね。
レスありがとうございました。
0187名無しさん@お腹いっぱい。01/11/05 16:44ID:???
>>181
ある特定の定義って何よ?
そこんとこ、もう少し聞かせてくれない? C言語だよね?
0188名無しさん@お腹いっぱい。01/11/05 18:02ID:???
http://natto.2ch.net/test/read.cgi?bbs=off&key=1003929930
これ逝く人いないの?
0189名無しさん@お腹いっぱい。01/11/05 18:04ID:???
sub func() {
#...
}

sub func()
{
#...
}

みなさんはどっちが好みですか?
0190名無しさん@お腹いっぱい。01/11/05 18:41ID:5Lr/KNWp
>>189
前者。
0191名無しさん@お腹いっぱい。01/11/05 18:57ID:???
>>181
同じく、関数定義の事言ってるのか、だったら呼んでる所も
一緒に殺すって事? どうもperl万歳っぽい気はするが意味が解らん w
俺は関数改造した時とか一気に名前入れ替えるのに使ってる
0192名無しさん@お腹いっぱい。01/11/05 21:48ID:???
関数の処理の負荷に関するスレ立てるのってどう?
同じ処理でもこっちの方が良いとか。
あと前誰かだしてたけど、処理の負荷に関するページの紹介とか。
同じ変数使いまわすなら最初に変数の領域を確保しといた方が
良いとかそんなの。
0193名無しさん@お腹いっぱい。01/11/05 22:30ID:???
こっちではどうでしゃっろ
http://pc.2ch.net/test/read.cgi/php/991313362/
019419201/11/05 22:35ID:???
スレ立てるまでも無いですね。
というかスレ立ててもすぐ下がっちゃうか…。
どこかこんなページあれば教えて欲しいです。
0195名無しさん@お腹いっぱい。01/11/05 23:18ID:???
>>181
ちゅうかsedもCも知ってるならそん位1日で出来る様になるよ!
perldocの、「sedの洗練されたPGが〜〜」「Cに洗脳されたPGが〜〜」
辺り読めばバッチシ、正規表現なんかは後方互換性有るから結構そのまま使えるしね
その手のはビックリする位サクサク出来ちゃうぞっと♪
そしてダメな人間になって行くのじゃ  ふふふ
0196名無しさん@お腹いっぱい。01/11/06 03:08ID:???
>>195
そそ。で、Perlないと仕事する気にもならないと。(w
実際、Unix -> Winに移ってきて、シェルやコマンド群の貧弱さには
閉口したけど、Perlが使えるんで何とか工夫してやってる。
ただ、Winで真っ黒な背景のDOS窓開いて、パイプやリダイレクト組み合わせて
コマンド打ち込んでいると、確実に異端視される。
素人にはお勧めできない。(縛
0197名無しさん@お腹いっぱい。01/11/06 04:54ID:???
Macperlの初心者なのですが、もしご存じの方がいらっしゃいましたら
教えてください。webページのフォームからpostメソッドでファイルを
cgiにアップロードしようとしているのですが、32KB以上のデータって
macperlだと受けとれないんでしょうか。32KB以下のサイズのファイル
だとうまくいっているのですが・・・。
0198名無しさん@お腹いっぱい。01/11/06 16:49ID:???
>>197 サーバは何使ってるの?
少なくともMacperlにはそんな機能は無いしバグも上がっていない(筈)
0199名無しさん@お腹いっぱい。01/11/06 17:01ID:???
>197
cgi-lib.plを利用していますか?
>$cgi_lib'maxdata = *****; # maximum bytes to accept via POST - 2^17
この行を確認してみてください。
0200名無しさん@お腹いっぱい。01/11/06 17:11ID:TnuiR6XG
自分のいえの鯖にcgiファイル置いてみてみようと思ったんだけど
「Internal Server Error」が出ます。
パーミッションもあってると思うし原因が不明です。
Apacheでcgiの許可のあるディレクトリに置いてます。
test1.cgiって言うファイルです。

perlの場所も確かめました。
0201名無しさん@お腹いっぱい。01/11/06 17:19ID:???
>>200
それだけの情報でどうしろと?
0202名無しさん@お腹いっぱい。01/11/06 17:19ID:???
>>200
エラーログを見よう、-> $HOME/logs/error_log 辺りに有る
メッセージと適当にGoogleに放り込めばわらわら対策がヒットする
0203名無しさん@お腹いっぱい。01/11/06 17:25ID:???
2^17 って128kbじゃん・・・
020420001/11/06 17:38ID:TnuiR6XG
Premature end of script headers
改行コードの問題らしいです。

malformed header from script.
もう一個はこれです。
0205むぎ茶01/11/06 17:40ID:Zd0wUikG
改行コードを CRLFからLFに変換しよう
Meadowとか秀丸で変換しよう
Malformed はCGIが途中で終わったんでヘッダが変だよって httpd からのメッセージ
0206名無しさん@お腹いっぱい。 01/11/06 17:46ID:???
素で叩けば動いてんだろ?
だったら改行コードは関係ねーよ、
Premature end of script headers
これは適当なHTTPヘッダを吐く前にプログラムが終わったって事
`HTTP``ヘッダ``CGI``Content` 辺りで検索せい
020720001/11/06 17:56ID:TnuiR6XG
普通にマシン上で動かせばprintは表示され動いてくれます。
Contentが抜けてました。
0208名無しさん@お腹いっぱい。01/11/06 18:39ID:???
>>200
これ以上はCGIスレね。
ContentっつーかContent-Type。
0209名無しさん@お腹いっぱい。01/11/07 04:16ID:w4jQYe5D
package main; use vars qw[$var];
$var = 'MAIN';
print "$var\n";

package sub1; use vars qw[$var];
print "$var\n"; # (1)
$var = 'SUB1';

package sub2; use vars qw[$var];
print "$var\n"; # (2)
$var = 'SUB2';
__END__
(1)でMAINを(2)でSUB1を表示させたいのですが,$varがグローバルに使えません。
どうすればできますか?
Perl5.6ではなく,Perl5のやりかたでお願いします。
0210名無しさん@お腹いっぱい。01/11/07 04:21ID:???
$main::var
$sub1::var
0211名無しさん@お腹いっぱい。 01/11/07 06:18ID:???
突然Perlを使う事になって困っています、普段はCを使っています。
Perlの@はCの2次元配列のようなものと考えて良いんでしょうか?
例えば、、、
@ary = ('H','e','l','l','o');
printf ("%s",@ary);
だと H しか印字されないのです。。
それと、シングルクウォートとダブルクウォートの使い分けが
今一つ分からないのです。
0212名無しさん@お腹いっぱい。01/11/07 06:30ID:???
Perlには2次元配列は無し。
リファレンスを使えばそれらしきことも可能。

print @ary;

Single -> 変数展開無し
Double -> 変数展開有り
my $str = 'hoge';
print "$str";
print '$str';
0213名無しさん@お腹いっぱい。01/11/07 07:50ID:???
2次元配列有るよ、詳しくはPerlLOL辺りで

取り合えずCは忘れれ (・∀・) その書き方見てると辛そうだけど・・
全部の型と**文字列**が、int型に収まるとでも思ってくれ、atoiとか忘れれ
そう言う意味で前半の考えはイイ感じ
で、コンテキストで@aryの評価がコロコロ変わるんだけど、それは解るしかない
配列@aryの要素は@ary[0]じゃ無くて$ary[0]、慣れれ
クオートは、取り合えず全部 " にしる、2バイト文字使わなきゃこれで良い
printf ("今%s時です\n",$time); これは全然OK!
021421201/11/07 09:47ID:???
>>213
それは配列リファレンス使って、でしょ。
正確な意味では無いって解釈じゃいかんかな。
上2行はそんな感じだったんだが。

いや、別にどうでもいいんだが。
0215名無しさん@お腹いっぱい。01/11/07 14:16ID:???
>>209
package main;
use vars qw[$var];
*sub1::var = \$var;
*sub2::var = \$var;
以下209と同じ
0216名無しさん@お腹いっぱい。01/11/07 16:11ID:HKXTSnRB
みなさんファイルの有無ってどうやって調べてます?
0217名無しさん@お腹いっぱい。01/11/07 16:15ID:???
-e
0218216>21701/11/07 16:19ID:HKXTSnRB
すんまそん。
0219名無しさん@お腹いっぱい。01/11/07 19:11ID:???
たしかMacPerlってAppleEventの古い32KB制限の因習を引きずってて、
cgiとしてPOSTデータを受け取るときにもその制限があるんじゃなかったっけか?
MacPerlでcgiとして保存したスクリプトを呼び出すと、AppleEventで
MacPerl本体にデータが受け渡されてると思うので、32KB以上のデータは
あつかえないのかも・・・。AppleEvent自体はとっくにこの制限なくなってる
はずなんだけどね。解決策知ってる人いる?
0220名無しさん@お腹いっぱい。01/11/07 20:02ID:???
PerlFactoryってどうですか?
0221名無しさん@お腹いっぱい。01/11/07 20:27ID:???
高杉、つーか使おうと思ってたらライセンス切れた w
タブブラウザみたいなもんじゃ無いの、秀丸多窓、デバッグ用plで
やってるのと変わらん。
ステップ実行直接出来るのは便利かな
0222始めて数日。。。分不相応かなー01/11/07 21:00ID:EjFu+goO
Netモジュールかなんかを使って他のウェブページをゲットし、
perlで処理(文字列置換とか)したいと思っています。

変数名=Net::関数名(URL)

みたいな書き方をすれば、ページを1枚まるごとゲットして変数に格納できるような気はするのですが、
具体的にどう書いたらよいかわかりません。
どうしたらよいでしょう??
0223 01/11/07 21:18ID:NBKJ0dYI
LWPモジュールを使いましょう
0224名無しさん@お腹いっぱい。01/11/07 21:57ID:???
use LWP::Simple;
getprint(URI);
print get(URI);
022520901/11/07 23:30ID:???
>>210 >>215
グロブってこういう時に使うんですね。
ありがとう,勉強になりました。
0226198 だけど01/11/08 02:50ID:???
思いっきりアホだった。
俺はActive perlのつもりでMacperlって書いてた。 今見てビックリした(死
何ていうか、197の書き込み見た瞬間 Macperl -> Active perlに脳内置換しちゃってたみたい
適当な事言ってゴメソ
0227初心者01/11/08 16:17ID:???
すいません。教えて下さい。
@file_list = ($file1,$file2,$file3,$file4,$file5,$file6,$file7,$file8,$file9,$file10);
$name_length = @file_list;
ってあるんですけど、このままだと$name_lengthは10にしかなりません。
$file1〜10が、あるぶんだけの結果が欲しいんですけど、どうすればいい
でしょうか。
0228名無しさん@お腹いっぱい。01/11/08 16:24ID:???
あるぶん、って言うのは何?
$file1に入ってる文字列の長さか
$name_length = length $file1;
0229名無し~3.EXE01/11/08 17:38ID:OCo2EZxt
211 です、亀レスですが、212さん213さんありがとう御座います。
アレから3日ほど触ってなかったから、又C頭に戻ってしまいました・・・(^ ^;
頑張ります。
0230名無しさん@お腹いっぱい。01/11/08 17:44ID:???
>>227
仮に「存在するファイルだけ」ということならファイルテスト演算子使え。
-e $file
0231初心者01/11/08 18:26ID:07jIFch6
返事おくれてすいません。
例えば、もし$file1の変数に値があれば1を返し、なければ0を
返して、1を合計すれば$file$1〜10で、値が入っているものの
数をカウントできる、とおもうのですが、いかがでしょうか。
0232初心者01/11/08 18:28ID:???
$file$1〜10→$file1〜10でした。すいません。
0233名無しさん@お腹いっぱい。01/11/08 18:37ID:yS1X4SA3
>>232
これで、あってる?
my @vars = (1,undef,3 ,5, 0);
my $count = 0;
foreach(@vars){ defined $_ and $count++ }
print $count;
0234初心者01/11/08 19:36ID:07jIFch6
>>233
さすがです!!ばっちりうまくいきました!!
天才!!ありがとうございます!!
0235名無しさん@お腹いっぱい。01/11/08 20:50ID:???
my @vars = (1,undef,3 ,5, 0);
my $count = grep{ defined $_ } @vars;
print $count;

ま、大差ないが。
0236名無しさん@お腹いっぱい。01/11/10 17:29ID:a3KNiGz4
メールなんかのヘッダーフィールドについてくる、Date: のフィールドの時刻表示には、
かなりバリエーションがあるのですが、あれを意味のある数値(例えばperlのtime関数が返す値)
に変換するにはどうするのが定石なんでしょうか?

おそらく決まりきったやり方があるんだと思うんですが。。。
0237名無しさん@お腹いっぱい。01/11/10 18:38ID:???
>>236 rfc2822 でも読め!
0238名無しさん@お腹いっぱい。01/11/10 21:44ID:???
>>236
Date::Parseかな。
0239名無しさん@お腹いっぱい。01/11/11 05:28ID:???
jcode.plやcgi-lib.plは同梱して配布してもいいのでしょうか?
0240名無しさん@お腹いっぱい。01/11/11 05:53ID:???
jcode.plはソース中に配布条件が書いてある。
cgi-lib.plは知らない。
0241名無しさん@お腹いっぱい。01/11/11 06:37ID:6WcbjBVU
ハッシュの配列をクッキーに保存したり読み出したりしたいのでが、

my %cookie = fetch CGI::Cookie;
my @values;
if($cookie{'testcookie'}){@values=$cookie{'testcookie'}->value}
push @values,{key1=>value1,key2=>value2};
my $cookie = new CGI::Cookie(-name => "testcookie",-value => @values,);

このようにすると、一回目はうまくいくのですが、二回目以降
うまくいきません。

なってほしい配列。
$values[0]=HASH(*****)
$values[1]=HASH(*****)
・・・・・
なってしまう配列。
$values[0]=key1
$values[1]=value1
$values[2]=key2
$values[3]=value2
$values[4]=HASH(*****)

どのようにしたらいいのでしょうか?
0242名無しさん@お腹いっぱい。01/11/11 09:28ID:???
・CGI::Cookie使ったことないが,
 リファレンスだけしか保存しなかったら復元できんのでわ。
・value1とvalue2は何返す関数?

私なら設計見直す。
どうしても必要なら多分割対応のモジュール使うか,
セパレータ使う。
0243名無しさん@お腹いっぱい。01/11/11 11:22ID:???
Data::Serializer(だったかな)を使うとか。
0244名無しさん@お腹いっぱい。01/11/11 17:44ID:???
アスカネットのTinyBBSを改造してるんですが、
書き込み用にデータファイルをオープンした直後の
$SIG{TERM} = $SIG{PIPE} = $SIG{KILL} = $SIG{HUP} = $SIG{USR1} = "IGNORE";
ってコレ何ですか?
%SIGの意味はわかったけど、↑があるのとないのとでどう違うのかわかりません。
0245名無しさん@お腹いっぱい。01/11/11 17:44ID:dTfyRXHQ
sageちゃった…。age。
0246名無しさん@お腹いっぱい。01/11/11 18:42ID:???
IGNORE -> 無視する
上に並べたシグナルハンドラを全部無視するって事、httpdによっては
KILLとかがいきなり飛んでくる(らしい)
各シグナルについては省略 (w
'シグナル''プロセス'とかで検索してちょ
0247縞栗鼠(シマリス)の親方01/11/11 20:36ID:PguAPO/0
吉祥寺にある大検・大学受験予備校の中央高等学院
ここは、完全に狂ってる。
授業料は一年分一括前払いなので、
金が入れば、生徒は要らない
金を振り込んだら、何とかその生徒を辞めさせようと
講師どもが、あの手、この手でイヤガラセをしてきますね。
セクハラはもちろん、脈絡の無い罵倒は日常茶飯だね。
酒臭い講師もいるし・・・ 人生の最果て中央高等学院

http://chs-f.com/index.html 福岡校
学歴詐称 経歴詐称 デタラメ授業
http://www.chuo-school.ac/ 東京本校
0248名無しさん@お腹いっぱい。01/11/11 20:43ID:dTfyRXHQ
>>246
わかりました。後はGoogleと格闘してきます。

もう一つ質問なんですが、
テンプレートを用意して記号を変数で書き換えたいんです。
で、こんなのを書いて見ました(Thanks to 某スレの20さん)。

----------------------------------
$post{hoge} = 'Succeed!'; # 変換するデータのハッシュ(実際にはもっと増やす)

printTemplate('./test.txt', %post);

sub printTemplate{
my($filename, %form) = @_;

open(FILE, "< $filename");
my @lines = <FILE>;
close(FILE);

foreach (@lines) {
s/\${(.*?)}/$form{\1}/g; # ${abc}という書式が見つかったら$form{abc}に変換
print;
}
}
(test.txtの内容は、テストなので「${hoge}」の一行のみ。)
----------------------------------

が、上手く変換できません。
$form{\1} の所を $form{hoge} と直接書くと通ります。何故??
$from{\1} を \$from{\1} と書いて見て、
ちゃんと$form{hoge}と出力されてるのは確認したんですが…。
0249名無しさん@お腹いっぱい。01/11/11 20:57ID:???
>248
s/\${(.*?)}/$form{$1}/g;
こうでは?
0250名無しさん@お腹いっぱい。 01/11/11 21:00ID:???
通るってどう言う意味?、\1、は$1なのでは??、良く解らんな・・・
$form{baz} = 'foo';
@lines = qw(${baz}\n);
s/\${(.+)}/$form{$1}/g for @lines;
print for @lines;
0251名無しさん@お腹いっぱい。01/11/11 21:01ID:???
>>248
http://forest.ne.jp/cgi-ml/#archives
41200あたりのテンプレート関連を見るとよいかも。
0252名無しさん@お腹いっぱい。01/11/11 23:02ID:???
>>249、>>250
あっさり成功しました…。
\1と$1をごちゃごちゃにしてました。
\1ってのもありますよね?どう違うんだろう。

>>251
見てみます。ありがとうございました。
0253名無しさん@お腹いっぱい。01/11/11 23:05ID:???
\1は検索で使う。
$1は置き換えやその後違うところで使う。
0254名無しさん@お腹いっぱい。01/11/12 02:49ID:???
URLリストを比較して、重なっているURLを一方のファイルから
削除するスクリプトでポイントになるのはどのような点なのでしょうか。
全く検討がつかなくて、検索をはずしまくっています。
参考になるページを教えてもらえないでしょうか。
0255名無しさん@お腹いっぱい。01/11/12 03:33ID:yjAJ+kh7
>>254
>全く検討がつかなくて、検索をはずしまくっています。
検索キーワードは「集合演算」「差集合」あたりでしょう。
0256名無しさん@お腹いっぱい。01/11/12 03:42ID:???
>>255
次のページで解決できそうです。ありがとうございました。

http://www.google.com/search?q=cache:ap2Un9yjbio:tokyo.cool.ne.jp/hharuki/perl/hairetu2.html+%8FW%8D%87%89%89%8EZ+perl+%8D%B7%8FW%8D%87&hl=ja&lr=lang_ja
(Googleキャッシュにしか残っていませんでした)
0257名無しさん@お腹いっぱい。01/11/13 00:34ID:4DKwnz9F
複数ある送信ボタンのうち、選択したものによって実行内容が変わるスクリプト
を作っています。

<input type="submit" value="送信01" name="soushin">
<input type="submit" value="送信02" name="soushin">

送信ボタンには上の二つがありますが、valueを『01』だけにする(divergenceの
部分も併せて変える)とうまくいくのに、日本語が入るとどうもうまくいきませ
ん。

何か良い方法はないですか?

スクリプトは次に載せます。
025825701/11/13 00:47ID:4DKwnz9F
改行が多くて載せられないと言われてしまったので、以下に置きます・・・。

http://www.geocities.co.jp/Outdoors-River/5665/sample.txt

宜しくお願いします。
0259名無しさん@お腹いっぱい。01/11/13 02:14ID:iAaKn9Wv
>>257
sub div {

if ($soushin =~ /01/) { &soushin01; exit; }
elsif ($soushin =~ /02/) {&soushin02; exit; }

}

パターンマッチ演算子にしてるけどさ、普通に eq '送信01'とかじゃダメなの?
コードがEUCだけど、"charset=iso-2022-jp" で出力してるから、ボタンの
文字もiso-2022-jpで拾われちゃうし。

確実にJcode使っていけば、そんな問題は起きないと思うけどな。
0260名無しさん@お腹いっぱい。01/11/13 18:15ID:CkfqNGb7
検索のCGI作ってるのですが、複数のファイルから検索する場合は
どうすればいいのでしょうか?

例えばファイルが1つだとこのように読み込みますね。

open(IN,"data1.txt");
eval{flock(IN,1)};
@username=split(/\,/,scalar(<IN>));
close(IN);

これをdata1.txtだけでなくdata2.txt、data3.txtからも
読み込んで検索したいのです。
0261名無しさん@お腹いっぱい。 01/11/13 18:29ID:???
opendir DIR,"./poyo";
@files = readdir DIR;
foreach (@files){
 open IN,"$_" if(-T "$_");
   。
   。
}
0262名無しさん@お腹いっぱい。 01/11/13 19:07ID:???
PERLで構造体みたいなのはあまり使わないんでしょうか?
データ型に無いのかな、、、
0263名無しさん@お腹いっぱい。01/11/13 19:35ID:???
>>262 ハッシュでいくらでも実現できる。
0264名無しさん@お腹いっぱい。01/11/13 19:51ID:???
%struct1 = qw{
  name hoge
  year 20
  next
};
$struct1{next} = \%struct2;
%struct2 = qw{
  name foo 
};
print "$struct1{name}\n";
print "$struct1{year}\n";
print "${$struct1{next}}{name}\n";

こんな感じ w
0265名無しさん@お腹いっぱい。01/11/13 20:08ID:g8ogkECZ
 CGIの暴走・・・ってよく聞きますが、実際にどういう
ことなんでしょうか?

 自分の中では「無限ループに陥ってしまうこと」と解釈し
てるんですが・・・。

 他にも「CGIの暴走というなら、こういうのもそうだ」
というのがあったら教えて欲しいッス。
0266名無しさん@お腹いっぱい。01/11/13 20:13ID:oVBsXhBR
最近やってもうた無限ループ&aaa() のスペルミスで無限ループ。
しかも原因がなかなか分からなく、苦戦。

sub aaa{
&aaa($hoge) if($hoge eq "foo");
処理,,,
}
0267名無しさん@お腹いっぱい。01/11/13 21:35ID:???
>>265
突然わけのわからん処理を延々続けるとか。
掲示板のログ整理でログ全消しのうえ周辺ファイルまで消したり。

>266 ループと違ってstack overflowやout of memory! にならんか。
0268名無しさん@お腹いっぱい。01/11/13 21:50ID:???
>>267
それもまた暴走と言える気がしなくもないが。
026926001/11/13 22:22ID:yD0vdlkp
>>261が回答なんでしょうか?
すいません、厨房にもわかるよう誰か教えて下さい。
0270名無しさん@お腹いっぱい。01/11/13 22:28ID:???
>269
>261さんじゃないですけど。
opendir DIR,"./poyo"; #ログのあるディレクトリを開く
@files = readdir DIR; #ディレクトリ内のファイルを配列に入れる
foreach (@files){ #配列の中身全てに対して
 open IN,"./poyo/$_" if(-T "./poyo/$_"); #そのファイルがテキストファイルならファイルを開いて
   。 #処理をする
   。 #処理をする
}

ただ、ここまで教えてもらったら、自分でも調べてみた方がいいですよ?
0271名無しさん@お腹いっぱい。01/11/13 23:21ID:???
>269
>これをdata1.txtだけでなくdata2.txt、data3.txtからも
>読み込んで検索したいのです
なら単純に3回コピペを繰り返せばいい。それでも動くし全然問題無い
その聞き方じゃ、その分繰り返せとしか答えられないだろ?

多分配列操作が出来ないと仮定して書く
for $datafile (("data1.txt","data2.txt","data3.txt")){
print $datafile,"\n";
}
0272名無しさん@お腹いっぱい。01/11/14 00:38ID:???
ファイルの一番最後の行だけ読み出すことは出来ませんか?
やはり先頭から順に読んでいかなければなりませんかね。
0273名無しさん@お腹いっぱい。01/11/14 00:49ID:???
$ tail -1
ってそういう意味じゃない?
0274名無しさん@お腹いっぱい。01/11/14 00:56ID:???
>272
readで取って,\n以後を取る。
\r出てくるまで取り続ける。

http://pc.2ch.net/test/read.cgi/php/1000804655/394-443
で422氏がtailもどきというのを作ってたので参考にするといいかも。
■ このスレッドは過去ログ倉庫に格納されています