【Perl】初心者コーナーPart11
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/27 12:53ID:wAXxxOxPいらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけどなんか質問ある Pert 5.01 】
http://pc.2ch.net/test/read.cgi/php/1015127347/l50
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0497nobodyさん
02/04/14 20:46ID:???<table>
<tr>
<td>田中雅夫</td>
<td>田中さん</td>
</tr>
<tr>
<td>椎名林檎</td>
<td>林 檎</td>
</tr>
<tr>
<td>志村けん</td>
<td>バカ殿</td>
</tr>
</table>
環境はWINにactiveperl522e入れてます。
flockとか使うとエラー出たりするし、
そういう違いなんかなぁ…
0498469
02/04/14 20:50ID:???決定!ばーか
0499nobodyさん
02/04/14 20:52ID:???0500nobodyさん
02/04/14 20:52ID:???やっぱり俺のところでは普通に変換される。
Win2kにanhttpd+ActivePerl-5.6.0.616。
flockはWin95やWin98じゃ使えないんじゃなかったっけ?
0501nobodyさん
02/04/14 20:59ID:???630あたり入れない?
0502497
02/04/14 21:02ID:???はい、そうみたいです。
他の違いとかは全く分からない状態で…
勉強不足ですいません(^^;
ActivePerlもけっこう前に入れたものだし、
新しいのinstallしてみよっかな。
とりあえず、ありがとうございました〜
0503nobodyさん
02/04/14 21:06ID:???両方EUCで書くこと。
0504497
02/04/14 21:08ID:???きちんと実行しました!!
申し訳ない…鬱だ。。
ほんとにありがとう…4日くらいハマってました(汁
0505497
02/04/14 21:17ID:???ハッシュの中に
"太宰啓介", "太 宰"
を入れてて、
これを抜いたら動きました。。
0506nobodyさん
02/04/14 22:07ID:???$hoge = "\Q". join("\E|\Q", keys %xx) . "\E";
0507nobodyさん
02/04/14 22:15ID:???の方が見栄えは良いな。
いや、>>506の方が多分効率良いけど。
0510rain
02/04/14 22:37ID:sltXes8xPERLのCGIを実行させようとすると何故かダウンロードを始めてしまいます。
どうなってるのでしょう?
0511nobodyさん
02/04/14 22:40ID:???99% Content-typeの問題。
0512rain
02/04/14 22:46ID:sltXes8xに何か問題があるのでしょうか?
0513497
02/04/14 22:49ID:???おー!動いた!ありがと〜
>啓の2バイト目が“[”だから動かない。
ふむふむ…もうついていけないレベルです(^^;
$hoge = "\Q". join("\E|\Q", keys %xx) . "\E";
$hoge = join "|", map{ quotemeta } keys %fuga;
これがどんなことしてるのか、
じっくり勉強してみます。
0514nobodyさん
02/04/14 22:57ID:???1:\nを\r\nにしてみる。
2:それをスクリプトの3行目に置いてみる。
0515rain
02/04/14 23:00ID:sltXes8xやっぱり変わらずダウンロードを開始します・・・。
何が原因なんでしょう?
0516nobodyさん
02/04/14 23:02ID:???環境を明記した上でスクリプトの拡張子を.txtにしてアプして。
0517rain
02/04/14 23:06ID:sltXes8x環境はapacheの1.3です。他に必要な環境情報ありますか?
------
#!D:/program/perl/bin/perl
print "Content-type: text/plain\r\n\n";
print "Hello Perl !";
------
0518nobodyさん
02/04/14 23:10ID:???httpdがApacheなら、httpd.confに
AddHandler cgi-script .cgi .pl
って書いてあるかどうかかくに〜ん。
0519rain
02/04/14 23:15ID:sltXes8x0520nobodyさん
02/04/14 23:19ID:???\r\n\nとはどういう了見だ?
0521rain
02/04/14 23:23ID:sltXes8x0522nobodyさん
02/04/14 23:25ID:???\n\n
だね。
0523rain
02/04/14 23:26ID:sltXes8xはぁ・・今日は諦めようかな・・・。
0524nobodyさん
02/04/14 23:26ID:???それと、Apacheって適当に入れただけだとExecCGIが効いてなかったような。
0525rain
02/04/14 23:30ID:sltXes8xそれと、ExecCGIもちゃんと修正しました。
0527nobodyさん
02/04/14 23:32ID:???0528rain
02/04/14 23:34ID:sltXes8x0529nobodyさん
02/04/14 23:34ID:???ちなみに、ダウンロードされるファイルの中身は、どんなんなの?
Hello Perl!
だけが書いてあるのなら、httpdはOKで、Contenet-type があやしい。
cgiスクリプトがまるまる入っているのなら、httpdの設定があやしい。
0530nobodyさん
02/04/14 23:35ID:rKBAHNDF123456byteをメガ単位にするときって
何で割るの?1000?・・・
0533nobodyさん
02/04/14 23:37ID:???0534nobodyさん
02/04/14 23:41ID:???1026
>
0535nobodyさん
02/04/14 23:47ID:rKBAHNDFスマソ。
0537nobodyさん
02/04/14 23:54ID:???>514を見て「片方だけ変えればいい」という発想できるのは驚き。
その発想力は俺の予想を越えてた。
0538nobodyさん
02/04/14 23:57ID:???UnixかWinか。
あと>529の問いにも答えれ。
0539rain
02/04/15 00:09ID:8o4u1f330541536
02/04/15 00:17ID:???0542nobodyさん
02/04/15 00:18ID:???0543nobodyさん
02/04/15 00:19ID:???悪いがここはPerlの初心者スレなんだ。
人生の初心者は幼稚園にでも行ってくれ。
0544nobodyさん
02/04/15 00:22ID:???「ほーい。WINで、CGIスクリプトがそのままダウンロードされます。」
ね。
つーことは、httpd が、そのスクリプトをCGIだと思ってないのよ。
httpdを再起動してだめなら、apache板へ行ったほうがいいかも。
Apacheの設定を教えてください
http://pc.2ch.net/test/read.cgi/php/1003772635/
もちろん、あちらのスレのログをまず見てガイシュツじゃないか確認しよう。
0545469
02/04/15 00:32ID:???0546nobodyさん
02/04/15 00:42ID:???0547nobodyさん
02/04/15 00:52ID:???それって自分が厨房以下って言ってるのと同じだと思うんだがなぁ。
次回は是非もう少し頭のよさそうな煽りをお願いいたします。
0548469
02/04/15 01:06ID:???0549nobodyさん
02/04/15 01:15ID:???2次元配列で、列の最大インデックス値を求める効率的な方法がわかりません。
自分でなんとか書いてみて、もっとよい方法がありそうな気がしていますが
どうしても思いつきません。よろしくお願いします。
;# $data[行][列] の例
for ($[ .. $#data){
$#{$data[$_]}> $MAX_COL and $MAX_COL= $#{$data[$_]};
}
0551nobodyさん
02/04/15 01:38ID:???>>476の何が不満なんだ?
#our($a, $b);
てして、最後のほうに
print join(",",@sum),"\n";
とか書けば、動くと思うけど。
0553549
02/04/15 01:53ID:???了解しまっ!
0554469
02/04/15 02:03ID:???0555nobodyさん
02/04/15 02:07ID:???理解したいなら他人に聞いてもしょうがない。
自分で勉強するしか。
>2-4のサイトの中には親切に色々教えてくれる所もあるだろう。
理解するよりも利用したいなら>475のソースをそのまま使えばいい。
0556549
02/04/15 02:13ID:???確かに、プロトタイプや複数処理に対応しているところは一見、知ってそうだが
効率の悪い書き方が目立つね。でも、これを理解できないの? どこがわからないの?
0558549
02/04/15 02:30ID:???ループカウンタ $i なんか使う必要ないし、return も遅くなるし、
ループ内で local 宣言を逐一行なってるようなとこかな?
0560nobodyさん
02/04/15 04:37ID:???とかかかな?
0561ほほ
02/04/15 09:08ID:lbZrq7VBこのcgiに
http://yassu.no-ip.com/haikyo/cgi-bin/log.cgi?room=001
のようにURL指定すると画像張り付くようなことがしたいです。
どのようなソースをどこに付け足せばよいですか教えてください。
0562nobodyさん
02/04/15 09:29ID:???それなら$iを使った方がいい。
その手法だと一度$max_index個の配列を一時的に作ることになってメモリを喰う。
0563nobodyさん
02/04/15 09:30ID:???スクリプト改造工房 Part4
ttp://pc.2ch.net/test/read.cgi/php/1012839651/
0564ほほ
02/04/15 09:52ID:7Ngfgl5Fそちらの方が適切でしたか、誘導ありがとうございます。
0565nobodyさん
02/04/15 12:22ID:???書き込む前にベンチマークはしたのかと問いたい。問い詰めたい。小一時間問い詰めたい。
お前等、そんなものは今や時代遅れとちゃうんかと。
俺が見たところ、>>475での問題点は
・ループ内でlocalを使っている
・$a$bはパッケージ変数なので違うパッケージの時動かない
くらいなもんだ。
0566nobodyさん
02/04/15 12:25ID:???参考:http://pc.2ch.net/test/read.cgi/php/1018303030/
0567nobodyさん
02/04/15 13:36ID:???0569nobodyさん
02/04/15 13:48ID:waGQdYYq>>457
遅レスですがありがとうございました。参考になりました。
とりあえずjsのwindow.open()で?にて渡すことにしました。
Locationの使い方がサッパリ。
0571nobodyさん
02/04/15 14:51ID:WmWR88F9<FORM name="form1" action="form.cgi" method="POST" enctype="text/plain">
<INPUT type="hidden" name="c_copy" value="on" checked>
<INPUT type="hidden" name="no_check" value="off">
<INPUT type="hidden" name="subject" value="問い合わせ">
<TABLE border=0 >
<TR>
<TD>*お名前:</TD>
<TD><INPUT name="お名前" size="16" type="text"></TD>
</TR>
<TR>
<TD>*e-mail:</TD>
<TD><INPUT name="email" size="40" type="text"></TD>
</TR>
</TABLE>
<INPUT type="submit" value=" 送信 " style="HEIGHT: 24px; WIDTH: 70px">
<INPUT name=reset1 type=reset value="クリア" style="HEIGHT: 24px; WIDTH: 70px">
</></FORM>
全ての項目に入力した上で送信ボタンを押すと、次の画面で
−−−−−−−−−−−−−−−−−−−−−
内容確認
項目 内容
c_copy on
no_check
メールアドレスを入力しないと送信できません
−−−−−−−−−−−−−−−−−−−−−
とメッセージが表示されてしまいます。
何が悪いのか教えていただけませんでしょうか。
よろしくお願いします。
0572nobodyさん
02/04/15 15:00ID:???どこがPerlのコーディングの話なんだ?
Perlのコーディングの話をするスレだから、Perlのコードを出してくれ。
0573nobodyさん
02/04/15 15:01ID:???そのHTMLソースもグチャグチャじゃないか。
0575nobodyさん
02/04/15 15:18ID:WmWR88F9前任者が作成したソースをメンテナンスする事になり、苦労している次第です。
抜粋してPerlのコードを載せます。
#■内容確認
print "Content-type: text/html\n\n";
print "<html><head><title>$title</title></head>\n";
print "$body\n";
print "<h1>内容確認</h1>\n";
print "<form method=\"post\" action=\"form.cgi\">\n";
print "<blockquote><table border=1 cellpadding=3 cellspacing=3>\n";
print "<tr><td bgcolor=\"#ffcccc\"><b><font size=+1>項目</font></b></td><td bgcolor=\"#ffcccc\"><b><font size=+1>内容</font></b></td></tr>\n";
print "<tr><td></td><td></td></tr>\n";
$count = @DATA_NS;
foreach (0..$count-1) {
print "<input type=hidden name=\"$DATA_NS[($_)]\" value=\"$DATA_VS[($_)]\">\n";
print "<tr><td bgcolor=\"#ffeedd\">$DATA_NS[($_)] <br></td>";
if ($DATA_VS[($_)] =~ /\n/) { print "<td bgcolor=\"#ffffff\"><pre>$DATA_VS[($_)]</pre></td></tr>\n"; }
else { print "<td bgcolor=\"#ffffff\">$DATA_VS[($_)]</td></tr>\n"; }
print "</td></tr>\n";
}
print "</table></blockquote><p>\n";
0576nobodyさん
02/04/15 15:18ID:WmWR88F9print "<input type=hidden name=\"mailto\" value=\"$mailto\">\n";
print "<input type=hidden name=\"no_check\" value=\"on\">\n";
print "<input type=hidden name=\"ref_page\" value=\"$ref\">\n";
if ($receipt eq "on") { print "<input type=hidden name=\"receipt\" value=\"on\">\n"; }
if ($cc eq "on") { print "<input type=hidden name=\"c_copy\" value=\"on\">\n"; }
if ($ref_url ne "") { print "<input type=hidden name=\"ref_url\" value=\"$ref_url\">\n"; }
if ($ref_name ne "") { print "<input type=hidden name=\"ref_name\" value=\"$ref_name\">\n"; }
if ($subject ne "") { print "<input type=hidden name=\"subject\" value=\"$subject\">\n"; }
if ($password ne "") { print "<input type=hidden name=\"password\" value=\"$password\">\n"; }
if ($email eq '' || !($email =~ /(.*)\@(.*)\.(.*)/)) { print "<font size=+2><b>メールアドレスを入力しないと送信できません</b></font><p>\n"; }
else { print "<input type=submit value=\" 送信(submit) \"><p>\n"; }
print "</form><p><hr>\n";
以上、よろしくお願いします。
0577nobodyさん
02/04/15 15:50ID:???なんともまぁ酷いコードだな・・・。
ともあれ>571のエラーが出るならメールアドレスが入力されてないんだよ。
[email protected]って入力して試してみ。
@と.が入ってないとエラーを吐くだけだから。
つーか、前任者には聞けないのか?
0579nobodyさん
02/04/15 16:07ID:WmWR88F9考えています。
>577さん、それがメールアドレスを入力しているのに関わらず、エラーが
出ているから困っています。
ちなみに「hoge」「hoge@hage」「[email protected]」の何れを入力しても
同一のエラーが出ます。
>578さん、泣き付ける上司がいればいいのですが、あいにくおりません。
0580nobodyさん
02/04/15 16:31ID:YGeSanjU>>578はいいこと言ったよ?
0581577
02/04/15 16:55ID:???俺も>580に同意。
前任者がPerlもHTMLもロクに理解していない。
後任のあんたも全然理解していない。
そのスクリプトがエラーになる原因が「思い当たりすぎて」どうしようもない。
そしてアンタ自身にそれを試験しその経過を正確に報告するスキルが無い。
そんな状態でここから指示を出してたら1ヶ月経っても2ヶ月経っても無理だ。
はっきり言って、ケントでもレスキューでも行って多少でもまともなCGIを
拾ってきた方がよっぽどいいと思うぞ。
はっきり言う。
無理だ。
正直、俺から見ると、そのスクリプトを修正するより、自分で1から
作った方が楽にすら思える。
0582580
02/04/15 17:22ID:YGeSanjUどっかで似たもののCGI探して、
そのCGIとにらめっこして、原因を追究すべし。
2ちゃん寝るの上級者が答えてくれればいいってもんだけど、正直、わかり難い。
0584nobodyさん
02/04/15 18:00ID:???0585nobodyさん
02/04/15 18:05ID:8YI2JjdJこれってどうしてちゃんとコード変換しないのでしょう?
ヒアがいけないような気もするのですが...
みなさんはメールのフォーマットってどうやっていますか?
$hoge = "こんにちは";
&jcode'convert(*hoge,'sjis');
$mail_tex = <<HERE;
フォームの内容は$hogeです。
フォームの内容は$hogeです。
フォームの内容は$hogeです。
HERE
&jcode'convert(*mail_tex,'jis');
print $mail_tex;
ちなみにこれはEUCで書いたソースだとします。
sjis変換はログ保存用だと思ってください。
どうかよろしくお願いします。
0586469
02/04/15 18:25ID:???意味不明コード厨房に知ったか厨房かよ
ぼけ
0587585
02/04/15 18:56ID:8YI2JjdJ自分でもなにをしてるのか分からなくなってきています。
ちなみに、sjisの所をeucにしても一緒でした。
そろそろ動けばいいって作り方から卒業したいです。(泣
0589nobodyさん
02/04/15 20:09ID:???デバッグの基本はプリントだ!
$emailをチェックしている行の直前に、
print "[$email]<BR>";
って入れて、確認しよう。
0590nobodyさん
02/04/15 20:33ID:???&jcode'convert(*hoge, 'sjis')
これを
&jcode::convert(\$hoge, 'sjis');
にしておけ。
0591nobodyさん
02/04/15 20:38ID:YGeSanjU&jcode'convert(*hoge, 'sjis')
これを
exit;
にしておけ。
0593nobodyさん
02/04/15 22:38ID:???掲示板とチャットの違いってスクリプト的に
どのあたりで線引きされるもんですかね?
これとこれみたいな事ができればチャット、もしくは掲示板みたいな
定義があれば教えてください。
0594nobodyさん
02/04/15 22:52ID:G09favcm>582さん、これを作った人とはもう連絡が取れない状況で自営業をしている
友人が困って私に調べて欲しいと依頼が来た次第です。(なので、仕事とは
全く無関係です)
指摘される通り、私にはあまり知識はありません。
別のCGIを拾ってきて、一から作ってみたいと思います。
>582さん、他の似たようなCGIと比較して原因を調査してみます。
ありがとうございました!!
0595nobodyさん
02/04/15 22:53ID:???・リロードの回数が多い(リアルタイムで返事がくる)
・コメント欄がおそらく一行
・「入室」する
■ このスレッドは過去ログ倉庫に格納されています