トップページ⇒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を見よう。
0514472 01/11/30 01:56ID:???
あわわ! 何で成りすますんじゃー(゚Д゚)!
473は僕じゃないよ
_gunzip さん有難う御座いました。ベンチまで取って頂いて。。
Pオプション、知りませんでした 汗;
PERL勉強しないとダメだなぁ。。。
手元のGCCですんなり使えましたけど、何か変な感じです ^^;
取り合えずマクロにする事でちょっぴり安心な結果になりました
今perldoc精読中ですー 感謝!
0515つかれた・・01/11/30 01:58ID:???
>>513
ども、pwdは以下なんですけどね。

big15:/public/pub/home/s-w-/html/cgi-bin$ pwd
/public/pub/home/s-w-/html/cgi-bin
051651301/11/30 02:21ID:???
何か情報小出しで良く分かんないよ(このスレに持ってくる事自体謎だし。)
パス合ってるなら後はファイル出来てる事とパミ確認する位かな
後、LIMITGETとか要らない、テストは最小構成で、これ基本
AuthName,AuthType,AuthUserFile,require valid-user
その辺がOKならサポ板とかで聞いてみれば、Perlは全く関係無いから言わなくてよし
051751301/11/30 02:27ID:???
ああ、これ本物のURIなんだね (^ ^;
401だからファイル見つからないか中身がおかしいっぽい(2.3のUAで確認したよ)
これで作れる?(未テスト)
#!/usr/local/bin/perl
print "Content-type: text/html\n\n<html><body>";
if($ENV{'QUERY_STRING'} eq ''){
$0=~s#.*/([^/]+)$#$1#g;
print "<h2>パスワードを入力して下さい。</h2>";
print "<form method=get action=$0><input type=text name=id size=10></form>";
} elsif($ENV{'QUERY_STRING'} =~ s/^id=//){
open(FH,">./.htpasswd")||print "ファイルを作成出来ません!";
my @salt = (a..z,A..Z);
$salt .= $salt[int(rand(52))] for(0..1);
$crypted = crypt($ENV{'QUERY_STRING'},$salt);
print FH "$ENV{'QUERY_STRING'}:$crypted\n";
close FH;
print "$ENV{'QUERY_STRING'}を暗号化しました! -> $crypted";
}
0518名無しさん@お腹いっぱい。01/11/30 03:12ID:JcBWdq/s
BBSNoteで、絵の投稿者の環境を非表示にするにはどの設定をいじれば良いのでしょうか。
0519名無しさん@お腹いっぱい。 01/11/30 03:20ID:???
おまえの脳みそ (^∀^)ハハハ
0520名無しさん@お腹いっぱい。01/11/30 08:31ID:???
>(^∀^)ハハハ
煽りのはずなんだけど、なんか可愛い。
0521名無しさん@お腹いっぱい。01/11/30 08:47ID:???
>>518
スレ違い。
0522名無しさん@お腹いっぱい。01/11/30 09:09ID:???
>>499
なるほど、何で高々現在時刻得る為にこんなに小難しくて解りにくいやり方なんだろう(それも決まりきった様に)
と前から疑問に思っていた。しかも使ってるのはまんまasctimeの返り値だし・・・
クッキーなんて、何故かやたら冗長だし、エスケープもしてないし、
たまにやってると思ったらordとか変な関数使ってて、又ややこしいし
よっぽど強力に推奨してる本でも有るのかと。
0523名無しさん@お腹いっぱい。01/11/30 09:53ID:???
クッキーって、セッションIDだけとかみたいに単純なの以外は全部CGIモジュールにやらせてるから、自分でコード書いたことない・・・
エスケープのやりかたなんてしらんけど、知っといたほうがいいのかな(藁
0524名無しさん@お腹いっぱい。01/11/30 10:20ID:???
おかしな質問ですみません。
プロバのHPスペースでCGIが使えるので使っているのですが、これがPerl4だったりします。
Perl5との違いなどでここは気を付けた方がいいというところはありますか?
とりあえず、「$a ||= 1;」とかやるとエラーが出ました。
いろいろと出来ないことが多いみたいで・・・。

もし、Perl4とPerl5の違いを説明したHPなどがあれば紹介していただけるとたすかります。
・・・できれば日本語で。

よろしくお願いします。
0525名無しさん@お腹いっぱい。01/11/30 11:59ID:???
取り合えずPerldeltaを良く嫁
気をつけるのは動かないのよりfor(0..1000)みたいな爆弾構文だ
0526名無しさん@お腹いっぱい。01/11/30 13:05ID:???
とりあえず、最新版入れろと苦情メールを入れとけ。
0527名無しさん@お腹いっぱい。01/11/30 17:44ID:???
とりあえず、ルート奪って最新版インストールした挙句、説教しとけ。
052852401/11/30 18:37ID:???
>525
検索してみましたけどちょっとよくわかりませんでした。
もう少し勉強してみます。

for(1..1000)はまずいんですか?
繰り返しが多過ぎるのが理由でしょうか?

>526-527
それはさすがに(w;
サーバー会社のでなくプロバイダについてきたスペースなので・・・。
0529名無しさん@お腹いっぱい。01/11/30 19:07ID:???
>>528
for(1..1000)は1,2,3,4,...,999,1000っていうリストを
あらかじめメモリ上に確保してからループに入るから。
1000程度なら爆弾でもないけど。

プロバイダにバージョンアップの要請しちゃダメなんてことはない。
受け入れられるか知らないけど。
つーか、乗り換えるのが吉。
0530名無しさん@お腹グー01/11/30 19:10ID:Edtr0BUz
>>481
猿より毛が3本多ければ勿論可能。ppm.batの中身を
解析しろ。難しくないぞ。
お前の能力で出来ないなら、3本毛が少ないんだな、
あきらめろ。 コキ過ぎで逝くなよ。
053152401/11/30 19:14ID:???
>529
地方ローカルのプロバで接続量は安いのでなかなか乗り換えられなくて。
予算ができたらレンタルサーバーを借りようと思っています。
これ以上はスレ違いなのでここまでで。

for(1..1000)はやはりループが多いのが問題なのですね。
さすがに1000ものループはないですが今後も気をつけるようにします。
ありがとうございました。
0532名無しさん@お腹いっぱい。01/11/30 19:20ID:???
>>531
だからループの数じゃなくて「リストをあらかじめメモリ上に確保」
が問題なんだってば。
for($i=1; $i<=1000; $i++)なら何の問題もなし。
053352401/11/30 19:23ID:???
>532
すみません、ちょっとよくわからなくなってしまいました。
for(1 .. 1000)とやると1000の変数の分の領域をメモリ上に確保してしまう
というような意味でしょうか?
だとしたら、$#list = 1000;みたいなのも同様にまずいですよね?
0534名無しさん@お腹いっぱい。01/11/30 19:43ID:???
> for(1 .. 1000)とやると1000の変数の分の領域をメモリ上に確保してしまう
> というような意味でしょうか?
御意。

> だとしたら、$#list = 1000;みたいなのも同様にまずいですよね?
領域の確保は発生するだろうね。
1000個の値が必要な配列があるのなら使うだろうし、
なければそんなことやる意味がないとおもうけど・・・
053552401/11/30 20:20ID:???
>534
なるほど。
親切な説明ありがとうございます。
今更ですが$#list=1000;みたいなバカなものを作っていた自分がいました。
早速修正しようと思います。
ありがとうございました。
0536  01/11/30 23:04ID:???
>>517(513)
アクセス成功できました。
ありがとうございます。
0537名無しさん@お腹いっぱい。01/12/01 04:31ID:kdHffvH4
お邪魔します。
http://pc.2ch.net/test/read.cgi/hp/1005035374/824-
上のスレで}の後の;を省略している人がいるのですが、
これって文法的に正しいのでしょうか。
テストしてみたら実際動いたのですが…。
0538名無しさん@お腹いっぱい。01/12/01 06:20ID:???
>>537
問題ありません。Perlにおいては正しい書き方です。
ただ、俺だったらそのスレの824のようなケースでは省きませんね。
俺が省くのは、{ print $_ } のように、{ } が短い一行になる場合です。
これは単純に美的感覚(?)の問題ですけど。
0539名無しさん@お腹いっぱい。01/12/01 08:34ID:???
その辺何でも有りなのがperlのいい所且つ困った所なの :-)
インデントとか基本的な所は当然としても
俺みたいに色んな言語をちょろ齧りしてる様な奴のperlのソースはとても汚い
記述に一貫性が無いのに、それでも通ってしまうんだよ。
逆に〜〜言語風の書き方を一貫出来る人のコードは読みやすい
だから俺は、例えばCっぽい記述を強制するStrict_cみたいなのが欲しいんだ(w
0540名無しさん@お腹いっぱい。01/12/01 21:36ID:Bx/rf8oU
$m = rand(100);

1度のスクリプト動作で一回しか乱数を使用しない場合は
乱数の初期化ってしなくてもいいんでしょうか。
0541名無しさん@お腹いっぱい。01/12/01 23:59ID:???
perl5ならそれで良い、4ならsrand要、詳しくはperldeltaで
0542名無しさん@お腹いっぱい。01/12/02 00:03ID:???
perldeltaってなんですか?
専門書?
0543名無しさん@お腹いっぱい。01/12/02 00:53ID:???
http://www.google.com/search?q=perl+perldelta&hl=ja&lr=lang_ja
0544名無しさん@お腹いっぱい。01/12/02 01:01ID:???
解らん関数有ったら検索しろよ、お前朝鮮人やろ?
0545名無しさん@お腹いっぱい。01/12/02 08:29ID:???
最後だけ余計だな。
0546名無しさん@お腹いっぱい。01/12/02 08:30ID:???
>>544
氏ね
0547名無しさん@お腹いっぱい。01/12/02 08:46ID:???
今、かちゅ〜しゃで朝の巡回したら
他の巡回スレも煽り荒らしばかりで嫌になった…。

朝くらい気持ちよく巡回させてくれよ…。
0548名無しさん@お腹いっぱい。01/12/02 17:47ID:6F2mG0wF
ふたつの絶対パスA、Bを与えて、Aから見たBの相対パスを得る。
そんなモジュールを探しているのですが、標準モジュールで
ありますでしょうか?
0549名無しさん@お腹いっぱい。 01/12/02 18:25ID:???
File::findなんかはどう?
0550名無しさん@お腹いっぱい。01/12/02 18:26ID:???
$a = "/home/user/public_html/test/bbs.cgi";
$b = "/home/user/public_html/php/index.html";

print relative_path($a, $b);

sub relative_path {
my @file = @_;
my @dirA = split /\//, $file[0];
my @dirB = split /\//, $file[1];
while (1) {
last if ($dirA[0] ne $dirB[0]);
shift @dirA;
shift @dirB;
}
my $dir = "../" x $#dirA;
return $dir . (join "/", @dirB);
}
0551名無しさん@お腹いっぱい。01/12/02 22:48ID:SEeFh0J9
すいません、perl初めてやってるんですけど、
web上でcgiにアクセスするとダウンロードのダイアログが出てきて
しまいます。これは何がいけないのでしょうか。
0552名無しさん@お腹いっぱい。01/12/02 22:53ID:???
>551
サーバーによるけど、パーミッションが悪いか、スクリプトにエラーがあるか。
そのスクリプトが動くかどうかは、ローカルでチェックしているよね?
0553名無しさん@お腹いっぱい。01/12/02 23:21ID:???
あるいは CGI として動作するように設定されていないか。
0554名無しさん@お腹いっぱい。01/12/02 23:38ID:???
アマゾンでプログラミングPerlが品切れになっています。
アマゾン逝ってよしですか?
0555名無しさん@お腹いっぱい。01/12/03 00:00ID:???
別にんなことで逝ってよしとは思わん。
一般から見れば、切らさんように随時チェックせないかん程の本じゃないし、
一二週間待っときゃ入荷されるだろ。
0556 01/12/03 05:56ID:???
12週間も待ってられん。
なんてあげ足とりの漏れは逝ってよしですか?
0557名無しさん@お腹いっぱい。01/12/03 09:14ID:???
別にんなことで逝ってよしとは思わん。
ただ 84日ぐらい待っとけ・・・とはさすがに思わん。
0558名無しさん@お腹いっぱい。01/12/03 13:42ID:???
phpでいう、count($a)
みたいな配列の要素の数を数える関数てありますでしょうか。
0559縞栗鼠(シマリス)の親方01/12/03 13:46ID:v6vCrfM9
中央高等学院の従業員「西部」が女子トイレに闖入し
汚物入れを物色して女子生徒の使用済みタンポン・ナプキン等を
個人的に収集しているというのは事実。
中央高等学院 http://chs-f.com/index.html 中央高等学院福岡校
http://www.chuo-school.ac/
0560名無しさん@お腹いっぱい。01/12/03 13:58ID:???
>>558

$count = $#hogehoge + 1; # @hogehoge の 要素数
0561javaむぎ茶01/12/03 14:19ID:???
>>558
$count = @hogehoge;
$count = scalar(@hogehoge);
0562名無しさん@お腹いっぱい。01/12/03 16:01ID:???
htmにフォームを作ってそこからcgiに飛ばしてフォームの結果を表示して
いるのですが、htmlのフォームにチェック項目が幾つかあって
全部にチェックが入っていないとcgiで変数が空かどうか調べて
$hogeがチェック入っていません。
というふうにしてcgiでメッセージを出しています。
それで当然htmlに戻るんですが、ブラウザで戻ると
前にチェックした項目が全部チェックがはずれてしまっています。
項目がたくさんあるのでこれを回避したいのですが。
仕様でinputにcheckedを入れていないのがいけないのですが。
0563名無しさん@お腹いっぱい。01/12/03 16:07ID:???
>>562

こっちだべ。

CGIだけど、なんか質問ある?part4
http://pc.2ch.net/test/read.cgi/php/1000804655/
0564>>56201/12/03 16:18ID:???
ブラウザの「戻る」なら普通リセットされないでしょ??

HTMLの段階でJavaScriptかなんか使って
フォーム入力のチェックしたら?

# 厳密にCGIの質問じゃないね
0565名無しさん@お腹いっぱい。01/12/03 17:39ID:???
わざわざ no-cache とかやって リセットされると嘆いてるに 1票
0566初めてのスクリプト01/12/03 18:15ID:4NX8xqaD
#!/usr/bin/perl -w

$check_word = $ARGV[0];
$check_file = $ARGV[1];

open(IN, "$check_file");
while ($line = <IN>) {

if ($line =~ $check_word) {
if ($line =~ /(\d+\.*\d+)\s*Mbps/ )
{
$ct++ ;
$speed += $1;
}

elsif ($line =~ /(\d+\.*\d+)\s*[kK]bps/ )
{
$ct++ ;
$tyousei = $1 / 1000;
$speed += $tyousei;
}

}
}
$avr = $speed / $ct;

print "$ct 回 \n";
print "$avr Mbps\n";
056756601/12/03 18:16ID:4NX8xqaD
改行数が多すぎるといわれたので、2に分けました。

スピードテストのサイトのデータを perlで処理するスクリプトを作ってみました。何とか動いているので、感激しているのですが、brush upするために諸先輩のご意見をお聞かせください。

測定回数と平均スピードを表示するものです。
測定サイトは、 http://speed.on.arena.ne.jp/  http://www.broadland.jp/  の2カ所。データは、2種類です。
TARGET home.att.ne.jp
DATE Sun Dec 2 06:25:37 UTC+0900 2001
TIME 4.627 sec
YOU 5432 Kbps

測定サイト http://speed.on.arena.ne.jp/ v2.0.7
測定時刻 2001/12/02 10:54:22
回線種類/線路長 ADSL/-km
キャリア/プロバイダ ACCA 8Mbps/so-net
ホスト1 WebArena(NTTPC) 4.52Mbps(2244kB,4.0秒)
ホスト2 at-link(C&W IDC) 5.3Mbps(2244kB,3.5秒)
推定最大スループット 5.3Mbps(665kB/s)
コメント ACCA 8Mbpsとしてはかなり速いです!おめでとうございます。(1/5)

これで、このように表示されます。
26 回
3.61423076923077 Mbps

課題 小数点以下を第2位くらい、あるいは、任意の桁で表示する。
独学の初心者です。よろしくお願いします。
0568名無しさん@お腹いっぱい。01/12/03 19:17ID:???
取り合えずここを見てみれ
http://www.din.or.jp/~ohzaki/perl.htm
056956601/12/03 20:01ID:???
>568
ありがとうございます。
とりあえず、sprintf を使うことにしました。

後は、時間帯別、日別の平均スピードに挑戦します。
0570名無しさん@お腹いっぱい。01/12/03 20:08ID:???
良く読んでないが、それだけの目的なら
printf(".2f",$avr);
本持って無いなら
`printf` `format` `perl` 辺りで検索してくれ
0571名無しさん@お腹いっぱい。01/12/03 20:09ID:???
あ遅かった (死
0572バックスペースとのマッチ01/12/03 20:37ID:sBy63GlF
当方かなりPerl初心者です。よろしくお願いします。

コマンドライン入出力ファイルから、特定コマンドの出力を取り出そうとしています。
(幸いな事に、ファイルにマルチバイト文字は含まれていません。)
コマンド入力の際に、「ミスタッチ→バックスペースで修正」と打たれていた場合に対応しようとし、以下の様に考えました。

1.バックスペースは直前の文字と相殺する。
2.バックスペースがある限り、1.を繰り返す。

以上を実現するため、以下の様なコードを書きました。(デバッグ用のprintも併せて記します。)

while($line =~ m/.[\b]/) {$line =~ s/.[\b]//; print "さば$lineさば\n";}
print "いわし$lineいわし\n";

以下、疑問点です。
疑問点1:
バックスペースが入っている行をこの処理に入れても、さばprintが出ません。
正規表現は合っているでしょうか?(「らくだ本」を見ても、私の頭ではいまいち解りませんでした。)

疑問点2:
いわしprintですが、バックスペースは単なるホワイトスペースとして出力されている様です。
(print出力をファイルへリダイレクトしてみましたが、明らかにホワイトスペースでした。)
私はやろうとしている事が果たしてできるのでしょうか??

蛇足ですが、当方の作業環境のperlバージョンは

This is perl, version 5.005_03 built for sun4-solaris

Copyright 1987-1999, Larry Wall

でした。
0573名無しさん@お腹いっぱい。 01/12/03 22:46ID:???
全く意味が分からんが、その「コマンドライン入出力ファイル」なる
物にはユーザのキーログがそのまま入ってるって訳?
だったらansiの表でも見ながらパーサ書くのが王道じゃ無いの?
→←とか押されたらどうするんでしょ
057457201/12/03 23:14ID:+1gWR50Y
>>573様
舌足らずな説明、すいませんです。
「コマンドライン入出力ファイル」とは、

telnet somehost | tee /tmp/log.txt

と打った時の/tmp/log.txt内容をご想像下さい。
バックスペース入力がファイルに残るのは見ているのですが、
カーソルキー入力がファイルに残り、それが入った文字列が有効なコマンド名となるのは試していませんです・・・すいません・・・
例えば、
p ^[[A s -a
みたいな感じになるのでしょうか?(でもこの場合、有効な入力にはならない気が・・・)
0575名無しさん@お腹いっぱい。01/12/03 23:28ID:wka85RYE
レンタルHTMLって何よ?
ソースがおかしいって言ったら突然CGIを語るなら
LINUX勉強しろって言われてPHP、SQLの勉強してはどうだろうか?
と罵倒され、レンタルHTMLって知らないのかと言われたんだが…
0576名無しさん@お腹いっぱい。01/12/03 23:45ID:???
ここ人少ないのか(;´Д`)
他のところで聞いてくるYO!
057754801/12/04 20:46ID:???
>>550
なるなる、やはりこの方法がいいようですね。
あの後いろいろやってみて同じ方法にたどり着きました。
0578名無しさん@お腹いっぱい。01/12/05 01:13ID:9ARk5xac
test
0579名無しさん@お腹いっぱい。01/12/05 17:18ID:rTg+WPeh
Windows環境の人、Perlスクリプトはどこに保管してます?
c:\perlの中? c:\scrとかかな? c:\pl?

スタンダードってありますか?
0580名無しさん@お腹いっぱい。01/12/05 17:58ID:my6OaWYN
起動用のバッチファイルといっしょにc:\home\bin に放り込んでいる
0581名無しさん@お腹いっぱい。01/12/05 19:34ID:???
大体書き捨て以外は用途別に別けて溜め込んでるD:\comp_lang\perl\〜〜って感じ
#何でスクリーンセーバだろ? とかちょっと悩んだ w
0582名無しさん@お腹いっぱい。01/12/05 19:34ID:Lvfs0GBW
すごーく基本的なことをきいているとおもうのですが、
foreach文で、

foreach(@line){
($_使って処理)
}

というようなことをしたいのですが、たとえば、配列@lineのが30個の要素
を持っていたとして、11番目から20番目まで処理したいとかいうとき
foreach文でそんなことは可能なのでしょうか?それとももっといい方法
があるのでしょうか?
私の少ない知識では、

for (my $i = 10; $i < 20; $i++){
($line[$i]を使って処理)
}

という幼稚な方法しか思いつかないのですが...。
ご教授お願いいたします。
0583_gunzip01/12/05 19:44ID:???
foreach (10 .. 19) {
    print $line[$_], "\n";
}
などなど。
0584名無しさん@お腹いっぱい。01/12/05 20:12ID:???
>582
foreach(@line[10 .. 19]){
処理
}
0585名無しさん@お腹いっぱい。01/12/05 23:42ID:???
>>579
うちは c:\home\pl
058657201/12/06 02:54ID:1atXp7qL
すいませんでした。
私の質問に回答をいただけないのは、きっと私の質問そのものに欠陥があったためなのでしょう。
という訳で、消えますが、その前に基本的な質問を発したくございます。

今回の様な極めて初歩的な質問(バックスペースにマッチするサンプルでOKです。)は、どのスレッドで質問すればいいのでしょう?
今回の様な、WebProgramingとは関係ない質問は、どの板で質問すればいいのでしょう?
やっぱり私は、シェル操作そのものに関して無知と思われます(カーソル移動で入力コマンド文字列を変更する技に関して、あまりよく知りません。)が、根本的に知識不足ですね。
書けば書く程鬱・・・Perlはおろか、コマンドラインでキーを打つのすら禁じられた気分であります・・・だって私は、愚者ですから・・・
失礼しました・・・
0587デフォルトの名無しさん 01/12/06 03:12ID:???
別に無視してた訳じゃ無いと思うけど、あんまり興味有る人が居ないんじゃない?
上にも書いてるけど、キーログの類なら正直Packetstormとかに行って
KEYLOGってすればワラワラ出てくる筈だから、その辺でも見てみれば
マッチングだけなら m/\b/ でいいんだけど、個人的には文字列の解釈(コマンドの引き数とかね)は
正規表現でゴチャゴチャするより、
while(substr(***))って感じで1byteづつ切り分ける方が結構簡単だったりする
漠然としてるけどこんなところ。あんまり質問を見てないけど (^^;
0588名無しさん@お腹いっぱい。01/12/06 06:24ID:???
「すぐわかるPerl」のサンプル掲示板を作ってみようと
そのままのperl文を写して掲示板を作成したのですが
まったく機能しません。。(コメントが書き込まれない)
たぶん記述は何回も確認したので間違えてないと思うのですが
よろしければアドバイス願います。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−
#!/usr/bin/perl
print "Content-type:text/html\n\n";
read(STDIN, $str, $ENV{"CONTENT_LENGTH"});
@parts=split('&',$str);
foreach(@parts){
($variable,$value)=split("=");
$value=~ tr/+/ /;
$value=~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$value=~ s/\r\n/\n/g;
$value=~ s/\r/\n/g;
$cgi{$variable}=$value;
}

$formfile="../chatform.html";
$name = $cgi{"name"};
$memo = $cgi{"memo"};
0589長いので改行は省きました01/12/06 06:25ID:???
print <<EOF;
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://************/chatform.html">
<body bgcolor=silver text=navy>
wait for a second...<P>
EOF
open(FILE, "$formfile");
@oldform = <FILE>;
close(FILE);
$li = undef;
foreach(@oldform){
if(/^<LI>/){
@body=(@body, $_);
$li = 1;
}elsif($li){
@foot = (@foot, $_);
}else{
@head = (@head, $_);
}
}
open(FILE, ">$formfile");
select FILE;
print @head;
print @body;
print <<EOF;
<LI>$name: $memo
EOF
print @foot;
close(FILE);
0590名無しさん@お腹いっぱい。01/12/06 06:55ID:???
ネタかと思ったらマジで有りやがんの →すぐわかるPerl
記述に間違いが無くてこれなら、こんな本捨てちまえ (いやマジで
つーか全然すぐ分かって無いし
愚痴だけじゃアレだから、openした時は返り値を見れ
open(FH,"hoge")||&Error("Can't open $!");
とか
if(!open(FH,"hoge")){&Error("Can't open $!");}
として
sub Error{print "Content-type: text/html\n\n$_[0]"}
後はひたすらprint分並べて変数の中確認しろ
なるべく小さく、ファイル操作するなら、まずファイルに一文字書き込み
から。
0591名無しさん@お腹いっぱい。01/12/06 07:01ID:???
つーか初心者本歌ってるのにバグ鳥の仕方書いてないのかよ (´д`;)
0592名無しさん@お腹いっぱい。01/12/06 07:24ID:???
まあねえ、、これがどの辺に書いてるかによるかも(笑 >>589
とりあえず何となく合ってる風味だからHTML間違えてるとかファイル開いてないとかじゃないの
上からどんどんprintして見ていけば?
0593説明01/12/06 07:39ID:???
もし「〜〜日で出来る」とかの初歩本買うなら、簡単なデバッグの仕方位
書いてるものを選ぼう。
いきなりCGI書かせてCarpやKcatchの説明も無しと言うのは作者が精神分裂症か
サディストかのどちらかです :3=) Byバカボンのパパ
0594名無しさん@お腹いっぱい。01/12/06 07:39ID:???
>>588
殆どそのまんま588をコピペしたけど書き込まれたよ。
chatform.htmlが存在しないか、投稿フォームがオカシイんじゃ?
0595名無しさん@お腹いっぱい。01/12/06 07:59ID:???
すぐわかるの掲示板は、設計自体がへん。
0596名無しさん@お腹いっぱい。01/12/06 08:24ID:???
>>572,586
これ(↓)試したらどうなります?

$_ = "a\bb\bc\n";
print;
s/[\b]//g;
print;
059758201/12/06 09:02ID:YsGQWh0f
>>583 >>584

どうもありがとうございました。
なるほど、こんな風に記述できるのですね。
早速やってみます。
0598名無しさん@お腹いっぱい。01/12/06 09:09ID:???
僕も半年ほど前に『すぐわかるPerl』買ったんだけど、それを終えたあとすぐにオライリーの
『初めてのPerl』やったら、『すぐわかるPerl』を買ったことをすぐに後悔した。
0599名無しさん@お腹いっぱい。01/12/06 10:04ID:???
>>590-598
参項書籍スレッドの方では結構評判いいのにね。

よかったら、その辺のこと、
http://pc.2ch.net/test/read.cgi/php/988809842/
に書いといてくれない?
サマリーに入るかもしれないし。
0600名無しさん@お腹いっぱい。01/12/06 11:26ID:???
「すぐわかるPerl」やるよりも、「初めてのPerl」やるほうが
100倍良いのは明らかだとは思う。
ただ、ホントにプログラムくむのが初めての人だったら、
一冊目が「初めてのPerl」というのはキツいかもしれない。

そういう場合のみ意味があると思う>すぐわかるPerl

# 大体、「すぐ分かるPerl」の著者は、本の中で「初めてのPerl」
を推薦してるし。
0601名無しさん@お腹いっぱい。01/12/06 14:32ID:ixzePiV3
2chネラ用のアプロダ作成中ですが(あやしいのパクリだけど)
ファイルを保存するルーチソってこれで問題ないですかね?

open(FILE, ">$file_dir\/$_[0]\.$$");
binmode(FILE);

binmode(STDIN);
while(<STDIN>) {
if ( $_ =~ /^$endline/ && $endline =~ /^--/ ){
last;
} elsif ( /^--/ ) {
$endline = $_;
} elsif ( /^Content\-Type\:\s*(.*)/i ) {
$file_type = $1;
} elsif ( /^\r\n/ ) {
next;
} elsif ( /^Content-Disposition: form-data/i ) {
next;
} else {
s/\r\n//g;
print DB $_;
}
}
close(FILE);
060260101/12/06 15:39ID:???
ダメだ、メッセージが上手く受け取れネーや。。。

cgilib使ったほうがいいのかな
0603ウンコー01/12/06 15:43ID:8ybpM+Zd
これでもよんでがんばれ。
http://www.puchiwara.com/hacking/

それでもむりなら
裏ニュース。
060457201/12/06 19:27ID:wL0DoiFw
>>587様,596様、ありがとうございます。回線切って首吊って氏ななくて良かった・・・
懲りずに書き込みます。

>>596様のスクリプトですが、私の環境で実行したところ、
c
abc
と出ました。期待値通りの出力です。
以上から考えますと、バックスペース入力は、ファイル内では
\b以外の文字コードとして存在している、という事になります。
viでファイルを開くと「^H」(カーソル移動はこれで一文字分の移動をし、^とHから成る訳ではありません。)と見えるこの文字が何であるのか、
もう少し調べてみます。
それでは。
0605588&58901/12/06 20:07ID:???
みなさん、どうもです。ヤパーリ本がおかしいんですかね..。
当方、初心者なもんで「これでやっと掲示板作成か!」って段階に
来ていたのにできないもんですから、鬱になってました。。

>>594
投稿フォームも全部記述通りに書いたのですが
やっぱり無理でした。。

とりあえず590さんのを見てもう一度考えてみます
0606名無しさん@お腹いっぱい。01/12/06 23:27ID:dTMUXoew
�@ if(100 <= $total < 200)

�A if((100 <= $total) and ($total < 200))

こういう条件式は�@のようにいっぺんに聞いてはいけないのでしょうか。
SQL文は�@のやり方でいけたんですけれど。
0607名無しさん@お腹いっぱい。01/12/06 23:42ID:???
htmlからcgiへフォーム送信しています。
htmlでmethodはpostです。
それで渡す値を色々試したいのでurlに?hoge=引数の形で
試すのですがうまく渡りません。
単にurlに引数を渡す場合でもhtmlのmethodをgetに変えなきゃいけないんでしょうか。
0608名無しさん@お腹いっぱい。01/12/06 23:50ID:???
やってみればスグに分かる。
0609名無しさん@お腹いっぱい。01/12/07 01:34ID:???
cgi-libとかってクエリでキーが複数あった場合
"\0"をセパレートとしてるけど、これって値事態に
"\0"があったら意味ないよね?
それとも\0ってなにか特殊なの?
061060901/12/07 01:37ID:???
s/値事態/値自体/;
0611名無しさん@お腹いっぱい。01/12/07 01:42ID:We0Nr7br
初心者ということで教えてください。
perlで処理をすべて1ファイルで記述して
100KBくらいになったCGIは
やっぱり重いですか。
分割したほうがいいですか?
0612名無しさん@お腹いっぱい。01/12/07 02:09ID:???
>>611

分割したって同じじゃない?
0613名無しさん@お腹いっぱい。01/12/07 02:13ID:???
>>611
>初心者ということで教えてください。
これを書いてしまったことにより無視されるに50円。
■ このスレッドは過去ログ倉庫に格納されています