Perl コーディング初心者質問コーナー Part25
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/06/28 01:18ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
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
0176nobodyさん
03/07/03 00:10ID:???0177nobodyさん
03/07/03 00:42ID:???0178nobodyさん
03/07/03 01:30ID:???是非とも業務で活かしてくれ給え
0179nobodyさん
03/07/03 09:34ID:???(a: awk; p: perl; r: ruby; j: javascript)
a2p ある 糞
perlcc ある 糞
p2r
r2p
j2p
p2j
とくに、javascriptをperlCGIに変換したいと思っています。
0180nobodyさん
03/07/03 09:38ID:R4mGR+/mperlに挑戦しようと思っているのですが、
入門サイト等が見つかりません。
どこかおすすめないでしょうか
0182nobodyさん
03/07/03 09:49ID:???0183nobodyさん
03/07/03 10:30ID:???動作すれば良し
0184nobodyさん
03/07/03 12:43ID:LERgN2mAアフォには、「ありえない」だろな(ry
じゃ、自分で書くからいいよ。
もういくつか書いてるけど、その場しのぎの物になってる。
ある程度汎用性持たせてて書いてやろう。
0185nobodyさん
03/07/03 12:45ID:???0187nobodyさん
03/07/03 12:52ID:???指摘・批判されたら逆切れってパターンの奴。
多分釣りしてスレが荒れるのを楽しんでるだけだと思うので、スルーでお願いします。
0188nobodyさん
03/07/03 12:54ID:???0190nobodyさん
03/07/03 12:56ID:???これは嘘。
0191nobodyさん
03/07/03 13:57ID:???0192nobodyさん
03/07/03 14:00ID:???0193nobodyさん
03/07/03 14:02ID:???0194179=184
03/07/03 14:30ID:???君らち、そんなの意味ないよ。
漏れはサ、javascriptでな、自学自習の問題を出してるわけさ。
その中からな、多少変形しながら、CGIの問題を作ってるわけさ。
jsじゃな、外部ファイルにして読めないdirに置いた上にな、pragmaで
no-cache指定してもな、どうしてもcacheで見えちゃうんだな答えが。
Perl CGIでな、外との接続を絶ったコンピュータ室で試験させよう
としているわけさ。
perl2rubyはな、Perlユーザのためのruby入門って本、読んでな、
簡単な部分はP2Rに翻訳できそうだと思ったからだな。
君らちとは、レベルが違うわな。
0195nobodyさん
03/07/03 14:31ID:???0196nobodyさん
03/07/03 14:34ID:???0199nobodyさん
03/07/03 14:39ID:???それってASPとかじゃなくてクライアントサイドってことだよな?
だとするとアクセスできないディレクトリに置いたら動かないだろw
で、クライアントサイドとサーバサイドじゃ処理が違うのに変換???w
0200nobodyさん
03/07/03 14:40ID:???0202nobodyさん
03/07/03 14:43ID:???0203nobodyさん
03/07/03 14:44ID:???0204nobodyさん
03/07/03 14:46ID:???僕もがんばります!!
0205nobodyさん
03/07/03 14:49ID:???0206nobodyさん
03/07/03 14:54ID:???0207nobodyさん
03/07/03 15:01ID:???だけどお前の頭の中は、シンジュじゃ無くてPerlだよ、なら書いた
0208nobodyさん
03/07/03 15:08ID:Ctng5Cwyperl -pe 'chop; $_="print `\Q$_\E`;\n"'
0209107
03/07/03 15:39ID:???#!/perl/bin/perl
use Net::Ping;
#適当なネットワークIP
$host = "210.***.***.***";
#IPを数えるカウント
$count = 0;
($sec, $min, $hou, $day, $mon, $yea, $wek) = localtime();
$yea=$yea+1900;
$mon=$mon+1;
while (1) {
if (pingecho($host, 5)) {
$count=0;
print "$yea/$mon/$day $hou:$min:$sec Count:$count IP:$host is alive.\n";
}else{
$count++;
print "$yea/$mon/$day $hou:$min:$sec Count:$count IP:$host is no return.\n";
}
if ($count > 3) {
print "$yea/$mon/$day $hou:$min:$sec Count:$count IP:$host is dead.\n";
last;
}
sleep(5);
}
while (1) {
print "モデムが停止しましたー\a\n";
sleep(1);
}
0210209
03/07/03 16:00ID:???0211nobodyさん
03/07/03 16:05ID:Ctng5Cwyその「適当なネットワークIP」って、他人のリソースじゃないだろうな?
Pingは負荷が大きいから、回線の生死にPingを打つのは問題ありだと
思うんだけど。LAN中ならいいけど、外に出すのはマナー上良くないと
思われる。
もし俺がネットワーク管理者で、どっかのクライアントからPingが垂れ流されて
きたら、いたずらか攻撃だと判断してフィルターかけるよ。
0212あぼーん
NGNG0213nobodyさん
03/07/03 16:30ID:???Net::Pingは、デフォルトでTCPのECHOにConnectするようになってるよ。
ICMP(いわゆるPing)は指定しないと使わない。
まあどのみち他人のホストを回線チェックに使うのは感心しないけど。
0214nobodyさん
03/07/03 17:13ID:83sptUFLprint $value;
HTMLの見栄え表示用に半角数字を全角数字に置き換えを行っていますが
文字化けします。元は一桁か二桁の半角数字です。
座、とか抗とか、、、
$value =~ tr/0-9/a-j/;
だと上手くいきます。
コードはEUC-JPで書いてます。
日本語処理の問題だと思うのですがいろいろ調べてみてもわかりませんでした。
ちなみに日本語関係はJcode.pm使えます。
どなたか教えて下さい
0215nobodyさん
03/07/03 17:27ID:???jperlでない限り、tr///は2バイト文字をサポートしていません。
したがって、>>214のtr文は、
・0の1バイト目
・0の2バイト目〜9の1バイト目
・9の2バイト目
が指定されたように受け取ります。Jcode.pmを使っているのなら、
jcode($value)->tr('0-9', '0-9');
を試してみてください。
0217nobodyさん
03/07/03 17:32ID:???$value =~ s/0/0/g;
$value =~ s/1/1/g;
$value =~ s/2/2/g;
$value =~ s/3/3/g;
$value =~ s/4/4/g;
$value =~ s/5/5/g;
$value =~ s/6/6/g;
$value =~ s/7/7/g;
$value =~ s/8/8/g;
$value =~ s/9/9/g;
(w
0219nobodyさん
03/07/03 17:42ID:???$value =~ s/([0-9])/('0','1','2','3','4','5','6','7','8','9')[$1]/eg;
つぅのはどうでしょう?
0220215
03/07/03 17:50ID:???それだったら
$value =~ s/([0-9])/pack("c2", 0xa3, 0xb0+$1)/eg;
の方が良くないか?
文字コードに依存するやりかたは良くないと思う。
0223nobodyさん
03/07/03 20:28ID:Ctng5Cwyその直前で$valueをEUCに変換してるという前提だから別に構わないでしょ。
>>217や219だってISO-2022-JPでやれば一発でエラー(or文字化け)がでるわけで。
0224nobodyさん
03/07/03 20:36ID:???常套手段と同様に、
EUCに揃えてから好きに加工、というのは
普通にアリだな
0225nobodyさん
03/07/03 21:16ID:???0226nobodyさん
03/07/03 21:52ID:???あー、変換してからか。スマソ。
それでも個人的にはわかりやすいほうが良いな。
0228nobodyさん
03/07/03 23:25ID:z1S7djbc0229あぼーん
NGNG0230nobodyさん
03/07/04 11:23ID:???0231nobodyさん
03/07/04 12:28ID:???0232nobodyさん
03/07/04 12:32ID:???分かりやすさを採るか効率を採るかだと思うけど、
>>217は効率悪すぎ。
>>231
unlink <./tmp/*>;
0234nobodyさん
03/07/04 13:04ID:???0235nobodyさん
03/07/04 13:05ID:???ネタだと思いたいが、仕事で他人のコードを見る機会が多いと、
>>217が可愛く見えるくらいの想像を絶するコードに度々遭遇する。
0236nobodyさん
03/07/04 13:10ID:???0237nobodyさん
03/07/04 13:31ID:???0239nobodyさん
03/07/04 13:40ID:???エレガントな方法よりも確実に間違わない方法を
取ったりするんだ
どうせ後で直すけどな
0241231
03/07/04 14:02ID:???はい、もちろん。
lsすると
tmp.cgi
tmp
って感じになります。(実際はシェルを開放してませんが)
うち、lsとかのコマンドをcgiから実行できないようなんですが、
それって関係あります?
0242nobodyさん
03/07/04 15:49ID:???Cだと普通に使われる手法だと思うけどな>直接文字コード
まぁ↓のようにしたって構わない訳だが。
my(@zero) = unpack("C2", "0");
$value =~ s/([0-9])/pack("C2", $zero[0], $zero[1]+$1)/eg;
>>241
パーミッションの問題じゃないのか?ファイルの所有者と
CGIスクリプトの実行者が違うとか。
0244nobodyさん
03/07/04 18:51ID:???で見てみれば?
0245231
03/07/04 19:16ID:???unlink <./tmp/*> or die $!;
したら、500 Internal Server Error になってしまいましいた。
アパッチのエラーログは、
glob failed (child exited with status 127) at tmp.cgi line 2.
Died at tmp.cgi line 2.
[Fri Jul 4 19:14:46 2003] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /ここ略してます/tmp.cgi
とでました。
tmp.cgiの中身は、
------------------------------------------------------------
#!/usr/local/bin/perl
unlink <./tmp/*> or die $!;
print "Content-type: text/html\n\n";
print "これはテスト";
------------------------------------------------------------
です
0246nobodyさん
03/07/04 19:20ID:???#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
unlink <./tmp/*> or die $!;
print "これはテスト";
0249nobodyさん
03/07/04 22:27ID:???エラーメッセージの内容くらい見ようよ。
>>245
> glob failed (child exited with status 127) at tmp.cgi line 2.
globに失敗してる。cshが使えない環境か、cshがglobに使う
一時領域にアクセスできないのが原因だと思う。
素直にglobは諦めて
opendir(DIR, "./tmp");
unlink (grep !/^./, readdir DIR);
とかした方が良いかも知れない。
0250nobodyさん
03/07/05 00:36ID:???$database{"$id"} = %params;
で格納し、
foreach my $id ( keys %database ) {
print qq($id <BR>);
foreach my $key (keys %{ $database{$id} }){
print qq($key <BR>);
print qq($database{$id}{$key} <BR>);
}
}
で中身を確認しようとしていますが1個目の$idで表示が止まります。
$idは四つあり、%paramsのkeyは15個ほどあります。
foreach my $id ( keys %database ) {
print qq($id <BR>);
}
と、$idのみを全て見ようとすると三つとも表示されます。
入門 perl DBI を見て、
print Data::Dumper->Dump( [ \%database ] );
しましたが、
$VAR1 = { '2003415' => '1234 2003 game_year', '20031010' => '24/64', '20030606' => '18/32', '20030505' => '18/32' };
こんな表示です。。。。
2003415 20031010 20030606 20030505 は%databaseのkeyで、
あとは%paramsのkeyやらvalueやらの一部ですが全部じゃありません。
MLDBM初めて使うので、とりあえず格納して、それを表示させて
確かめる為のテストをしているのですが、
%{ $database{$$id} }のkeyとvalueを表示させるにはどうしたらいいのでしょうか。
0253nobodyさん
03/07/05 02:00ID:???その為の初心者スレだと思うが…。流石に釣りやネタには俺はレスしないけどな
0254nobodyさん
03/07/05 03:29ID:???そうやって一歩ずつ覚えていけばいいんだから。ただ、
エラーメッセージは読め。
英文だろうがなんだろうががんばって読め。
0255nobodyさん
03/07/05 03:43ID:???英文のメッセージが読めないなら和訳のを探せばいいのに。
ttp://www.namazu.org/~tsuchiya/perl/info/perl-ja_109.html
0256252じゃないが
03/07/05 12:13ID:???質問の本質が「リファレンスを理解してない」という事にあるので、それを指摘するのが何故悪い?
0257nobodyさん
03/07/05 17:21ID:jB+j5VLT・・・
ENDDOC
でENDDOCが見つからないと怒られるんですが
何か他にやらなければいけないことがあるんでしょうか?
0259nobodyさん
03/07/05 17:52ID:???0260257
03/07/05 17:58ID:???コピペしたわけでもないのですが・・謎
というかどの行も全部そういう風になってますね(^^;
0261257
03/07/05 18:09ID:???先頭にタブ入れちゃいけないんですね。
後ろに付いちゃいけないという事は
前にも付いちゃいけないのかと思ってやってみたら。
参考書の
print <<" AAA"
の先頭の空白の意味がわかった・・・
どうもでした>258さん
0262nobodyさん
03/07/06 02:53ID:???eval{ flock(FILE,2); };
if($@){ &MkDIR ; }
これは期待通りに動きますか?
0263262
03/07/06 03:01ID:t//EFERU0265250
03/07/06 09:49ID:1R/hd8rnアドバイスありがとうござました。
リファレンス、どうも今一理解していないようです。
何しろプログラム自体ちゃんと勉強したものじゃないもので、
どうしても書くものがフラットになりがちなのですが、ちょっと複雑なものを
strictに書こうとすると避けて通れないですよね。
本はもっぱらオライリーのものを、初めての〜とかプログラミングperlとか
CGIプログラミング、あと関係ないですけどjava scriptとか読んでますが、
なかなか奥が深いですよね。
僕としては大物で(僕にとってはですが)一から作った二つ目ですが、
アドバイスのおかげで何とかものになりそうで、ほっとしました。
クックブック欲しいなあと思ってますが、実用perl〜、は僕には難しすぎるでしょうか。
0267nobodyさん
03/07/06 19:04ID:AvDpfWTI何行目にあるかを表示したいのですがうまくいきません
$name = $in{'name'};
&jcode'convert(*name,"sjis");
if(!open(OUT,"$file")){&error(err_file);}
flock(OUT,2);
@DATA = <OUT>;
flock(OUT,8);
close(OUT);
$count = @DATA;
$i = 0;
$found = -1;
while($i<$count){
($chk[$i]) = split(/\,/,$DATA[$i]);
if($chk[$i] eq $name){
$found = $i;
}
$i ++;
}
こうしたのですが該当するものを入力してテストしてみたのですが
全部 -1 になってしまうのですがどうしたらいいのでしょうか?
テキストファイルはこういう感じです。読み込みは出来ています。
データ1
データ2
データ3
・
・
・
0268nobodyさん
03/07/06 19:08ID:???($chk[$i]) = split(/\,/,$DATA[$i]);
何がしたいんだ、ここんところ。
この行について自分の言葉で自分の意図するところを明確に書きなさい。
そしたら多分、解決できるから。
0269nobodyさん
03/07/06 19:11ID:???0270267
03/07/06 19:11ID:AvDpfWTI$chkに$i行目のデータを$nameと比較するために読み込んで格納している
つもりなのですが・・
0271nobodyさん
03/07/06 19:14ID:???0272267
03/07/06 19:21ID:AvDpfWTIwhileのあとにprintしてみたら表示できるのですが
whileの中でprintしたらエラーになってしまいました・・
0273267
03/07/06 19:25ID:AvDpfWTIテキストファイルの中身が全部読み込まれて表示はされました。
でも検索結果だけが出ません・・-1のままです。
0274267
03/07/06 19:45ID:AvDpfWTI$i = 0;
$found = -1;
while($i<$count){
($chk[$i]) = ($DATA[$i]);
print $chk[$i];
if($chk[$i] eq $name){
$found = $i;
}
$i ++;
}
今こんな感じですが $found の値が -1 です・・
0275nobodyさん
03/07/06 19:50ID:???chop;
$_ eq $name and $found,last;
}
■ このスレッドは過去ログ倉庫に格納されています