Perlについての質問箱 21箱目

このエントリーをはてなブックマークに追加
523デフォルトの名無しさん
CGI を書くときには 有名なとほほさんの http://www.tohoho-web.com/cgi/wwwperl.txt のように
環境変数を直接読むのが普通です。
ただ、近頃は、CGI.pm を使うの方法も増えているようです。
でも、聞いた話によると、CGI,pmを読み込む分、環境変数を直接扱うより遅くなるそうですし、
使えない環境もあるそうです。
なんか、CGI.pmのマニュアル見ても難しそうだし、結局、CGI.pmを使うメリットというのは何なのでしょう?
524デフォルトの名無しさん:2006/01/12(木) 00:43:39
有名なって…

目を覆いたくなるような悲惨なスクリプトだな。
525デフォルトの名無しさん:2006/01/12(木) 00:46:04
開いた瞬間に拒絶反応起こしたwwwww
526デフォルトの名無しさん:2006/01/12(木) 00:56:52
とほほさんより有名なサイトを作れない雑魚どもは黙れ
527デフォルトの名無しさん:2006/01/12(木) 01:06:26
528523:2006/01/12(木) 01:32:10
スレ違いすみませんでした。
WEBプログラミング板で聞き直します。

でも、とほほさんのスクリプトって、そんなに酷いのでしょうか?
みんなここを見て勉強しているはずですけど。

とほほさんより良いサイトがあれば教えてください。
529デフォルトの名無しさん:2006/01/12(木) 01:37:04
>>526
>とほほさんより有名なサイトを作れない雑魚どもは黙れ

とほほにもKENTにもWeb裏技にも世話になったし感謝もしてるけど
今となってはどうしようもなく汚く移植性にも再利用性にも欠ける
最悪スクリプトなのは確かだ。

かつては先生として、今は反面教師として役に立っているwww
530デフォルトの名無しさん:2006/01/12(木) 01:43:09
再利用性があれば良いってもんでもないけどな

と、移植性や再利用性が自己目的化して、本来の目的を
達成できない大量のJavaだけプログラマを見ていると思う
531523:2006/01/12(木) 01:45:10
昔は良かったけど近頃は酷くなったということなのでしょうか?
技術力がマイナス成長したということ?
あまり、あり得ない気がするのですが。

ここが悪いというのであれば、反面教師でないサイトを具体的に教えてもらいたいのですが。
532デフォルトの名無しさん:2006/01/12(木) 01:48:51
>>526
知名度は質と比例しない

>>528
テンプレや本(詳細は書籍スレ)
533523:2006/01/12(木) 02:01:11
テンプレにあった
http://www.site-cooler.com/kwl/perl/ 
を見てみましたが、とほほさんのところが悪くて、ここが良いといわれる理由がわかりません。

そもそも、OLE使って Excel を使うとかソケット使ってメールを送るとか、難しいことは書いてあるのに、
肝心のCGI の説明が全くありません。

普通にCGIを使うだけならとほほさんのところが一番良いように見えるのですが。

本に関しては、今すぐ見れないので何とも言えないのですが....
534デフォルトの名無しさん:2006/01/12(木) 02:16:10
>>533
自分が良いと思ったら他を否定してないで信じて学べ。

とほほで勉強してPerlでいろいろ作って2年ぐらいしたら
KENTやとほほ流のやり方の限界がきっと見えてくる。

すぐ正解を求めないで、もっといろいろ勉強することだ。
とりわけ、こんなところにカキコしている暇があるなら
1ステップでもコードを書いたほうがいい。そしてコードを膨らませて
取り返しの付かないような失敗もするべきだな。

535デフォルトの名無しさん:2006/01/12(木) 02:16:13
とほほさん最高!!
煽りしかできない根暗オタクどもは逝ってよし!
536デフォルトの名無しさん:2006/01/12(木) 02:19:38
私的にPerお勉強サイトはsmartが一番良いと思うけどね。
537523:2006/01/12(木) 02:51:36
>534
http://www.site-cooler.com/kwl/perl/ を否定するつもりは有りませんでした。
もし、否定しているように見えたのならすみません。

# どちらかというと、否定されているのは とほほさん のような....

でも、マジで、どの辺がどうダメなのか具体的に教えて欲しいのです。
ダメだダメだといわれるのに、どこが悪いかわからないと、勉強しようがないじゃないですか?

# とほほさんに対する単なるヒガミってことは無いですよね?
538デフォルトの名無しさん:2006/01/12(木) 03:16:28
>>537
>>529とかに書いてある。推測だけど、今となっては…ってのは
何にも知らない頃はわからなかった悪いところがわかるようになった、ってことでは。
入門編としてはわかりやすいと思うけど門から先に入るにはちょっとね。
539デフォルトの名無しさん:2006/01/12(木) 03:22:49
ここはとほほさんを妬むクズの溜まり場
まともな話ができるWebProg板に行こうぜ!
540デフォルトの名無しさん:2006/01/12(木) 04:40:54
初心者でもわかりやすく説明するにはあれぐらいが妥当じゃないか。
KENTもPerl初心者の頃は行単位の処理がわかりやすかった。
541デフォルトの名無しさん:2006/01/12(木) 06:50:10
$hoge = "/foo/bar";
use lib $hoge;

のようなことをしたいのですが、このようにすると
use lib $hoge; のとこどでエラーになってしまいます。
use lib 変数というのはできないのでしょうか?

542デフォルトの名無しさん:2006/01/12(木) 07:04:13
WebProg板ではあのコードが御神体
543デフォルトの名無しさん:2006/01/12(木) 07:23:57
>534
そんなことを言っていると、とほほを手本にした糞スクリプトが大量に発生してしまう。
(既に大量発生しているのだが)

確かに、向上心のあるヤツならがんばって、そのうち限界が見えて来るかもしれない。
だが、ほとんどの人間はがんばりもせず、やり方に疑いも持たずに糞スクリプトを日々生産するだけだ。
544デフォルトの名無しさん:2006/01/12(木) 07:48:48
>541
use が実行されるタイミングは、$hoge="/foo/bar"より前になるので、できない。
545デフォルトの名無しさん:2006/01/12(木) 09:19:24
>>543
若いものがその体たらくではわしらの時代もまだまだ安泰じゃのう。
ガッハッハッハ
───大原巌@月下の棋士
546デフォルトの名無しさん:2006/01/12(木) 09:35:45
板違いの話は相手する方も問題だな。無視しろよ。
547デフォルトの名無しさん:2006/01/12(木) 09:55:24
板違い質問に対しては誘導以外はレス不可とテンプレに書いてくれ。
わけがわからない質問者よりわかってる分悪質だ。
548デフォルトの名無しさん:2006/01/12(木) 09:55:33
カカオかよwwwwwwwwww
549デフォルトの名無しさん:2006/01/12(木) 11:29:56
>>537
とほほの方法は非常に仕組みを理解しやすい反面、環境変数決め打ちなので
・参照できない、或いは存在しない環境変数
・参照した結果なにも入っていない環境変数
を判定できない。

具体的なところではCONTENT_LENGTHやCONTENT-TYPEはCGIの場合
POSTでデータが送信されないとそもそも存在しないわけだが、
件のスクリプトでは存在して空文字列が入っているように見えてしまう。

また、
・指定していないが実は存在する環境変数
・サーバのバージョンアップなどで新しく追加された環境変数
もキャッチアップできない。

print "Content-Type: text/plain\n\n";print "$_ = ",$ENV{$_},"\n" for (sort keys %ENV);

こんなワンライナで、参照可能な全環境変数を確認できるし、
Content-Typeにtext/plainを利用すればタグ出力も不要だし
ターミナルからコマンドで確認する場合も楽だ。
(1行目を読み飛ばせば良いだけだからな)

まずそんなことはないと思うが絶対無いとは言い切れない
「どこかの環境変数に"</xmp>"という文字列が入っていたら?」
「どこかの環境変数に悪意のvbsやJavaScriptが入っていたら?」
という潜在問題への対処でもある。

こういうのは本やWebを読んでるだけじゃダメでたくさんスクリプト
書いて、ハマって、解決しないと身に付かないし、そもそも経験則
なので、blogなどに散見されるがまとまったFAQにはなりにくいんだ。

550デフォルトの名無しさん:2006/01/12(木) 11:47:38
>>607 じゃ売ればいいじゃん

♪高値で掴んで走り出す 行く先もわからぬまま
暗い夜の帳の中へ
これ以上損し出したくないと 損切った昨日の引けに
自由になれた気がした その日の夜
551デフォルトの名無しさん:2006/01/12(木) 13:38:11
perldoc perldebug してみたところ、デバッガの起動例として、
> $ perl -d -e 42
というのがありました。

この 42 って一体何なんでしょうか?
「銀河ヒッチハイクガイド」と関係ありますか?
552デフォルトの名無しさん:2006/01/12(木) 14:14:41
>>551
perldoc perlrun
553デフォルトの名無しさん:2006/01/12(木) 16:12:56
data.txtとdata1.txtを単純に以下のように連結しdata3.txtに書き出す方法を教えてください。
よろしくお願いいたします。
data.txt    data1.txt
1,山田,A     1,山田さん,10
2,鈴木,B     2,鈴木さん,15

data3.txt
1,山田,A,1,山田さん,10
2,鈴木,B,2,鈴木さん,15
554デフォルトの名無しさん:2006/01/12(木) 16:22:43
1. おもむろにテキストエディタでdata.txtを開く
2. 置換で行末に , を付ける
3. data1.txtを開き、全て選択してコピーする
4. data.txtに矩形貼り付けする
5. 名前を付けて保存でdata3.txtを作成する
555デフォルトの名無しさん:2006/01/12(木) 16:28:30
Excel
556デフォルトの名無しさん:2006/01/12(木) 16:34:05
冬休みの宿題か?
#!/usr/bin/perl
use strict;
use warnings;
use IO::File;
my %data1= parse('data1.txt');
my %data2= parse('data2.txt');
my @keys= unique( keys %data1, keys %data2 );
my $fh= new IO::File('data3.txt','>');
for( sort @keys ){
my $key= $_;
my @data1= @{ $data1{$key} || [] };
my @data2= @{ $data2{$key} || [] };
print $fh join(',',map {nval($_)} ($key,@data1[1..2],@data2[0..2]))."\n";
}
sub nval{defined $_[0] ? $_[0] : ''}
sub unique{my %t;grep !$t{$_}++,@_}
sub parse {
my $file= shift;
my $fh= new IO::File( $file ) || die("$file:$!");
my %r= ();
while(<$fh>){
chomp();
my @data = split /,/,$_;
$r{ $data[0] }= \@data;
}
return wantarray ? %r : \%r;
}
557553:2006/01/12(木) 16:36:17
>>554 有り難うございました そうします。
558553:2006/01/12(木) 16:43:58
>>556 おーっ すごーい。
556さん 感動です。感謝申し上げます。
宿題ではないです。有り難うございました 。
559デフォルトの名無しさん:2006/01/12(木) 17:01:32
そんなもん paste -d, data.txt data1.txt で終わりじゃねーか。
560デフォルトの名無しさん:2006/01/12(木) 18:37:56
>>559
Perl のスレだからな。

open eyes, pop or die;
open mind, pop or die;
chomp, print, print "\054".
<eyes> for @your = <mind>
561デフォルトの名無しさん:2006/01/12(木) 20:18:43
ポエムキタ-
562デフォルトの名無しさん:2006/01/12(木) 20:19:18
なんか無理に問題を難しくしてないか?

open IN1,"data.txt"; open IN2,"data1.txt"; open OUT,">data3.txt";
while(<IN1>){chomp; print OUT $_ . ',' . <IN2>;}
close OUT; close IN2; close IN1;


じゃダメなのか?
まあこんなことは俺も迷わず>>559と同じことをするけど。
563デフォルトの名無しさん:2006/01/12(木) 20:43:43
1列目がIDでマージするのかと(日ごろそういう作業が多いので)勝手に思い込んでましたOTL

564デフォルトの名無しさん:2006/01/12(木) 21:58:01
565デフォルトの名無しさん:2006/01/12(木) 22:51:25
566デフォルトの名無しさん:2006/01/12(木) 22:54:18
>>565>>564
 ↑片想い↓
>>561>>562
567523:2006/01/12(木) 23:42:17
>549
確かに前半部分は
print "Content-Type: text/plain\n\n";print "$_ = ",$ENV{$_},"\n" for (sort keys %ENV);
で済むし、書き方がスマートで無いことはわかりました。
スレ違いなのに、ありがとうございました。
568523:2006/01/12(木) 23:43:51
スレ違いなのはわかっていますが、最後に一つだけ教えてください。
とほほさんのコードで、もっともよく使うのは以下の部分です。

if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
} else {
$query_string = $ENV{'QUERY_STRING'};
}
@a = split(/&/, $query_string);
foreach $a (@a) {
($name, $value) = split(/=/, $a);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
print "$name = $value\n";
$FORM{$name} = $value;
}

これが最悪とおっしゃる方々に質問です。
これを、最良の書き方をすればどうなりますか?

WebProg板で普通のコードが最悪とまで言われているのがいまだに理解できないのです。
「最悪」「反面教師」とまで言っておきながら、どこが悪いのか549以外は指摘しないし、
とほほさんを否定するばかりで、とほほさん以上のサイトを紹介してくれないですし。

569デフォルトの名無しさん:2006/01/12(木) 23:48:54
とほほ信者うぜぇ
570デフォルトの名無しさん:2006/01/12(木) 23:51:43
>>568
それは別に普通のコードだと思うけど…
妙にmap{}とか使ったりしてるコードの方が読みにくい
571デフォルトの名無しさん:2006/01/12(木) 23:59:58
ま、色々なスレを数年ROMれば分かるようになる。
572デフォルトの名無しさん:2006/01/13(金) 00:00:27
>568
この板にいるのは口先で悪口言っているだけで、実際自分では何もできない煽りばっかりなんだから、
あんまりまじめに相手するなよ。
573デフォルトの名無しさん:2006/01/13(金) 00:06:53
>>568
コーディングに限った話をすればフォーマットの"C"が無駄なくらいだな
574デフォルトの名無しさん:2006/01/13(金) 00:49:50
Content-Lengthの最大値が無いのでメモリ食い潰し
DoS攻撃を受けるな
575デフォルトの名無しさん:2006/01/13(金) 00:52:36
readのエラーチェックが無いから入力が途中で切れたり
したらCGIの内容によっては大変なことになるかもね
576デフォルトの名無しさん:2006/01/13(金) 00:54:09
>>568
> これが最悪とおっしゃる方々に質問です。
> これを、最良の書き方をすればどうなりますか?

自分で「最良の書き方」を考えても車輪の再発明どころか
劣化版ができあがるだけなので世の中で広く使われている
モジュールを使います。Perlに限ったことではありません。
577デフォルトの名無しさん:2006/01/13(金) 00:59:59
ブラウザ別Cookieの解析やマルチパートが必要になったら
それもとほほの実装をコピペして使わないといけない。
てゆうかあるのか?w
578デフォルトの名無しさん:2006/01/13(金) 01:02:08
フォームの値はデコードしてるのに名前はデコードしないのか
579デフォルトの名無しさん:2006/01/13(金) 01:30:43
            た
            し
           ま
          り
         参
       て
盛り上がっ
580デフォルトの名無しさん:2006/01/13(金) 02:01:46
とほほって有名なのか?全然知らんかったけど.
>>568 のコード現代的な Perl としてはいまいち.

簡単にいって,
1. use strict; がない (コンパイル時のチェックがきかない)
2. CGI, CGI::Util モジュールの再実装
3. my を使ってない,あと変数名がいまいち
がだめ.いま perldoc 見れない環境だからうろおぼえでかくけど普通↓だろ.

use strict; # この行がないのは基本的にだめ
use CGI;
use CGI::Util;
my $q = CGI->new;

my @names = $q->param;
foreach $name (@name) {
my $value = CGI::Util::unescape($q->param($name));
print "$name = $value\n";
$FORM{$name} = $value;
}
581580:2006/01/13(金) 02:04:06
あぁぁぁネボけて挙げてしまった…もうねるわ
処理内容としても一対一で翻訳したので微妙だがなー
582551:2006/01/13(金) 02:32:32
>>552
読んでもよくわからないのですが・・・

一応確認なのですが、
42 でなくても、 0 でも 1 でも 100000 でも効能は変わらんのですよね?
583デフォルトの名無しさん:2006/01/13(金) 03:53:55
>>(512+64+4+2)
もう1回読め。
584583:2006/01/13(金) 04:40:07
悪い、-Dと勘違いした。
http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E6%A7%8B%E6%96%87%E5%A4%89%E6%95%B0
perlfaq3では強調されているな。
585デフォルトの名無しさん:2006/01/13(金) 04:47:11
>>568
なんでperl4から5に移り変わる前後に思考停止してそれ以上向上しようとしない人達を
信じてこだわっているのか自分にはよくわからないんだけど...

膨大なモジュールの中から標準モジュールとして選ばれ、多く人から検証されているモジュールをなぜ否定するんですか?
そしてより少ない人からしか検証されていないコードを良しとするのですか?
広く知れ渡っている設計モデルやデザインパターンを否定し、あえてスパゲッティーになりやすい冗長ないコードを書き続けるのはなぜですか?
なぜ、バグの混入が少しでも少なくなるように提供されそして、使う事を推奨されているてる機能を使わず、
たびたびバグを発生させるのですか?(使っていてもバグは発生するのに...)
なぜ、同じコードを何度も(コピペだろうけど)書こうとするのですか?
なぜ、10行コーディングすれば済むプログラムをわざわざ100行かけてコーディングしようとするのですか?

色々考えそして経験していけばそのうちわかると思う。
586551:2006/01/13(金) 05:02:43
軽くぐぐってみたんですが、このへんが元ネタですかね。
http://sumo.genetics.ucla.edu/pipermail/bioinfo/2003-July/000020.html
587551:2006/01/13(金) 05:07:41
あ、 perl 5.005 の頃から 42 とあるので違いますね。
まあとりあえず数字に深い意味はないことがわかったので良しということで。
588デフォルトの名無しさん:2006/01/13(金) 08:30:26
>>585
まあ落ち着け
589デフォルトの名無しさん:2006/01/13(金) 09:02:19
ttp://ja.wikipedia.org/wiki/%E4%BA%BA%E7%94%9F%E3%80%81%E5%AE%87%E5%AE%99%E3%80%81%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E7%AD%94%E3%81%88
>「42」はメタ構文変数に似た使い方をされることがある。「42」は、integer(整数)型変数の初期値として、プログラムのテストに使われることがある。
590549:2006/01/13(金) 12:44:01
>>568
説明すると長くなるから
ttp://perldoc.jp/docs/perl/5.6.1/perlfaq9.podの
How do I decode a CGI form?の項を1000回読め。
とほほのコードがどうしてまずいのかがよ〜く解るだろう。

ついでにCGI.pmはpure perlだから読んでみるとよかろう。
もし君が解読しきれなくても本当に正しくフォームデコード
するというのはどんなに大変なことなのかぐらいは解るだろう。

CGI/util.pmのunescapeメソッドを読むだけでも君は
ここで「とほほのコードはWebProg板では普通のコード」
と言い切ってしまったことをとても恥ずかしく思うようになるはずだ。

cgi.pmのマニュアルがよく解らないというのはオブジェクト指向や
参照渡しがよく解ってないからじゃないのかな。
cgi.pmにはcgi-lib.plもどきの関数インターフェースもあるので
Webを漁って探してみてくれ。日本語訳もあるよ。

まあ頑張れ。
591デフォルトの名無しさん:2006/01/13(金) 14:12:43
なんだ?ここはCGI.pm信者ばっかなのか?
あんなクソ重くて不要な機能テンコ盛りのモジュールのどこがいいんだか
こればかりは車輪の再発明させてもらったよ
592デフォルトの名無しさん:2006/01/13(金) 14:21:33
プギャプギャ━━━━m9(^Д^≡^Д^)9m━━━━ッ!!!!
593デフォルトの名無しさん:2006/01/13(金) 14:23:04
信者とかそうじゃないけどな
やりたいようにやればいいんじゃない?プゲラッチョ
594デフォルトの名無しさん:2006/01/13(金) 14:31:02
信者ということにしてしまわないと自分の居場所がないんだよ。
そっとしておいてやれ。
595591:2006/01/13(金) 14:37:17
だってあんなクソモジュール、信者以外の誰が使うの?
マジで教えてほしいんだけど、頼む
596デフォルトの名無しさん:2006/01/13(金) 15:13:16
俺もCGIモジュールはあんま好きじゃないな
597デフォルトの名無しさん:2006/01/13(金) 15:20:46
だからって自分で書いたらその糞よりもっと糞になっちゃうような気がするんだが
598デフォルトの名無しさん:2006/01/13(金) 15:26:46
軽けりゃいいのよぉ
599デフォルトの名無しさん:2006/01/13(金) 15:34:10
こうしてセキュリティホールが日々生まれているわけだな
600デフォルトの名無しさん:2006/01/13(金) 15:36:11
どこまでセキュリティホールって言うんだか
601デフォルトの名無しさん:2006/01/13(金) 15:49:18
私も CGI.pm は重い、というか、あまり使わない機能がてんこもりな気がしています。
かと言って車輪を再発明するのはいやなので、既存ので良いのがあれば良いのですが、
基本的な機能だけの機能限定版とか、必要なときに必要な機能だけを use するとか、
そういうのでおすすめなものがあれば教えていただきたいです。
602デフォルトの名無しさん:2006/01/13(金) 16:24:53
一昔前のマシンスペックならまだしも
今時重いとか何言っちゃってんの?
603デフォルトの名無しさん:2006/01/13(金) 16:40:16
うちのサーバは一昔前のスペックですが
604デフォルトの名無しさん:2006/01/13(金) 16:54:02
■テストコード
use strict;
use warnings;
use Benchmark qw(:all);
## テスト2ではコメントアウトをはずす
# use CGI;
# use CGI::Lite;
my $count= 10000;
sub use2 {
delete $INC{ my $pkg = shift };
eval "use $pkg;";#テスト2ではコメントアウトする
return $pkg;
}
sub func {my$p=use2(shift);my$o=$p->new();}
timethese($count, {
'CGI'=> sub {func('CGI')},
'CGI::Lite'=> sub {func('CGI::Lite')}
});
1;
__END__
605デフォルトの名無しさん:2006/01/13(金) 16:54:54
■テスト環境
OS :CentOS4.2
CPU:AMD Duron 1GHz
MEM:256MB

■テスト結果1
Benchmark: timing 10000 iterations of CGI, CGI::Lite...
CGI: 9 wallclock secs ( 9.18 usr + 0.00 sys = 9.18 CPU) @ 1089.32/s (n=10000)
CGI::Lite: 6 wallclock secs ( 5.94 usr + 0.00 sys = 5.94 CPU) @ 1683.50/s (n=10000)

■テスト結果2
Benchmark: timing 10000 iterations of CGI, CGI::Lite...
CGI: 3 wallclock secs ( 3.18 usr + 0.01 sys = 3.19 CPU) @ 3134.80/s (n=10000)
CGI::Lite: 1 wallclock secs ( 0.66 usr + 0.00 sys = 0.66 CPU) @ 15151.52/s (n=10000)
606デフォルトの名無しさん:2006/01/13(金) 16:55:51
秒間1000回以上実行できるんですけど...重いですかね?
607デフォルトの名無しさん:2006/01/13(金) 16:57:20
塵も積もればなんとやら
608デフォルトの名無しさん:2006/01/13(金) 16:58:30
オーバーヘッドを考えてない馬鹿発見
609デフォルトの名無しさん:2006/01/13(金) 17:03:28
お前も釣りが好きだな
610デフォルトの名無しさん:2006/01/13(金) 17:07:28
>CPU:AMD Duron 1GHz
>MEM:256MB

高スペック杉
611デフォルトの名無しさん:2006/01/13(金) 17:14:39
>>604
use される時や new() の中でやってる処理の内容が全然違うから
そんなの比較しても何の意味も無いよ。
612デフォルトの名無しさん:2006/01/13(金) 17:18:41
オレはTemplate Toolkit使ってるのでCGI.pmのオーバヘッドなんてゴミみたいなもんだぜ。
613デフォルトの名無しさん:2006/01/13(金) 17:24:58
use CGI;
($u, $s) = times();
print $u + $s, "\n";

これで十分なベンチだろ
ちなみに俺の環境(Cel2.4G + 512MB ActivePerl5.8 WinXP)だと
0.14〜0.155で安定しとる
614デフォルトの名無しさん:2006/01/13(金) 18:21:53
CGI自体のオーバーヘッドに比べればネコパンチ程度だよ。
塵も積もればはわかるが事実上デフォルトなモジュールなんで
なるべく使うようにしてる
multipartなんかの処理も論理的に書かれてるし。
615デフォルトの名無しさん:2006/01/13(金) 18:24:07
それとコンソールから
./abc.pl mode=preview&name=taro
でフォームと同様に値を取れるのでデバッグ時にも便利。
616デフォルトの名無しさん:2006/01/13(金) 18:39:08
CGI.pm自体は仕方が無いけど
他モジュールでCGI.pmへの依存度が高いのはなんだかなとは思う
それこそCGI::Applicationなんかquery、header、cookie位なんだからリファクタして欲しい(他人任せ)
617 ◆TWARamEjuA :2006/01/13(金) 20:02:34 BE:6099078-
では次のご質問どうぞ。
618デフォルトの名無しさん:2006/01/13(金) 22:17:03
>>616
それは敢えてそうしてるんだと思うよ。
619デフォルトの名無しさん:2006/01/13(金) 22:35:31
いずれにしても自分で書くのはクソという結論には変わりない
とほほのコピペともなれば尚更無意味
あっ、でも遊びで書いてる人はいいのかな
620デフォルトの名無しさん:2006/01/13(金) 22:37:17
>>610
それのどこが高スペックなんだ・・・
今時ノートPCでもそれ以上あるし、サーバ用途ならむしろ
低スペックだっつーの
621デフォルトの名無しさん:2006/01/13(金) 22:43:46
ああ言えばこう言う
622523:2006/01/13(金) 23:33:37
CGI.pm を使う最良のコードになるかを示して欲しかったのですが、
「CGI.pm を使う」というだけで、実際にCGI.pmを使ったコードを
書いたのは 結局 >580さんだけですね。
この >580 のコードには
>574 さんの指摘した「Content-Lengthの最大値が無いのでメモリ食い潰し」
>575 さんの指摘した「readのエラーチェック」
>578 さんの指摘した「フォームの値はデコードしてるのに名前はデコードしないの」
というのは対応済みなのでしょうか?

>585 「そしてより少ない人からしか検証されていないコードを良しとするのですか?」
google で検索した結果
とほほ CGI の検索結果のうち 日本語のページ 約 338,000 件
CGI.pm の検索結果のうち 日本語のページ 約 32,000 件
一桁以上違いますね。
「知名度は質と比例しない」と言われてしまえばそれまでですけど。
623523:2006/01/13(金) 23:34:09
とはいえ、何となく、CGI.pmを使ったほうが良いという理由もわかってきました。

以前は「勉強しろ」「何年か使い続ければわかる」「それぐらいもわからないのか」
と言った抽象的な精神論みたいなコトばっかり言われて、どこが悪いのか、
さっぱりわかりませんでした。
どこが悪いかも指摘せずに、そんな言い方をされても、簡単には納得できないのは
普通だと思います。

間違っているかもしれませんが、自分の理解としては、
とほほさんのやり方は「最悪」と言うよりも......不完全?...というか、足りない?..
...というか漏れがある?....みたいな雰囲気なんですね。

でも、なんで有名サイトはCGI.pmを使っってないんでしょう?
とほほさんとか KENT とか、みんなCGI.pm を使ってません。
624デフォルトの名無しさん:2006/01/13(金) 23:40:17
偉そうなことを言ってるけど、CGI.pm使ってるのはまだまだ少数派だからな。
以前より衰えたとはいえ、主流はまだまだとほほ系だよ。
625デフォルトの名無しさん:2006/01/13(金) 23:41:00
Perl 5.8 が主流になりつつある今、
敢えて 5.005 をひきずったコードを参考にすることはないっしょ。

5年前なら「とりあえず KENT やとほほのコードを見れ」で良かったかも知れんけど。
626デフォルトの名無しさん:2006/01/13(金) 23:43:32
>623
>でも、なんで有名サイトはCGI.pmを使っってないんでしょう?
>とほほさんとか KENT とか、みんなCGI.pm を使ってません。

なんであんなサイトがなぜ有名なのか、こっちが聞きたい。
627デフォルトの名無しさん:2006/01/13(金) 23:44:49
>>623
CGI.pmがデフォで置かれてないサーバもあるし、みんながそうしているから。
今はどうなっているか知らないけどURI unescapeもなぜか効率の悪くて汚いコードが驚くほど出回ってた。
CGI界の不思議。
628520:2006/01/13(金) 23:45:51
>521
cygwinのshellで実行しているので、それなないです。

>522 よくエラーメッセージを読んで解決しました。

open passwd, "../../etc/passwd"#<-----------------相対パス
or die "How did you get logged in ? ($!)";

while (<passwd>) {
chomp;
if (/^Administrator/) {
print "eureka!";
}

}

相対パスじゃないとダメみたいです。
絶対パスはなんでダメなんでしょう。
これはcygwinのperlの仕様なんでしょうか?

スレ違いならごめんなさい。
629デフォルトの名無しさん:2006/01/14(土) 00:19:57
>>521
>cygwinのshellで実行しているので、それなないです。

perl -v で確認したのか?
630デフォルトの名無しさん:2006/01/14(土) 00:28:00
>>626
どういうサイトのほうが有名になるべきなのか教えていただけますでしょうか? 
631デフォルトの名無しさん:2006/01/14(土) 01:09:51
もういいじゃない
ずっととほほのコード使ってればいいと思うよ
どうせ中学生の趣味プログラミングだろうし
その昔、BASICのGOTOプログラミングに夢中になった
子供たちと同じだと思えば実に微笑ましい
632580:2006/01/14(土) 01:12:01
>>622
基本的に貴方の示したコードを 1:1 に直訳しただけですからね.

CONTENT_LENGTH -> $CGI::POST_MAX=1024; # 1024 バイトに制限
read のエラーチェック -> 十分ではないですが,標準でされてます.
デコード -> CGI::Util::uscape() 使ってください

正直とほほとか KENT とかは一瞥しただけでコメントしかねますが,
かわりにオススメの Perl 入門を…

1. Learning Perl(O'reilly 入門 Perl)
Windows ユーザーなら Win32 のほうを.2. 以降は結構高度なので,まずこれを飽きるまで読むといいですよ.
2. Programming Perl(邦訳:プログラミング言語 Perl )
3. Advanced Perl (邦訳:実用 Perl プログラミング)
4. Object Oriented Perl (邦訳:オブジェクト指向 Perl マスターコース)

今は Perl Best Practice を読んでます.これはすごくイイ.
633580:2006/01/14(土) 01:12:55
あぁぁぁ,また age ちゃった…もう消えまつ
634デフォルトの名無しさん:2006/01/14(土) 01:17:17
>とほほ CGI の検索結果のうち 日本語のページ 約 338,000 件
なんで"日本語のページ"?
635デフォルトの名無しさん:2006/01/14(土) 01:20:00
簡単な判断基準を教えてやろう use string; がなかったら読む価値なしの場合がほとんど
636デフォルトの名無しさん:2006/01/14(土) 01:22:43
何故とほほが有名かというと、本当に正しく作らないと
困るような重要なWebプログラムは、そもそもPerl+CGIで
書かれないから。例外はいくつもあるけどね。MovebleTypeは
Perlだっけ。

だから、PerlのCGIプログラムを探すと必然的にどうでもいい
コードばかりザックザック出てくるわけですw

ハカーに攻撃されても困らないからいい! ちょっと負荷が
掛かったらポシャルくらいは別に気にしない! プログラムの
メンテナンスなんて不要! バグなんて知るか! そういう
場合はとほほ式のプログラムを作るといいでしょう。
あ、皮肉じゃあ無いですよ。適材適所ってことです。
637デフォルトの名無しさん:2006/01/14(土) 01:23:35
>>635のレスは読む価値無し
638デフォルトの名無しさん:2006/01/14(土) 01:28:29
×string ○strict
639デフォルトの名無しさん:2006/01/14(土) 01:29:00
mod_perl使わない程度の開発案件とか
1年くらいで使わなくなる程度の案件なら
冗長(というかいい加減に)書くこともあるし
時と場合だよねぇ
640デフォルトの名無しさん:2006/01/14(土) 03:42:33
>>623
> 以前は「勉強しろ」「何年か使い続ければわかる」「それぐらいもわからないのか」
> と言った抽象的な精神論みたいなコトばっかり言われて、どこが悪いのか、
> さっぱりわかりませんでした。
知りたい側が成長しなきゃ理解できないことのほうが世の中多いんだよ。
「今の自分がどんなに未熟でも、説明のほうがちゃんとしていればどんな物事も理解できるはず」
っていう間違った信念持ってない?
641デフォルトの名無しさん:2006/01/14(土) 04:53:51
>それぐらいもわからないのか
これでどういう成長を期待してるんだかw
642デフォルトの名無しさん:2006/01/14(土) 05:08:59
オフトピだが、>640に一言。

知らせる側がきちんと説明しないと理解してもらえないことの方が世の中多いんだよ。
「説明がどんなに酷くても、自分が正しければ相手は理解するはず」
っていう間違った信念持ってない?

たいていの場合、どんなに正しくても、権限を持っているお偉いさんたちに、わかりやすく説明できないと、
予算が取れないのですよ。
逆に、どんなに間違っていても、わかりやすく説明して、納得してもらえると、あっさりハンコもらえる。

君も大きくなって、苦労したららわかると思うよ。
643デフォルトの名無しさん:2006/01/14(土) 05:37:17
>>640
> 以前は「勉強しろ」「何年か使い続ければわかる」「それぐらいもわからないのか」
> と言った抽象的な精神論みたいなコトばっかり言われて、どこが悪いのか、

これで伸びる奴も居れば、辞める奴もいる。
まあ発奮させるにしても下手な煽り方ではあるな。
644520:2006/01/14(土) 05:40:07
>629

申し訳ありません、嘘ついていました。

perl -vで確認したところ、

This is perl, v5.8.6 built for MSWin32-x86-multi-thread
(with 3 registered patches, see perl -V for more detail)

Copyright 1987-2004, Larry Wall

Binary build 811 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Dec 13 2004 09:52:01

略)

Active State社のものでした。

さらに、パスは
/cygdrive/c/Perl/bin/perlでした。

私は、cygwinのperlでなく、Active〜のを使っていたようです。

それが原因か調査してみます。
645640:2006/01/14(土) 06:44:45
>>642
> っていう間違った信念持ってない?
持ってないよ。
ていうか、唐突にまったく関係ない話を始められても困っちゃうな。
646640:2006/01/14(土) 07:14:32
>>643
といっても仕方ないんだよな。
学習者の理解度より数段階先の話や、経験から思い知ったことへの対策の重要性を、
「現時点の学習者」に技術面で理解させ、納得させるのは至難だもん。
その辺は学習者にコツコツとステップアップしてもらうしかない。

ちなみに君のすぐ上に、主人公もゴールもまったく異なる話を始めて俺に噛み付いてる人が
いるんだけど、この人のラスト一行って、ものを理解するための必要事項として
「経験を積む」ことを挙げるという、俺の主張とまったく同じ内容になってるんだよね。
一体何に噛み付きたかったんだろw
647523:2006/01/14(土) 08:24:49
>580さん
とほほ方式はココがダメ!と指摘されているのに、CGI.pm方式で書いても、
同じ問題が残っているように感じたので質問させてもらいました。

・CGI.pmで書いても書き方によってはとほほ方式で指摘された問題が残る場合がある。
・ただし、その問題解決のための関数は既に用意されている。
ということですね。

オススメの Perl 入門まで教えていただき、ありがとうございます。
(邦訳って...なにか、英語の原書を薦められてるような気も....)
週末、O'reilly 入門 Perl を買ってきます。

これまでの意見で一番参考になりました。ありがとうございました。
648523:2006/01/14(土) 08:28:08
>>640
成長しないと理解できないことが多いことは痛いほど承知してます。

ただ、2chで全く理由を示さないまま否定されても、
単なる煽りなのか、本当に問題があるのか判断できないのです。

たとえば、2chで
「Perl はダメだ。 Rakuda のほうがいい。理由? そんなの勉強すればわかる」
と言われて、Perlをやめて Rakuda を勉強する人は少ないと思うのです。

実際、まだみなさんの説明が完全に理解出来ているとは言えません。
でも、568 以降の書込はきちんと悪い理由を示してもらっているので、
煽りではなさそうだということがわかったし、なんとなくCGI.pmを使った
ほうが良さそうだとも思えるようになりました。

これからCGI.pmの使い方とか勉強していこうと思います。
いつか、理解できるようになったら、とほほ方式を頭ごなしに否定するのでなく、
「この点がこんな風に悪いんだよ」と説明できるようになりたいです。

スレ違いの上、チラシの裏ですみませんでした。