Perlコーディング初心者質問スレ Part 50
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2006/06/26(月) 00:46:38ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0002nobodyさん
2006/06/26(月) 00:47:26ID:???CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/
Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1143834740/
【 スクリプト改造依頼スレ 】(丸投げ) part5
http://pc8.2ch.net/test/read.cgi/php/1141174205/
0003nobodyさん
2006/06/26(月) 00:48:09ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
0004nobodyさん
2006/06/26(月) 00:49:09ID:???Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
0005nobodyさん
2006/06/26(月) 00:49:50ID:???part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
0006nobodyさん
2006/06/26(月) 00:50:46ID:???part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/
part40 http://pc5.2ch.net/test/read.cgi/php/1106816922/
0007nobodyさん
2006/06/26(月) 00:52:13ID:???part41 http://pc8.2ch.net/test/read.cgi/php/1110383236/
part42 http://pc8.2ch.net/test/read.cgi/php/1116970588/
part43 http://pc8.2ch.net/test/read.cgi/php/1123777607/
part44 http://pc8.2ch.net/test/read.cgi/php/1129477637/
part45 http://pc8.2ch.net/test/read.cgi/php/1134049707/
part46 http://pc8.2ch.net/test/read.cgi/php/1137518266/
part47 http://pc8.2ch.net/test/read.cgi/php/1141195171/
part48 http://pc8.2ch.net/test/read.cgi/php/1146042050/
part49 http://pc8.2ch.net/test/read.cgi/php/1149017548/ (前スレ)
part44-621氏による過去ログ倉庫
ttp://user.ftth100.com/mirrorhenkan/perl/
0008nobodyさん
2006/06/26(月) 00:53:27ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0009nobodyさん
2006/06/26(月) 00:54:30ID:???[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0012nobodyさん
2006/06/26(月) 20:55:18ID:???オブジェクト指向より、いい指向ってないのかな。
大き目のプログラム組んで何ヶ月か、又は何年か後に見てみたら
全体の流れとそれぞれの処理を理解するのに数日かかってしまうのがいや。
これはオブジェクト指向とは無関係だけど。
プログラムを専門にやってないから思い出すのとあわせて、いつも
「なんでこんなイケてないんだこれ」
と自己嫌悪に陥る。
オブジェクト指向ってモジュールとか確かにべんりだけどさ。
完ぺき主義というか極端な自分としては全てをオブジェクト指向的にやろうとして、
うんざりする。
もっといいやりかたないのかね。
うんスレ違いだ。すみませんでした。
0013nobodyさん
2006/06/26(月) 21:30:04ID:???それはプログラムの組み方の問題なんじゃないのかなあ。
プログラム組むときって、ノートに処理の流れとかメモするでしょ?
テキストエディタとかで
編集
|- 検索
|- 次を検索
|- 前を検索
とかってあるけど、これもオブジェクト指向といえばオブジェクト指向だし。
編集::検索->次() みたいな。
これで例えば 「次を置換」 とか改造して入れるために、また一からプログラム全体を把握し直さなきゃわかんない、とかそーないと思うんだけど。
なんか変なとこにこだわりすぎてんじゃない?
0014nobodyさん
2006/06/26(月) 21:48:52ID:???> 完ぺき主義というか極端な自分としては全てをオブジェクト指向的にやろうとして、
> うんざりする。
> もっといいやりかたないのかね。
Ruby 使っとけ。
0015nobodyさん
2006/06/26(月) 22:04:56ID:???sub noward {
local($flag);
foreach ( split(/\s+/, $no_wd1) ) {
if (index("$in{'name'} $in{'sub'} $in{'comment'}",$_) >= 0) {
$flag = 1; last;
}
}
if ($flag) { $err .= "不適切な文字が含まれています。"; }
if ($err) { &error($err); }
}
禁止ワードのサブルーチンなんだけどコレを改行で区切る事が出来ないのだがどうすればいいのか教えてほしい。
お願いします。
0016nobodyさん
2006/06/26(月) 22:19:27ID:???文からするとサブルーチンを改行で区切りたいように読めるけど…。
0017nobodyさん
2006/06/26(月) 23:07:40ID:???0018nobodyさん
2006/06/26(月) 23:26:42ID:???悪い癖をおぼえる前にもう少しましな手本を探したほうがいいような
気がする。
0019nobodyさん
2006/06/26(月) 23:38:21ID:???古くてアレなスクリプトを配布する事による弊害を気にした方がいいね。
いまどきperl4だけの鯖なんてないし。
0020nobodyさん
2006/06/27(火) 00:04:59ID:???以前使っていたレンタル鯖がCのCGIを許可していたので
Cでゴリゴリ書いていましたが、別の業者に移管されてしまい
そこの業者はCのCGIが不可、Telnet不可とCGIが全て使えなくなってしまいました。
昔、ちょろっとPerlの本を見たことがあるのですが、コードがC以上に記号ばかりでゴチャっとしていて
追いにくいなぁと直ぐに本を閉じてしまった記憶があります。
C12年/C++3年/VB5年程です。。
0021nobodyさん
2006/06/27(火) 00:10:32ID:???独特の癖があるので人のコードを読むのは苦労するかもしれんが、
書く分には好きなように書ける。
TIMTOWDIバンザイ
0022nobodyさん
2006/06/27(火) 01:00:12ID:???sub内でローカル宣言した変数がリファレンス(Cでいうポインタ)で参照できちゃう気持ち悪い部分もあってw、
あまりに自由すぎるのがperlの欠点といったとこでしょか
0023nobodyさん
2006/06/27(火) 01:15:43ID:???Cのポインタの概念は無いんで、文字列ポインタ動かしたりはできません。
だからといって文字列は配列でもないので、配列操作にもしないことです。
Cだけの人がとりあえず書いてみたPerlのプログラム読んだ事あるけど
思いっきりCぽくて、全然Perlじゃなかったなあ。
ていうか、Perlのソース読む方が理解が早いかも。
0024nobodyさん
2006/06/27(火) 01:38:26ID:???次に構文の違い(elsifとかswitchとか)につまづいて
コンテキストの理解につまづいて
関数の仮引数が無いのにつまづいて
リファレンスをポインタだと思い込んでつまづいて
・・・がんばってください。
0025nobodyさん
2006/06/27(火) 02:08:24ID:ms3DPBt4まず、書き込みページを出力して、
データを受け取って文法チェックをして 結果を出力して、
次のデータ受け取りでファイルに書き出しをするプログラムなのですけど、
どうしても原因が見つけれないエラーが出ていて困っています。
ただ、これ自体が大きすぎるので少し違うルートで質問します。
500 Internal Server Error
というのはどのような条件下で出てくるのでしょうか?
細かい説明などをくれるとうれしいです。
それともうひとつ
プログラムやルーチンの文法ミスもないし、ファイルの参照ミスもないのに
ファイル書き込み等をしているどこかでエラーが出てくる場合
どういうミスの可能性があるでしょうか?
ずいぶんと分かりにくくなってしまっていますが、お願いします
0026nobodyさん
2006/06/27(火) 02:36:42ID:???文法ミスならローカルで実行したときわかるし、
違うなら処理の途中でためしに exit して、どこまでならエラーでないか、って突き詰めていけばわかるよな?
それでもどこもエラーないなら、
print "Content-type: text/html\n\n"; の前に何か print してる、くらいしか思いつかない。
>>25
要するに、知らんがな、ってこと。
ブラウザだけでやってんの? ちゃんとエラー文のせようよ。
0027nobodyさん
2006/06/27(火) 02:52:04ID:???> ただ、これ自体が大きすぎるので少し違うルートで質問します。
お勧めしません。逆効果です。
> 500 Internal Server Error
> というのはどのような条件下で出てくるのでしょうか?
それが、CGI が何なのかを理解せずに書いたプログラムなら、ほとんどどのような条件下ででも。
> ファイル書き込み等をしているどこかでエラーが出てくる場合
> どういうミスの可能性があるでしょうか?
あらゆるミスの可能性、及び誰のミスでもない可能性があります。
どういうミスかはわかりません。ただ、「誰のミスか」であれば、この場合は控え目に言って 99.8% 程度の確立であなたのミスです。
# 助けてあげたくてもこの質問じゃ何もできないよぅ・・・orz
0028nobodyさん
2006/06/27(火) 03:53:29ID:H9M/RMpI# CGIヘッダーの出力
print "Content-type: text/html\n\n";
# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>Hello HTML</title></head>\n";
print "<body><p>こんにちは。これはHTML文書の例です。</p></body>\n";
print "</html>";
というCGIのプログラムがあったんですが
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";はどういう役割をしているんでしょうか??
0029nobodyさん
2006/06/27(火) 04:05:08ID:???板違いなのでWeb制作技術板へ行ってらっしゃい。
0030nobodyさん
2006/06/27(火) 04:09:20ID:???何それ?
0031nobodyさん
2006/06/27(火) 04:13:07ID:???こういう事かな。レキシカルな $s が外から見える。
sub hoge {
my $s = "ababababa";
return \$s;
}
my $s_ref = hoge();
print $$s_ref;
0032nobodyさん
2006/06/27(火) 04:54:57ID:???0033nobodyさん
2006/06/27(火) 06:30:44ID:???基本的にCGIのエラーは500しか出ません。
パーミッションのミスでも文法ミスでも全て500が出ます。
>プログラムやルーチンの文法ミスもないし、ファイルの参照ミスもないのに
>ファイル書き込み等をしているどこかでエラーが出てくる場合
>どういうミスの可能性があるでしょうか?
例えば代入式の途中でexit()で終了した場合なんかは
perlがエラー→何も出力されない→500となったりします。
(が、たぶんそのエラーじゃ無い気がしますが・・・
要するに一度にいっぺんに書きすぎて、デバッグできなくなった状況ですよね。
=c
=cut
という技があるのでそれで半分づつエラーの範囲を絞ってみてはどうでしょうか?
(それ以前に全部コメントアウトしprint "\n\n"だけ書いて動くのかとかも要確認。
それが動けばそこから少しずつ増やしていけば何でエラーが起きてるのか特定できるはず・・・
0035nobodyさん
2006/06/27(火) 08:46:11ID:???static宣言見たいのがあればなぁ・・・と思うわけですよ
0037nobodyさん
2006/06/27(火) 14:12:21ID:XmLciTUK・ファイルがなければ新規にファイルを作成し$dataAを書き込んでから$dataBを書き込む。
・ファイルがあれば(すでに$dataAは書き込み済みなので)$dataBを書き込む。
2: それでこんな風にやってみたが・・・
unless ( -e $file ) {
open ( OUT , "> $file" ) or die;
flock ( OUT , 2 );
seek ( OUT , 0 , 0 );
print OUT $dateA;
truncate ( OUT, tell ( OUT ) );
close ( OUT );
}
open ( OUT , "+< $file" ) or die;
flock ( OUT , 2 );
いろいろ処理
seek ( OUT , 0 , 0 );
print OUT $dateB;
truncate ( OUT , tell ( OUT ) );
close ( OUT );
3: こんなエラーが出て上手く行かなかった。
エラーは出てないんですが、これって同時アクセスがあった場合に
ファイル壊れる可能性ないですか?
他に良い方法があればアドバイスよろしくお願いします。
0038nobodyさん
2006/06/27(火) 14:45:28ID:???他にもある気がするが、-eしてから>でopenまでの間に割り込まれると壊れるな。
File::Tempで一時ファイルを作ってリネームするとよさげ。
003937
2006/06/27(火) 15:20:15ID:???やっぱり壊れる可能性ありますよね。
>File::Tempで一時ファイルを作ってリネームするとよさげ。
ありがとうございます。
一度それでやってみます。
他にもアドバイスがあればよろしくお願いします。
0040nobodyさん
2006/06/27(火) 15:28:09ID:???・ロック用ファイルをロック
・ファイル存在チェック
・無ければ生成
・オープン
・処理
・書き込み
・ロック用ファイル閉じ
モジュール使わずコレでどうでしょう
004137
2006/06/27(火) 15:47:13ID:???アドバイスありがとうございます。
一連の流れを全てロックしてしまえ、ということですね。
ただ、ロックファイル自体が信用できるかどうか怪しい代物なので
ちょっと二の足を踏んでしまいます。
0042nobodyさん
2006/06/27(火) 15:55:10ID:cuOoVNQcその時間になったら自動で指定ファイルをFTPで別サーバー
へ移動するという処理は可能でしょうか?
Perlでcrontabに書き出すことができればと思いましたが
レンタルサーバーでそれは許可されておりません。
cronを使用せずにperlにより指定時間になっているかどうかを
チェックして時間になっていたらFTPでファイルを移動
するような処理は可能なのでしょうか?
どなたかご存知の方居られましたら宜しくお願い致します。
0043nobodyさん
2006/06/27(火) 15:57:12ID:???こっち行ったほうがいいかな。
0044nobodyさん
NGNG004537
2006/06/27(火) 16:32:46ID:???勘違いしてました。
flockでロックファイルをロックすれば良いだけでしたね。
ロックファイルが残り続けるのがちょっと気持ち悪いですが簡単に処理できるのは良いですね。
>>43
誘導先見ましたが、どちらかと言うとロックの追究が主のようで、例えば
open ( OUT , "+< $file" ) or die;
flock ( OUT , 2 );
いろいろ処理
seek ( OUT , 0 , 0 );
print OUT $dateB;
truncate ( OUT , tell ( OUT ) );
close ( OUT );
このコードのロック自体の有効性についての議論が中心のように見受けました。
わざわざ紹介していただいたのに不躾な言い分ですが、
私は上のようなロックでまず大丈夫という前提に立っているので
誘導先のスレよりもこちらで質問した方が適切だと思いますので
すみませんが、こちらに居させて下さい。
0046nobodyさん
2006/06/27(火) 16:38:21ID:???そうおっしゃらずにどうかお願いします。
過去ログ見てみても無かったので…
0047nobodyさん
2006/06/27(火) 17:35:31ID:???cron使いたくない(or 知らない)けど定時的に何かしたいってのは。
0049nobodyさん
2006/06/27(火) 18:26:33ID:???Locationでダウンロードするファイルに飛ばした後に
unlinkしてもダウンロードが始まる前にファイルが消えちゃう。
0050nobodyさん
2006/06/27(火) 18:29:53ID:???失敗してても消すのならできそう。
0051nobodyさん
2006/06/27(火) 18:34:47ID:???そこでcronですよ。
削除リストファイルを作ってそこにあるファイルは定期的に起動するcgiで削除する。
で、ファイルのダウンロードはcgiから以外にはできないようにしておく。
一度ダウンロードしたものは2度とできないようにしておく。
0053nobodyさん
2006/06/27(火) 18:40:24ID:???Content-type: application/octet-streamで検索
005449
2006/06/27(火) 18:49:19ID:???やっぱりcronかぁ。
ダウンロード自体の頻度はかなり低い(月に数回程度)ので
すごく無駄な気がしてしまふ・・・。
>ファイルのダウンロードはcgiから以外にはできないようにしておく。
そんなことってできるんスか!?
refererでチェック?でも、簡単に偽装できるから意味ないか。
>一度ダウンロードしたものは2度とできないようにしておく。
これもやり方がさっぱり思い付かない。
パーミッション変更?
でも、いつダウンロードが終了したかは確認できんよな。
これもcron?って、それならパーミッションいじるより削除した方が早いよな。
>>53
ダウンロード頻度が低い、つまり削除の頻度も低いので
定期的に削除というよりは都度削除希望であります。
でも、無理なら仕方ない、といった感じであります。
検索して調べてきます。サンクス!
0055nobodyさん
2006/06/27(火) 19:06:41ID:???つまり、CGIがファイルを読み出して出力、全部出力したらファイル削除。
素のファイルには .htaccess などでアクセスできないように設定しておく。
0056nobodyさん
2006/06/27(火) 20:19:59ID:???print "content-type:MIME-type\n\n";
open fp,"downfile";
print <fp>;
close fp;
unlink "downfile";
ただしMIME typeをちゃんと指定しないと、textで無理やり表示されたり、めんどくさい感じ・・・
あと、ダウンロード→キャンセルでもうファイルが消えてるので、結構使いづらいかも?
.htaccess使うまでもなくパーミッションを600とかにしとけば普通に見えない。
ところで、UPは誰がどういう風にするのかが気になる・・・
それによってはもっといいアイデアがあるかも??
0057nobodyさん
2006/06/27(火) 20:42:38ID:???Content-Type: application/octet-stream
か
Content-Type: application/x-download
とでもしてDLさせればいいんでない?
005849
2006/06/27(火) 21:36:29ID:???とか初見だったんで最初はよく分からんかったけど。
ファイル読み込み
↓
出力
↓
ファイル削除
で出来ますた!サンクスであります。
>>56
それとほぼ同じ形に収まった・・・2時間以上かけてだけどw
UPは特定の仲間内(?)の任意の誰か、
またはすでにあるログから情報を抽出加工したものを新規ファイルとして作成、
という何とも分かりにくい感じ。深く気にしないでね。
ところで、少し気になったんだけど、
>>53>>55>>56>>57
の言おうとしてる内容はほぼ同じって解釈で合ってるよね??
0059nobodyさん
2006/06/27(火) 21:54:28ID:???006056
2006/06/27(火) 22:01:59ID:???なるほど、そういうmimeタイプがあるんですね。知らなかったです。
nameを指定するオプションとかも使えそうな感じ・・・(?
006149
2006/06/27(火) 22:38:41ID:???open直後にunlinkしても内容は保持されるみたいだね。
てか、UNIXなんかのテンポラリファイル使う場合は常套手段だとか。
>>56の例で言えば、
open fp,"downfile";
unlink "downfile";
print <fp>;
close fp;
って感じだな。
こうした方が、異常終了の際にファイルが消えてないってリスクが減るのでベターなわけだ。
006425
2006/06/28(水) 00:51:27ID:Ty2xiiJRlocalでは、問題が見つからなかったのでサーバにアップロードしたらエラーが出まして
自分が考えれるところを確認しましたが、分からなくなってます。
ttp://hisazin-up.dyndns.org/up/src/11946.txt
再びいろいろといじっているせいで若干おかしなものも混ざっているかもしれませんが、
このような形です。
何の引継ぎなどがない場合には78行目の処理が行われて、
別ルーチンから投稿フォームが出力されます。
その投稿フォームから出力された場合に85行目からの処理が実行されて、問題がなければ
投稿OKかどうかの確認ページの出力
その確認ページからデータを引き継いだら143行目の処理に入るのですが、
143行目の処理の中で
ローカルでは問題なく結果が表示されるのですが、
サーバへアップするとどうしても500エラーとなってしまいます
0065nobodyさん
2006/06/28(水) 01:54:52ID:???0066nobodyさん
2006/06/28(水) 02:00:58ID:???0067nobodyさん
2006/06/28(水) 02:05:10ID:???どうせヘッダ出力してないとかそういうのだろうけどな。
0068nobodyさん
2006/06/28(水) 02:58:08ID:???nothing_log: <<<これは一体?
print "その記事はすでに削除されているので書き込みできません\n";
exit;
}
0070nobodyさん
2006/06/28(水) 03:45:51ID:???まず、require文とhtml_head("掲示板")だけで動くのか報告よろ。
どうせ晒すなら全部晒してもらうとこっちでもテストできるんだけど・・・
0071nobodyさん
2006/06/28(水) 03:58:15ID:???あるいは html_head("掲示板"); print "test\n"; とか
82行目のifをスルーした場合どこにもヘッダを出力する
ルーチンがないので、普通にエラー・・・・・・・・・・・・
0072nobodyさん
2006/06/28(水) 04:19:30ID:???form_vew_make($pop_name,$pop_title,$pop_msg,$pop_icon,$pop_color,$pop_password,$pop_mail,$pop_home,$pop_thread);
こういう代入はあまりにも毒々しいので、$popなんとかは全部1つのリファレンスにまとめた方がいい。
あるいは%FORMをそのまま放り込んで、$pop系の変数を全部捨てた方がいい。
$lenなんとかはlenごときで変数作るなよと、wその程度だったら
必要な時にlen_count($なんとか)で取れば十分。
あと$view_flagのgoとbackは、goとbackを代入してるif文のところで
そのまま処理すればよいので不要
0073nobodyさん
2006/06/28(水) 08:40:19ID:???BASIC認証するときのサーバの負荷について教えてください。
[ID]:[PASS]
というようなユーザファイルあると思うんですが、
何件ぐらい大丈夫なんでしょうか。
5万、10万件ぐらいは平気な感じでしょうか。
データベースでなく、ただのテキストファイルの検索って
どれぐらい大変なのかわかりません。
レンタルサーバじゃ実験できないし、
apacheのインストールの勉強も途中という
初心者ですので。
よろしくお願いします。
0075nobodyさん
2006/06/28(水) 09:34:48ID:???0076nobodyさん
2006/06/28(水) 10:04:15ID:???73です。
たしかに、1をよく読んだら全然違ってました。
初心者、perlつながりで質問してしまいました。
旅に出ます。><
0077nobodyさん
2006/06/28(水) 17:08:53ID:???0078nobodyさん
2006/06/28(水) 17:13:29ID:???0079nobodyさん
2006/06/28(水) 17:38:43ID:JW7kjnCG検索エンジンでは記号の検索ができないので、調べようにも調べられずに困っています・・・。
0081nobodyさん
2006/06/28(水) 20:12:24ID:xzEYpxD80082nobodyさん
2006/06/29(木) 00:16:50ID:???$hoge->{piyo} $hoge はハッシュへのリファレンス
$hoge->() $hoge はコードブロックへのリファレンス
$hoge->piyo() $hoge はオブジェクト(メソッドコール)
っていう理解でいいですか?
0083nobodyさん
2006/06/29(木) 00:18:42ID:???ただリファレンスじゃなくて
リファレンスの参照というか、デリファレンスというか
008482
2006/06/29(木) 00:33:58ID:???デリファレンスしてるのはアロー演算子ですよね?? 混乱してきた。。。
0085nobodyさん
2006/06/29(木) 00:37:48ID:???合ってる。$hogeは配列へのリファレンス。
0086nobodyさん
2006/06/30(金) 00:52:51ID:???if( $txt にURLが5個以含まれる ){
はじき処理
}
の場合は、IF文のカッコ内にどのような文字を入れるとよろしいでしょうか。
よろしくお願いします。
0089nobodyさん
2006/06/30(金) 10:18:19ID:???0090nobodyさん
2006/06/30(金) 10:41:50ID:???#saltはランダムです
$crypted_pass = crypt($password, $salt);
$crypted_passは、$password='1111';$saltはランダムなので毎回違った
文字列になります。すごい疑問なんですが、これをBASIC認証のための
.htpasswdファイルに書き込むと、'1111'でも$crypted_passは毎回違う
文字列ができるのに、何回$crypted_passを作ってもBASIC認証の
ダイアログに'1111'を入れると認証されます。
すごいバカなので全然理解できないです。
わかりにくいとあれですので、やってみたいことを細くします。
フォームから入力されるパスワードを$FORM{'pass'}
.htpasswdファイルにすでに書いてあるパスワードを$pass_htpasswdとします。
パスワードが正しかったら〜するって言うことが目的なんです。
if( crypt($FORM{'pass'}, $salt) eq $pass_htpasswd){hoge処理;}
こういうことがしたい場合は、$saltを固定しないとperlでは
できないんでしょうか?固定するとこの処理で大丈夫みたいです。
ランダムだと毎回違う文字列が出てきてだめです。
サーバだとなんで、'1111'ってわかるんでしょうか。
perlでもなんか処理のしかたありますか。
ちょっと、長い文章で申し訳ないですが、よろしくお願いします。
0091nobodyさん
NGNG0092nobodyさん
2006/06/30(金) 12:01:59ID:???cryptの戻り値(digest)にはsaltの情報も含まれているのであとで確認したいときは
それをsaltとしてそのまま食わせればいいことになっている。
When verifying an existing digest string you should use the digest as the salt (like
"crypt($plain, $digest) eq $digest"). The SALT used to create the digest is visible as part of
the digest. This ensures crypt() will hash the new string with the same salt as the digest.
This allows your code to work with the standard crypt and with more exotic implementations. In
other words, do not assume anything about the returned string itself, or how many bytes in the
digest matter.
0093nobodyさん
2006/06/30(金) 15:14:17ID:???>>92
90です。
ありがとうございます。
できました!!!
saltといっしょだったんですね。
cryptだとパスワードそのまま、saltにできるんですね。
すごく便利です。
ありがとうございました。
0094nobodyさん
2006/06/30(金) 15:22:58ID:???0095nobodyさん
2006/06/30(金) 16:17:19ID:???↓
受信 ↓傍受 送信 この場合、パスワードが傍受されるから
サーバー←←←[パスワード]←←←クライアント 生でパスワードを送るのはダメ
第三者 パスワードからハッシュ関数で生成した
↓ ダイジェストを送信すれば、傍受されても
受信 ↓傍受 送信 ダイジェストからパスワードは復元できない
サーバー←←←[ダイジェスト]←←←クライアント (できるけど、とてつもなく時間がかかる)ので安全
ダイジェストを受け取ったサーバーは、自分が持っているパスワードをダイジェスト化して
それと送られてきたダイジェストを比べる事で、パスワードが合っているか判断する
っていう理解でおk?
0097nobodyさん
2006/06/30(金) 16:38:41ID:???パスワード入力 ランダムなサルト
↓ ↓
crypt($password, $salt);
↓ 登録時
保存(ダイジェスト化されたパスワード)
├──────┐ 照合時
↓ │
照合 │頭にくっついているサルトだけが
↑ ↓ 自動で取り出される。
crypt($password, $salt);
↑ パスワードとサルトが同じであれば
パスワード入力 出てくるダイジェストが同じものになる
0098nobodyさん
2006/06/30(金) 16:45:56ID:???セキュリティは難しいです>< 結城たんのアリス本でも読もうかな・・・
0100nobodyさん
2006/06/30(金) 17:12:00ID:???90です
if( crypt($FORM{'pass'}, $pass_htpasswd) eq $pass_htpasswd){hoge処理;}
$saltの文字列が長いときは、crypt関数が、
頭から2文字saltを取ってきてくれて、.htpasswdに記録されている
パスワードをそのまま$saltに入れても大丈夫
っていうことかと思ったのですが。
違いましたでしょうか?
スクリプトは正常に動いてるみたいです。
よくわかりませんが、BASIC認証は通信を暗号化
しないとだめなんですよね。
たしか。
0101nobodyさん
2006/06/30(金) 17:18:35ID:???>>93の
> saltといっしょだったんですね。
から>>100の意味は読み取れないぞ。
それに、書くなら、
crypt関数は$saltの先頭2文字をsaltとみなして計算するから、
とかするのが正しいだろう。
ロジックが重要なプログラムの世界で、言葉遣いぐらい、と思っているとひどい目に遭うぞ。
0102nobodyさん
NGNG0103nobodyさん
2006/06/30(金) 17:50:56ID:???POSIXやSUSv3の範囲で言えば確かにそうだけど、
拡張として$n$...$形式のsaltに対応している環境も結構ある。
ttp://www.gnu.org/software/libc/manual/html_node/crypt.html
ttp://www.freebsd.org/cgi/man.cgi?query=crypt&apropos=0&sektion=3&manpath=FreeBSD+6.1-RELEASE&format=html
0104nobodyさん
2006/06/30(金) 18:21:42ID:u4Lu+yYC### メール投稿設定 ###
@$tmail = '';# 投稿用メールアドレス
A$mailhost = '';# 受信メールサーバー
B$mailid = ''; # メールアドレス(@以下は入れないでください)
って言うのがあったんだけどそれぞれ何入れればいいんですか?
一応番号ふっときました
0105nobodyさん
2006/06/30(金) 18:27:54ID:???Perlうんぬん以前の問題だな・・・
PC初心者板マジオススメ
http://pc7.2ch.net/pcqa/
0107nobodyさん
2006/06/30(金) 19:33:30ID:???0108nobodyさん
2006/07/01(土) 00:20:37ID:???A$mailhost = 'pop.mail.yahoo.co.jp';# 受信メールサーバー
B$mailid = 'info'; # メールアドレス(@以下は入れないでください)
とでもやっておけばいいんじゃないの?
シラネ
0109nobodyさん
2006/07/01(土) 15:05:13ID:???print "Location: http://google.com/", "\n\n";
ってやるけど、windowsのローカル+Apache+ActivePerl だと 500エラー返しちゃうんだよね…
eval でもエラーにならないんで、
Location: ができるかどうかって前もって判断することってできる?
0110nobodyさん
NGNG0111nobodyさん
2006/07/01(土) 15:50:23ID:???マジでΣ
何かの設定違ってんのかなー。
>>109 なんで &quot; になってんのかわかんないけど。
まあ、ぐぐったら tok2 とか infoseek とかでも Location は 500 るっぽいんだけど、
それは手動で設定変更して HTML吐いての meta タグで飛ばしてた。
プログラム内で自動で判断できれば一番なんだけど、何か対策ないかねえ。
0112nobodyさん
2006/07/01(土) 16:43:35ID:???も一緒に吐くとどうなる?
0113nobodyさん
2006/07/01(土) 16:44:34ID:???print "Status: 302 Shine Compact\n";
0115nobodyさん
2006/07/01(土) 18:23:44ID:???こいつを出してからにするとどう?
0116nobodyさん
2006/07/01(土) 18:52:35ID:???おおおおお(*゜▽゜)
print "HTTP/1.1 301 Moved Permanently\n";
〜
だといかなかったけど、参考にぐぐって、
print "Status: 301 Moved Permanently\n";
print "Content-type: text/html\n";
print "Location: http://google.com/\n\n";
こうしてやったらいきました! すごい! ありがとう!
……っていうか、ひょっとして Content-type: ないからあかんかった……?(;´Д`)
動くとこはなくても動いたんだけどw
0117nobodyさん
2006/07/01(土) 19:08:37ID:???>>115
それはnph-*なファイル名でないとあかんやん。
0119nobodyさん
2006/07/01(土) 19:13:14ID:R0VHYefT鯖のインストール済モジュールが知りたくて、検索してたら↓の情報がありました。
ttp://antipop.gs/mt/2004/11/21/115534
ただこれを実行すると DBI など複数同一表示されるものがあるのですが、
これを重複をなくすにはどうすれば良いでしょうか?
0120ヽ(´ー`)ノ ◆.ogCuANUcE
2006/07/01(土) 20:57:42ID:???0122nobodyさん
2006/07/01(土) 23:52:40ID:???小数点さえなければ
------------------------------------------------------
$cout = sprintf("%06d",$cout);
for($i = 0; $i < length($cout); $i++){
$no = substr($cnt,$i,1);
push(@image,"./img/$no.gif");
}
print "Content-type:image/gif\n\n";
binmode(STDOUT);
print &gifcat'gifcat(@image);
------------------------------------------------------
というコードで、数字を画像表示させられるというのは分かるのですが、
なにぶん小数点が含まれるとなると・・・・どうしたらよいか・・・・
ちなみに「img」ディレクトリに「0.gif〜9.gif」という数字の画像と
「point.gif」という小数点を表示する画像が入っています。
どうかよろしくお願いします orz
0123nobodyさん
2006/07/02(日) 00:05:54ID:???未だにperl4なのがアレだけど…。多分、以下の1行入れるだけでいける。
for($i = 0; $i < length($cout); $i++){
$no = substr($cnt,$i,1);
$no = 'point' if ($no eq '.'); ### この行を入れる ###
push(@image,"./img/$no.gif");
}
0124122
2006/07/02(日) 00:29:28ID:???え・・・>>122は入門書っぽい本を参考にして組んだのですが・・・
何かまずかったでしょうか・・・?
とりあえずありがとうございました orz
0125nobodyさん
2006/07/02(日) 04:58:17ID:???0126119
2006/07/02(日) 13:06:22ID:???ありがとうございました、希望の動作になりました。
Perl はコードが省略化されて読めなかったりするのですが、
119のリンク先では↓の部分が難解でした。もしよければ解説おねがいします。
print qq|<li><a href="http://search.cpan.org/search?module=$_">$_</a></li>\n|
for sort
map {$_ =~ m/^.+?"Module" (.+?)$/}
qx/perldoc perllocal/;
# printの行は↓に変更、最後にセミコロンを付けるとエラー
# print "<li><a href=http://search.cpan.org/search?module=$_>$_</a></li>\n"
# for sortの行は理解不能無理、こんなループ見たことない検索しても出てこない
# mapの処理自体は分かるが、左に代入先などがないので出力が分からん・・・
# qxは調べて分かった。でもどういう出力に・・・
0127nobodyさん
2006/07/02(日) 13:35:34ID:???qx: qxの実行結果を
map: map に通してモジュール名だけ抜く
sort: ↑をソートして
for: そのそれぞれについて(foreach)
print: print
0128119
2006/07/02(日) 14:16:29ID:???ありがとうございます、↓やっと分かってきました。
use strict;
my %c;
my @qx = qx/perldoc perllocal/;
my @module = map {$_ =~ /^.+?"Module" (.+?)$/} @qx;
my @modlist = grep { !$c{$_}++ } @module;
@modlist = sort @modlist;
foreach (@modlist) { print "<li>$_</li>\n"; }
0129nobodyさん
2006/07/02(日) 17:13:00ID:???エラーメッセージが一つしか表示されない。
もう一つ表示するはずなんだが・・・。
&error("ダメだ","ダメっす");
コレだと『ダメだ』しか表示されない・・・。
『ダメだ』と『ダメっす』をランダムってか表示させたいんだが
0130nobodyさん
2006/07/02(日) 17:36:43ID:???配列の一番はじめの要素
>&error("ダメだ","ダメっす");
サブルーチンに配列で引数渡してるところ
>コレだと『ダメだ』しか表示されない
アタリマエ
0131nobodyさん
NGNGprint $_[int(rand(scalar(@_)))];
}
我ながら酷いコードだな
0132nobodyさん
2006/07/02(日) 18:36:42ID:n0vd3nFA今回UTF-8を使用しようと思いjcode.pmでエンコードしようとしたのですが
一部の文字列が文字化けすることに気づきました。
例)心霊
ちなみにエンコード方法は
Jcode::convert (\$value, 'utf8');
としているだけで特に怪しいことはしていないと思います
ちなみにそこを#でコメントアウトしてみると
フォームページ自体をUTF-8で書いているため
さきほどの「心霊」と言った文字列も問題なく表示されるわけですが
フォームページをEUC-JPなどにすると
当然のごとくEUC-8になってしまうため問題があります
何か私自身の書き方に問題があるのでしょうか?
それとも仕様なのでしょうか?
お手数をおかけして大変申し訳ありませんがご教示頂けると嬉しいです
よろしくお願い致します
0133nobodyさん
2006/07/02(日) 18:53:53ID:???0134nobodyさん
2006/07/02(日) 18:58:30ID:???いまんとこ解決というかそれは当たり前というか。
>>130 も書いている通りなんだが。
>>131 もなんか書いてるし。
それを参考にどうぞ。
0135nobodyさん
2006/07/02(日) 19:00:42ID:???配列の添え字は整数しかとらないんだし、
randの引数はスカラーコンテキストだからこれで良いじゃないか。
sub error { print $_[rand @_] }
>>132
何をしようとしているときに問題が発生するのかが良くわからんので、問題が発生するときの
・内部エンコーディング(UTF-8ならutf-8フラグはあるのかどうかも出来れば)
・出力/入力するエンコーディング
・どっちの方向に変換しようとしているのか
辺りを詳しく。
スクリプトの内部処理をUTF-8で行って、出力するページのエンコーディングを
EUC-JPにしようとしているわけ?勘では多分、使い方の間違いだ。
Jcode::convert(\$value, '変換先のエンコーディング', '元の文字列のエンコーディング');
ってやって見れ
0136132
2006/07/02(日) 19:09:39ID:n0vd3nFAごめんなさい、誤解させてしまうような書き方をしてしまいました
基本的には内部においてUTF-8で処理したいのです
eucやsjisに変換する気はありません
ただどんな文字コードでフォームから入力されても
UTF-8に変換したいために
Jcode::convert (\$value, 'utf8');
としています
# 現在のブラウザではフォーム入力ページがUTF-8なら
# UTF-8で文字コードを送信してくれるという話なので(どっかで聞きました)
# Jcode::convert (\$value, 'utf8');
# をしなくても実害はないといえば実害がないのですが
# 万が一sjisとかで送信してくるブラウザ等があった場合にも
# 対応したいと思い変換処理させています
ところでUTF-8フラグはEncodeモジュール以外でも必要なのでしょうか?
(今回の件で色々ぐぐっていたときUTF-8フラグというものについても読んだのですが
Jcodeモジュールを使う時にフラグ云々という話は出てこなかったので不要なのかと思っていました)
続きます
0137nobodyさん
2006/07/02(日) 19:10:50ID:???を
jcode($value)->utf8();
にしてみたら?
自動判別が働いて正しく格納されるはず。
入力のエンコードを誤認してたらどうしようもないけどね
0138nobodyさん
2006/07/02(日) 19:11:56ID:n0vd3nFAsub decode {
my ($buffer, $key, $value);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach (@pairs) {
($name, $value) = split(/=/);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Jcode::convert (\$value, 'utf8');
$in{$name} = $value;
}
}
0139nobodyさん
2006/07/02(日) 19:16:54ID:???># 万が一sjisとかで送信してくるブラウザ等があった場合にも
># 対応したいと思い変換処理させています
そりゃおまいさんがどんなコンテンツを管理しているかによる。
UTF8で書かれたページからshiftjisで
しかもフォームデータをエンコードもせずにダイレクトで送ってくるブラウザ
使ってる奴なんて死ねばいいと思うよ
0140nobodyさん
2006/07/02(日) 19:19:08ID:???0141nobodyさん
2006/07/02(日) 19:23:43ID:n0vd3nFAjcode($value)->utf8();
にしてみたら上手く行ったかと思ったのですが
ためしにフォームページをEUC-JPにして入力してみると
入力された文字列はEUC-JPのまま出力されていました・・・
>>139
>しかもフォームデータをエンコードもせずにダイレクトで送ってくるブラウザ
>使ってる奴なんて死ねばいいと思うよ
もうちょっと正直に書きますと
ある分野のデータベースを作っているのですがその検索フォームを
「自分のサイトにつけたい人はどうぞ」
という風にしたいと考えているのです
ですのでその入力ページがeucもあればsjisもあるかと思うので
鯖側でUTF-8に変換したいなあと・・・
最後まで解決しなければその案は断念しますがw
0142nobodyさん
2006/07/02(日) 19:47:20ID:???切り分けができてないな。そんなに長いプログラムではどこで
間違ってるか特定できないだろ。
Jcode::convertを疑うのなら、4valueにこの値をいれて
Jcode::convertを呼んだらこれこれこうなったけど
期待している値はこれだというのを示さないと。
0143nobodyさん
2006/07/02(日) 20:06:33ID:n0vd3nFAえっと・・・このソースの大半は一般的な入力データ処理だと思いますが・・・
とりあえず>>132で書いた通り
Jcode::convert (\$value, 'utf8');
をコメントアウトすれば問題なく処理されます
一応文字化けした結果も載せておくと
「心霊」をUTF-8で記載されたページから入力すると
unpackされた値は「%E5%BF%83%E9%9C%8A」になりそれをpackして
Jcode::convert (\$value, 'utf8');
で変換すると「綽??」(← 文字化けしたもの)
となってしまうというわけです(当然期待している値は「心霊」です)
ちなみに「心」だけでも「霊」だけでも正常に出力されます
0144nobodyさん
2006/07/02(日) 20:40:15ID:???utf8フラグと文字コードのダンプぐらい示さないと。
0145nobodyさん
2006/07/02(日) 20:48:13ID:???Jcode::convert (\$value, 'utf8', 'euc');
と
Jcode::convert (\$value, 'utf8', 'sjis');
ってやった結果も記してくれんかな
0146nobodyさん
2006/07/02(日) 20:55:32ID:???ttp://www.russky.net/article/list.asp?id=855
これは gb2312 だけど euc-kr にも日本語のひらがなが入っていたようないないような。
0147nobodyさん
2006/07/02(日) 21:13:47ID:???0148nobodyさん
2006/07/02(日) 21:35:08ID:???「綽??」ってのはUTF-8の文字列をEUC-JPとして見たときのものだ。
つまり変換自体には問題はなくて、結果を表示するページを
間違えてUTF-8じゃなくEUC-JPにしてしまっている、と。
0149nobodyさん
2006/07/02(日) 21:47:43ID:pDw8h7zXtr/\x0D\x0A/\n\n/;
とかって、改行コードの統一処理はどのタイミングでやるもの?
何かファイルを読み込むごとに毎回するもの?
0150nobodyさん
2006/07/02(日) 21:52:43ID:???統一しちゃうね。場合によっては無駄になることもあるけどわかりやさ
優先。
0151132
2006/07/02(日) 22:03:39ID:n0vd3nFA>>143の??は実際には文字化けの□をもっと縦長にした感じのが出ています
ただここにコピペしたら?に変換されてしまったわけで
>>145
入力ページはUTF-8で記載されていますのでその上での結果です
>Jcode::convert (\$value, 'utf8', 'euc');
「綽??」
>Jcode::convert (\$value, 'utf8', 'sjis');
「蠢?怺」
ちなみに↑の例ですが入力ページをそれぞれeucおよびsjisに変えたら問題ありませんでした
今回の「心霊」のようにそれぞれの文字コードで別の問題ある文字がないとは限りませんが・・・
>>146
そうかもしれません
>>147
その可能性がないとは言えませんが私は適切にやってるつもりなのでなんとも
>>148
ブラウザでのエンコードはUTF-8になっていることを確認した上で見ています
なのでブラウザの問題ではなくむしろ下に書くように
jcode.pmモジュールがUTF-8をEUC-JPに誤読しているのかと・・・
つづく
0152132
2006/07/02(日) 22:04:39ID:n0vd3nFAJcode::convert (\$value, "utf8", "utf8");
正しく「心霊」と表示されました
また「心」と「霊」は単独で正確に表示できることから
思うに「心霊」と続けて入力したとき
繋がっている部分の文字列から文字コードをEUC-JPと判断された上で
UTF-8に変換しているのではないかと個人的には思っています
例) #文字コードについて調べるのが面倒なので下記のような仮定で・・・
UTF-8 : 心→aaaaaa 霊→bbaabb
EUC-JP : 綽→aaaa ?→aabb ?→aabb
今めちゃくちゃ眠いので
もしかしたら落ちてしまって反応明日以降になっちゃうかも・・・
そのときはごめんなさい
あと、忘れていたのですが、ご回答頂いた方々、ありがとうございます
0153nobodyさん
2006/07/02(日) 22:07:24ID:???それは、
「コードの最初の方に1箇所だけ統一処理を置いて読み込む度に処理される」
ということを意味してるのか、
「必要不要は置いといて、オープンする度に毎回とりあえず統一処理する」
ということなのか、どっちの意味ですか?
読解力不足ですみません。
0154148
2006/07/02(日) 22:27:28ID:???そうか、ごめん。こっちの環境ではちゃんと自動認識できてたもので、つい。
なら、SJISの一バイトカナの問題もあるし、
呼び出し元のフォームでエンコーディングを指定してもらうか、
もしくはフォームに適当なマルチバイト文字列を埋め込んでおいて、
それが何になったかでエンコーディングを調べるってのはどうよ。
# formにはaccept-charsetなんてのもあるのだけれど、IE対応してないんじゃ仕方ない…
0155132
2006/07/02(日) 22:38:32ID:n0vd3nFAご回答くださり有難うございます
なるほど、その方法がありましたね
ソース見られるとちょっと不恰好だけど・・・
てゆーか素朴な疑問なのですが
jcodeモジュールを使っている人で同じような問題に当たった人って居ないのかなあ・・・
eucで「〜」を入れるとNGというのは発見したのですが
# ちなみに入力ページをEUC-JPにした上で「〜」を入力したところ確かにNGでした
自分一人だとしたら、やっぱり何か私の書き方がおかしいんだろうな・・・
jcode.plではこんなこと一回もなかったのでjcode.pmが嫌いになりそう
0156nobodyさん
2006/07/02(日) 22:45:18ID:???0157nobodyさん
2006/07/02(日) 22:49:46ID:???Jcode::convertには
"\xe5\xbf\x83\xe9\x9c\x8a"
という「心霊」をutf8にしたバイト列を食わしているわけだが、
$Jcode::DEBUG=3にしてこいつを変換すると
>DEBUG:sjis = 6, euc = 2, utf8 = 6 at 〜
と出るので、sjisとutf8のスコアが同点でどっちにも決められない
状態になっていることがわかる。
これは避けられないことなので、普通はhiddenで判定用文字列を
渡してどういうのが来るかで文字コードを決定し、他のパラメタに
ついてはJcodeの自動判定にたよらずその文字コードを入力コード
に指定してやるのが安全。
0158132
2006/07/02(日) 23:19:43ID:???>>156-157
なるほど、了解しました
とくに>>157さんは細かく調べて頂き深く感謝致します
>>154さんも仰っていたように
判定用文字列を渡してチェックする方向で対処したいと思います
長い時間お付き合い頂き、皆様、本当にありがとうございました
0159nobodyさん
2006/07/02(日) 23:58:34ID:???Jcode.pmはオブジェクト指向が前提だし、その先にはEncodeへの視野がある。
使いこなせないなら無理すんな
0160nobodyさん
2006/07/03(月) 01:25:18ID:???jcode.plはUTF-8に対応して無いんだが
0161nobodyさん
2006/07/03(月) 01:44:49ID:???答えた本人じゃないけど・・・
>「必要不要は置いといて、オープンする度に毎回とりあえず統一処理する」
だと思う
俺も基本的にはデータファイルを読み込むときに改行を統一 (または不要なら削除) してる
「あれ? このデータは改行付だったっけか?」 なんて迷うことも少なくなるので、
自分でどの段階でまとめておくとか、自分なりのルールを決めておくといいかと思います。
0162nobodyさん
2006/07/03(月) 02:25:22ID:???もうこのさいUTF-8でもSJISでもなんでもいいからさ
0163nobodyさん
2006/07/03(月) 07:23:23ID:???utf8の心霊はそんなにもeucっぽいという事?w
でも、実際には文字化けしてるわけで、・・・なんか変な感じだ・・・
0164nobodyさん
2006/07/03(月) 07:27:52ID:???$_[0]=="ダメだ"
$_[1]=="ダメっす"
自分の経験からするとこういうランダムは、すぐにうっとうしくなるw
0165nobodyさん
2006/07/03(月) 09:14:35ID:???unicodeはいい機会だったのだが日本語については従来のコード
との対応について統一に失敗したのでだめぽ。まったく当時その
辺で仕事してた奴らは負の遺産を残してくれたものだ。
0166149
2006/07/03(月) 10:05:01ID:???もう誰もレスくれないと思ってたからちょっと感動。
やっぱり、オープンの度にコード統一する癖付けといた方が何かと良さそうですね。
これで改行統一の野望に一歩近づきました。
ありがとうございます!
0167nobodyさん
2006/07/03(月) 12:27:50ID:???utf8は神。もうちょっとがんばってはほしかったが。
jcode の文字自動判別は前からいろいろ問題あったよね。
length で判定して同じ文字数だったらEUCにするので、
sjis で半角カナだけ書いて文字判別させると文字化けするとかね。
優先順位指定できたらもっと使いやすかったと思う。
0168nobodyさん
2006/07/03(月) 12:30:55ID:???0169nobodyさん
2006/07/03(月) 14:44:46ID:???>jcode の文字自動判別は前からいろいろ問題あったよね。
よくしらないので教えて欲しいんだけど、
utf8で文字化けしないencode方法あるの?
googleとかで文字化けしたの見たことないし方法あるのかなあ。
0170nobodyさん
2006/07/03(月) 18:36:40ID:???ごめん、日本語でおk
(フラグのない) utf8 だって見分けるのは簡単でしょ。
最初の文字から最後の文字まで ascii と utf8 だけだったら utf8 てすればいい。
ああいう特徴的な文字の並びはほぼ間違いなく utf8 なんだから。
掲示板とかで sjis で HTML 書いてて、ほとんどそのフォームからデータ送信して受け取るのに、
euc と sjis が候補にあがった場合、わざわざ euc だと推測するのはおかしいでしょ?
その推測を頼りに決定しまってるのが jcode の convert というか getcode の欠点。
半角カナの文字化けだって、sjis 判定に半角カナのコード範囲を入れてないから起こるもの。
だから、何でもかんでも 1行で変換を済まそうとせず、
一旦 Encode::Guess の guess_encoding みたいに推測して文字コードの候補をとり、
複数の候補があった場合、プログラマがどっちを優先して変換するか書いて決めればいいんじゃないかと思うわけ。
長ぇ!
0171nobodyさん
2006/07/03(月) 19:43:50ID:???送信すれば?
<input type="hidden" name="encoding" value="sjis">
バイナリから推測なんてメンドクサイ、ムズカシイ、確実じゃない、いい事何もない。
0172nobodyさん
2006/07/03(月) 19:47:02ID:???利用者が文字コード知ってて、しかもフォーム書き換えてくれるなんて
あまり期待できないと思うけど。
0173nobodyさん
2006/07/03(月) 20:01:53ID:???http://〜/~.cgi?q=ほげほげ
ってやったときの文字コードなんて何になるかわかんないしな
0174nobodyさん
2006/07/03(月) 20:41:54ID:DxhEPLl+open(FH,$FILE);
while(<FH>){
if(マッチ条件){処理}
push(@newdata,$_);
}
とすると、マッチして書き換えた後もファイルの中身を最後まで読み込んで無駄な処理が出てしまいます。
lastとかで飛ばしたいところですが、そうするとファイルの中身が書き換えた行以降消えることになります。
こういうとき、どういう処理をすれば無駄なく完遂できるんでしょうか?
セオリーみたいなものがあれば教えて下さい。
0175nobodyさん
2006/07/03(月) 20:50:54ID:???自分のページにフォーム作ろうなんて考える利用者はHTMLぐらいかけるでしょ普通
で、文字コード別にフォームのソース置いといて、化けない奴使ってね、て書けばたぶん分かる。
何にも知らない人はそもそも変なフォームから送信してこないので問題ないと思う・・・
>>173
フォームから入力したいって言ってるんだからGETメソッドに対応しなければいいのでは?
どうしてもGETも対応したいって場合も、ばけたら&en=***なんとかを付けて見て下さいみたいな
誘導でなんとかなりそう・・・
そもそも、アドレス欄からクエリー送信してくるのは上級者だと思う
0177nobodyさん
2006/07/03(月) 21:08:28ID:???それを守ってくれればいいのだが、とんでもないのが存在するのも現実だ。
一番ひどいと思ったのはhiddenとそれ以外で別のコードで送ってきやがった
某ブラウザ。数年前の話だから今は改善されてるかな。
0178nobodyさん
2006/07/03(月) 21:11:39ID:???176の指摘はおいとくとしても、偶然同じ長さの行に書きかえるのでない限り
それ以後の内容を前後にずらす必要があるので、そういうことは考えるだけ
無駄ですな。
File::Inplaceの使用をお勧めする。
0179nobodyさん
2006/07/03(月) 21:14:39ID:???一気に read でファイルの中身全部読み込んじゃって、
あとは s{^(マッチ条件).*}{ 処理 }em; とかして、
一気に書き出せばいいんじゃね?
0180174
2006/07/03(月) 22:04:52ID:DxhEPLl+いや、確かにファイルの中身自体は消えてませんが、そういうことでは…。
>>178
多少の無駄には目をつぶって最後まで走らせておくのが吉なんですかね。
File::Inplaceについては調べてみます。ありがとうございました。
>>179
確かに正規表現で1回マッチ直後に処理すれば、無駄はなくなる…けど、
処理そのものの負担が大きくなってしまうような…。
色んな場面で必要にかられる処理だと思ったので、
他の人はどんな風に処理してるのか適当にCGIを見てみたところ
>>174に書いてあるのが結構多かったかも。
中には
open(FH,$FILE);
my @data = <FH>;
my $loop = @data;
my $i;
while($loop>0){
@temp = split(/ /,$data[$i]);
if(マッチ条件){
処理
last;
}
$i++;
$loop--;
}
ってのも、ありました。ちょっとゴテゴテしてるなぁ。
0181nobodyさん
2006/07/03(月) 22:05:46ID:???よくlocal何て使わないでmyと書いてあるがすべてmyにしたらダメだよね?
ちょっと違いが分からないので教えて欲しい・・・。
0182nobodyさん
2006/07/03(月) 22:14:19ID:???> 処理そのものの負担が大きくなってしまうような
何でそう思うのかkwsk
my @data = <FH>;
↑こんなことしてる方がよっぽど負担強いてると思うぞw
>>181
コーチ変えたほうがいい。
0183nobodyさん
2006/07/03(月) 22:19:42ID:???KENTが一番楽だったからそれにしてたいが今更コーチ変えろって
簡単で見やすいスクリプトなんてあるの?
何せKENTのスクリプトをみて覚えてきた人間だから今更となると見やすいスクリプトじゃないの無理な気がする。
0185nobodyさん
2006/07/03(月) 22:24:31ID:???0186nobodyさん
2006/07/03(月) 22:48:13ID:???状況は変わると思う。
0187nobodyさん
2006/07/03(月) 22:54:50ID:???任意の一行ってことはマッチする行がはじめから一行しかない
事が分かってるってことですかね?
それともマッチした最初の行だけとか、?(それだと174はまずいですよね・・・
ファイルの構造が固定してるなら、該当する行をダイレクトに指定
できる可能性とかはありえない・・・?
0188nobodyさん
2006/07/03(月) 23:07:15ID:???0189nobodyさん
2006/07/03(月) 23:16:27ID:???初心者のオイラにはなんのこっちゃか分からない行がたくさんあって、ちょっと嫌
0190nobodyさん
2006/07/03(月) 23:20:54ID:???セキュリティくらい考えて作れよー。
まあKENT儲は ∩( ´∀`)∩コチラヘ (っ´∀`)っ))ドウゾ
KENT WEB 総合スレ Part2
http://pc8.2ch.net/test/read.cgi/php/1078991985/
0191nobodyさん
2006/07/03(月) 23:32:34ID:???…向上心があるなら、出来るだけ早い内にPerl5流に馴染んでおいたほうが楽だぞ。本当に…
きっと、各種モジュールに興味が出てきた頃に、矯正するのに時間がかかって苦労する。というか、した。
# 独学だと何がまともなのか、判るようになるまでが難しい
閑話休題。多くの場合では、myに置き換えて大丈夫だと思う。
localとmyの違いは効果の範囲が動的…プログラムの流れに沿ったものか、
静的…ソース上のブロックに対応したスコープか、と言うのが一番の差。
以下、差を顕著にするためのどうしようもない汚い例。
sub fuga { $foo }
sub hoge_my { my $foo = 'hoge'; print 'my: ', fuga(), "\n" }
sub hoge_local { local $foo = 'hoge'; print 'local: ', fuga(), "\n" }
$foo = 'outer'; hoge_local(); hoge_my();
---------------
local: hoge
my: outer
あと型グロブのように、単純にmyに置き換えることの出来ないものもあるけれど、
これも、出来る限りリファレンスを使って書くのがPerl5流。
localの出番はPerlで定義済みの変数($/の類)とか。
何か大事な点がすっぽ抜けてたら、フォロー宜しくお願いします。
0192nobodyさん
2006/07/03(月) 23:36:24ID:???local しただけではエラーになるので注意。my か our などが必要。
0194174
2006/07/03(月) 23:46:28ID:DxhEPLl+>何でそう思うのか
いや、単純に感覚的なものなので間違ってたらすみません。
ファイルの中身が数千行とかあった場合で、
該当する行の情報もそこそこ大きい場合、
全部読み込んで正規表現にかけるより
1行ずつチェックした方が良さそうに思っちゃいました。
>>187
>任意の一行ってことはマッチする行がはじめから一行しかない
>事が分かってるってことですかね?
その通りです。でも、その行はどこにあるのかは分からないし流動的。
掲示板とかアクセスログとかのログと同じようなもんですね。
なので、ダイレクトに指定することはできないです。
0195nobodyさん
2006/07/04(火) 00:01:32ID:???数千行ならさあ、
数千回ループさせて、数千回ファイルからデータとってきて、数千回 @array にその大きいデータを push するのと、
改行の数なんか関係なく 1回 read して $scalar に入れて 1回だけ置換 するのと、
総合的にどっちが良さそうに見える?
まあその数千行のファイルが ウン十Mb とかなら話は変わるけど、そんな規模のデータファイル作ったりはしないよね。
とりあえずいくつか方法で迷ったらベンチでもとっとけばいいと思う。
0196nobodyさん
2006/07/04(火) 07:41:17ID:???かなり不毛。ファイルを編集するのが目的ならしょうがない
かもしれないが、データ保存用ならいくらでもやりようがある
はずだ。
0197nobodyさん
2006/07/04(火) 10:28:25ID:???0198nobodyさん
2006/07/04(火) 12:30:08ID:???掲示板のログと一緒。
0199nobodyさん
2006/07/04(火) 12:47:20ID:???置換でなかなかうまく行きませんでした
良い方法はありますか?
0200nobodyさん
2006/07/04(火) 13:02:03ID:???0201nobodyさん
2006/07/04(火) 13:11:56ID:???0204nobodyさん
2006/07/04(火) 22:40:59ID:???もう、納得すみかも知らんが
#!/usr/bin/env perl -w
my @data = ();
my $flag = 0 ;
while ( <> ){
if( /print/ ){ s/print/say/ ; $flag ++ }
push @data, $_ ;
last if $flag != 0 ;
}
push @data, <> ;
print @data ;
これを hoge.pl として保存して
% perl hoge.pl hoge.pl
してみそ?
0205nobodyさん
2006/07/04(火) 23:22:36ID:???foreach(@localsubject){
if($_=~/$loopsubject/){
$localsubjectmatchswitch=1;
last;
}else{
$localsubjectmatchswitch=0;
}
}
}
のようなスクリプトを書いたのですがif($_=~/$loopsubject/)で判定してくれません。
判定後の処理にprint "match";を書いてみると何も帰ってきません。
@datnameの内容は
1152013113.dat
1152013147.dat
のようなものです。@localsubjectには2chのsubject.txtのような内容が入っています。
@loaclsubejctの中に@datnameの中身が入っているか判定したいのです。
入っていたらスイッチを1にしてループを終了させて、ループが全部終わったときに
スイッチが0だったら書き込みの処理をしたいです。
なぜ判定してくれないのでしょうか?教えてください。お願いします。
0206nobodyさん
2006/07/04(火) 23:32:02ID:???chomp $loopsubject ;
入れてみるとか…。
0207205
2006/07/04(火) 23:57:29ID:???ありがとうございます!検出はうまくいきました!
でも今度はすでに@localsubjectにあるはずなのに無いと検出されます…なんででしょうか?いろいろ試してみたけどわかりません。
スイッチの検出は
if($localsubjectmatchswitch==0){
$writesubject=$datname[$i]."<>".$threadtitle[$i];
unshift(@localsubject,$writesubject);
}
のようにしてやってます。
0208nobodyさん
2006/07/05(水) 00:06:26ID:???内側の foreach ループのあとに、フラグに関する処理が入ってるんだよね・・・?
0209nobodyさん
2006/07/05(水) 00:07:58ID:???>>205 では
$localsubjectmatchswitch=1;
ってマッチしたとき 1 代入してんのに
>>207
では 0 のときの処理を書いてるよ。
0211nobodyさん
2006/07/05(水) 00:16:10ID:???0212nobodyさん
2006/07/05(水) 00:29:19ID:???内側のforeachループでローカルsubject.txtの中身を調べて
マッチしたら1を返してすべてにマッチしてなかったら処理をするようにしています。0の時の処理を書いてるのはそのためです。
外側のforeachループは検索語を順番に処理するようにしてあります。
で、どうしたらいいんでしょうか?理論的には問題が無いように見えるのですが…
なぜマッチしたはずなのにマッチして無いとみなされるんでしょうか?
>>211
変数名長くしないとわからないアホな子なんです。許してやってください。
0213205
2006/07/05(水) 00:31:21ID:???>>208
>内側の foreach ループのあとに、フラグに関する処理が入ってるんだよね・・・?
そのとおりです。
0214nobodyさん
2006/07/05(水) 00:42:12ID:???$localsubjectmatchswitch
の初期化はきちんと入れてるよね。>>205の2行目
(>>206のchompの次の行)あたりに。
0216205
2006/07/05(水) 00:48:32ID:???入れてませんでした。でも入れても結果が変わらない…マッチして無いとみなされてsubject.txtに書き込まれる…
それと、なぜか一回で2重に(同じ内容が2行)書き込まれます。これもforeachあたりの間違いだと思うんだけどどこが悪いのかわからない…
アドバイスください。お願いします。
0217nobodyさん
2006/07/05(水) 00:52:05ID:???0218nobodyさん
2006/07/05(水) 00:56:39ID:???全容が見えなさすぎ
0219nobodyさん
2006/07/05(水) 01:05:56ID:???エスパー求めすぎ。
0220205
2006/07/05(水) 01:23:12ID:???http://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi42709.txt.html
ソースうpしました。アドバイスお願いします。
>>217
$iは忘れてました。つけたら少しはまともな動作をするようになりましたが求めていたものとは違いました。
0221nobodyさん
2006/07/05(水) 01:44:31ID:???0222205
2006/07/05(水) 01:50:05ID:???0223nobodyさん
2006/07/05(水) 01:51:31ID:???@localsubject のどれかが、
@datname の最後の値 ( @datname[ $#datname ] ) にマッチしたら 1、マッチしなかったら 0
ってことなんだけど、それは処理としていいの?
どうみても @datname の最後未満の値は、マッチしようがしまいが関係ないって感じだよね。
0224205
2006/07/05(水) 02:27:35ID:???>@datname の最後の値 ( @datname[ $#datname ] ) にマッチしたら 1、マッチしなかったら 0
ってことなんだけど、それは処理としていいの?
@datnameは外側のforeachでまわしてるから全部にマッチしてるかどうか確かめてあるはずですけど…
判定ルーチンが内側のforeachのすぐ後ろに来るから判定はしてくれてるはずです。
いまいろいろやって、とりあえずローカルにsubject.txtを書き出すのはうまくいったみたいです。
あとは、これが2重に書き込まれないようにするためにしないとなんだけど、そこの処理をやってるのが96〜111行目なんですよね。
で、そこがうまくいってないみたいです。$localsubjectmatchswitch=0;になるときの処理に
print "nomatch";を加えたらすでにローカルsubject.txtに書き込んである場合でもnomatchを返されました。
だからif($loopsubject=~/$loopdat/)が問題ですかね?
それとも@datanameの内容が2つあるから違うほうの内容に反応してnomatchを返すことになってるのでしょうか?
でもforeach $loopsubject(@localsubject)で内容全部まわしてるから1つでもマッチしたら2重に書き込みはされないはずですけど…
なんでまずいのかわからないのでアドバイスお願いします。
0226nobodyさん
2006/07/05(水) 02:42:02ID:???こんなの保存して楽しいのか
0227nobodyさん
2006/07/05(水) 02:55:40ID:???0228205
2006/07/05(水) 02:59:19ID:???これが気になって眠れません。寝たほうがいいってか寝ないとなんですけど…
>>226
テスト用の検索ワードが思いつかなかったため適当に目に付いたスレを選んだのです。特に深い意味はありません。
原因が判明したっぽいです。103行目あたり、foreach $loopsubject(@localsubject){
でローカルのsubject.txtを解析するのですが、$loopsubjectをループ内でprintしてみたところ最後の1行しか表示されませんでした。
全部表示されるはずのローカルsubject.txtが表示されないということはマッチも出来ないわけですからnomatchになるということだと思います。
で、どうにかしたいんですがどうしたらいいんでしょうか?foreachで表示されないなんてことは初めてなのでわかりません。アドバイスお願いします。
0229nobodyさん
2006/07/05(水) 03:04:35ID:???> @localsubject=<F>;
これかwwwwwwww
>> とか < とかの区別もできない子だったんですね。
0230nobodyさん
2006/07/05(水) 03:07:22ID:???0231205
2006/07/05(水) 03:22:39ID:???ファイルオープンの時につけるのって>と>>しか知らなかった…今ググってはじめて知った…orz
読み込みは出来るようになりました。迷惑かけて本当すみません。
でも、2重に書き込んじゃうのがどうしてもなくならないんですけどどうしたらいいんですか?
もう散々どこが悪いのか探したけどわからないんです。多分これが最後の質問です。お願いします。
0232nobodyさん
2006/07/05(水) 03:33:40ID:???直したのはわかったけど、それでマッチするようになったのかマッチしないのかぐらい書いてよ。
どうでもいいけど、 chomp $loopdat; → $loopdat =~ s/[\r\n]+$//; とかのがいいかもね。
0233nobodyさん
2006/07/05(水) 04:07:21ID:???0234nobodyさん
2006/07/05(水) 04:27:05ID:???あ…ありのまま 今 起こった事を話すぜ!
『myの羅列とインデントにくらっと来たと
思ったらいつの間にか作り直していた』
「今時Perl4」とかそんなチャチなもんじゃあ 断じてねえ
もっと恐ろしいものの片鱗を味わったぜ…
>>231
漏れのところでは開くモードを適切に変更して関連部分を修正すれば一応動くがなぁ…
+<モードで開いた?それとも<で読み込んだ後、一旦閉じて>モードで開きなおし?
もし+<モードなら、seekしてないんでないのか。
あと直接関係無いが、112行目の$iのインクリメント位置が間違ってる。
>>232
いや、そもそも@datnameには改行は入ってこない。
<>でsplitした前半相当だから。
0237nobodyさん
2006/07/05(水) 05:00:47ID:???一応 use strict 通るけど、あんなじゃ kent local と変わんないっつー。
0238nobodyさん
2006/07/05(水) 07:41:25ID:???0239nobodyさん
2006/07/05(水) 14:04:38ID:???0240nobodyさん
2006/07/05(水) 14:08:45ID:???それって良くないことなのか?
むしろ推奨!みたいな感じだと思ってたので詳しく教えてくれ。
0245nobodyさん
2006/07/05(水) 17:04:50ID:???0247nobodyさん
2006/07/05(水) 18:10:57ID:???0250205
2006/07/05(水) 20:56:42ID:???foreach $loopdat(@datname){
chomp $loopdat;
$datmatchcheck{$loopdat}=0;
foreach $loopsubject(@localsubject){
if($loopsubject=~/$loopdat/){
$localsubjectmatchswitch=1;
print "match:$loopdat\n";
last;
}else{
$localsubjectmatchswitch=0;
print "nomatch:$loopdat\n";
}
}
if($localsubjectmatchswitch==0 && $datmatchcheck{$loopsubject}==0){
$datmatchcheck{$loopsubject}=1;
$writesubject=$datname[$i]."<>".$threadtitle[$i];
unshift(@localsubject,$writesubject);
}
$i++;
}
このようにしてみました。しかし、2重に書き込まれてしまいます。
多分@localsubjectの中身を何度もまわすので、それでマッチして無いのがマッチして無いとみなされるみたいです。
2重に書き込まれないようにするにはどのようにチェックしたら良いでしょうか?アドバイスください。お願いします。
$datmatchcheck{$loopsubject}のようにしてみましたがこれではうまくいきませんでした。
0251nobodyさん
2006/07/05(水) 21:10:50ID:???0252nobodyさん
NGNG0253nobodyさん
2006/07/05(水) 21:32:17ID:???$localmyforeach;
$elsifwhile;
$unshiftopen;
みたいな変数名つけたらエラく読みづらくなるんだろうな…。
0254nobodyさん
2006/07/05(水) 21:43:47ID:???$found = 0;
chomp;
foreach $tmpdatname(@datname){
chomp;
if($tmpdatname =~ /$tmpsub/){
$found = 1;
$founddat = $tmpdatname;
last;
}
}
if($found){
push(@founds, "$founddat<>$tmpsub\n");
}
}
print @founds;
myとかは略した
0255nobodyさん
2006/07/05(水) 21:45:05ID:???0257nobodyさん
2006/07/05(水) 21:48:29ID:???ttp://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi42797.txt.html
234のをさらにooっぽくしてみました・・・
当の205はまだ解決してないのかなw?
0258nobodyさん
2006/07/05(水) 21:54:53ID:???久しぶりにくらくら来ました。
0259nobodyさん
2006/07/05(水) 21:59:23ID:???0260nobodyさん
2006/07/05(水) 22:15:12ID:???0261nobodyさん
2006/07/05(水) 22:16:17ID:DDQKgTGLファイル名はcontak.lolです。
cgi-binフォルダにあるかないかを調べたいです。
globを使うんですか?
なんか混乱しちゃって。
0262nobodyさん
NGNG0263nobodyさん
2006/07/05(水) 22:31:31ID:???0264nobodyさん
2006/07/05(水) 22:36:23ID:???0265nobodyさん
2006/07/05(水) 23:19:27ID:???へええ、そうか、ファイルロックと同じように攻撃されるわけかw
結局 perl では安全にファイルを作ったり読んだりするのはどう書けばいいのだろう?
File モジュール使えって? そりゃそうですが。
0266nobodyさん
2006/07/05(水) 23:23:45ID:???0268nobodyさん
2006/07/06(木) 00:02:49ID:???0270nobodyさん
2006/07/06(木) 00:44:34ID:???ファイルを作ったのが自分かどうかはわからないが。
0271nobodyさん
2006/07/06(木) 00:59:56ID:FMcswvIHバッチ処理(これはなんとか解決)を実行後に、元のHPでリンクされた
urlを新しいブラウザで開きたいのですが記述方法がわかりません。
どう記述すれば良いのでしょうか?
つまらない質問ですがよろしくお願い致します。m(__)m
0272nobodyさん
2006/07/06(木) 01:26:41ID:???0273nobodyさん
2006/07/06(木) 01:30:44ID:???0274nobodyさん
2006/07/06(木) 02:13:42ID:???perlって、サーバで動きますよね。
自分のパソコンで動かそうと思ったら、
apache,activeperlとかインストールしないとだめです。
ここで質問ですが、exeファイルみたいなので、
activeperl無しで動かすことってできるんでしょうか?
perlでアプリケーション作ったら、
apacheとactiveperlもいっしょに入れて、
自分でインストールしてください。
ということになるんでしょうか?
たとえば、チャットのクライアントソフトなど
作るときってどうなりますか。
よろしくお願いします。
0275nobodyさん
2006/07/06(木) 02:26:05ID:???∩( ´∀`)∩ドウゾ (っ´∀`)っ))アチラヘ
CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784/
0276nobodyさん
2006/07/06(木) 02:45:14ID:???0277nobodyさん
2006/07/06(木) 03:58:15ID:???こんにちはこんにちは!
この辺を見るといいんじゃないかな…!
http://hamachiya.com/junk/memo_PAR.html
0279nobodyさん
NGNGttp://0xcc.net/diary/20040716.html
0280nobodyさん
2006/07/06(木) 14:12:07ID:???すごい便利なものがあったんですね。
でも、説明読んでみるとソースコードが
簡単に見れるのと、複雑なコードが正常に
動かないとか書いてありますね。
もうちょっとネットや本の資料探してみます。
0281nobodyさん
2006/07/06(木) 16:24:22ID://0K++zo変数を区別する記号付けってどうやるのか度忘れしたので教えて下さい。
検索ワードのご教示だけでも良いです。
[例]
$i = 1;
print "hoge$i_code";
等を正しく表示したい。
0282nobodyさん
NGNG0283nobodyさん
2006/07/06(木) 16:26:57ID:???0284nobodyさん
2006/07/06(木) 16:33:30ID:???0285nobodyさん
2006/07/06(木) 16:54:28ID:???OSはWINです。
すごい初心者で変な質問ですみません。
perlで、dosコマンドを実行することって
できるんでしょうか。
たとえば、
print "del a.txt";
というようにファイルを消そうと標準出力しても
実行できませんでした。
可能でしたら、方法ご教授お願いします。
0286281
2006/07/06(木) 16:56:24ID:gzQtm5v/それです!ありがとうございます。
>>283>>284
print <<HTML;
hoge$i_code
HTML
だとどうなんですかね。
汎用性に問題あり?
教えてクレクレ君の分際で偉そうにすみません。
ありがとうございました。
0288nobodyさん
2006/07/06(木) 17:11:28ID:???実行するだけならsystem関数、その出力が欲しいならバッククォートまたは、パイプでopen。
だが、そのファイルを消すというのが単なる例じゃないとしたらunlink関数を使うべき
>>286
284はこういう場合に問題ありだな
"${i}nhoge"
0294nobodyさん
2006/07/07(金) 12:05:06ID:???Perl5.8で、jcode.plやJcode.pmを使わずに
全角英数と半角英数の変換を行う方法があれば、教えてください。
0295nobodyさん
2006/07/07(金) 12:32:03ID:???step1. 文字コードについて理解する
step2. がんばる
0296294
2006/07/07(金) 14:25:27ID:???下記のようなスクリプトをUTF-8で保存し、
入力テキストファイルもUTF-8で記述したところ、うまく動作しました。
$_ = decode('utf8',$_);
の部分の意味がよくわからないので教えてください。
ここは何をしてるんでしょうか?
use strict;
use utf8;
use Encode qw/ encode decode /;
while (<>){
$_ = decode('utf8',$_);
tr/[0-9]/[0-9]/;
print;
}
0297nobodyさん
2006/07/07(金) 15:11:08ID:???オアエスゴイナww
0298nobodyさん
2006/07/07(金) 15:19:10ID:gJw2prbrやっぱforeachとかで中身を展開しながら1コずつ処理するしかない?
jcode.plとかJcode.pmとで配列そのものを扱う方法ってある?
>>294
英数字限定なら正規表現でどぞ。
0299nobodyさん
2006/07/07(金) 15:40:01ID:???0300298
2006/07/07(金) 16:19:58ID:???CGI.pmでフォームの内容を配列に入れて文字コードごにょごにょってのは
結構色んなとこで使われそうな処理なんで、実装されてたりするのかなぁ、と思ったもんで。
無いと分かれば、安心して配列回しまくれますわ。さんくす。
0301294
2006/07/07(金) 16:27:23ID:???[]は要らないよ、とおっしゃっているのでしょうか?
>>298
正規表現というと、具体的には?s///を使ってできるという意味ですか?
0302nobodyさん
2006/07/07(金) 17:13:35ID:???1byte 単位(正確には 8bite 単位)の処理から utf8 の文字列処理に
変換している。
$_ = decode('euc-jp', $_ ) ;
なら、8bite 単位の羅列を euc-jp でエンコードされてると見做
した上で、utf8 に変換。
0303294
2006/07/07(金) 17:26:00ID:???レスありがとうございます。
バイト単位から文字単位へ、という事が必要なので
読み込ませるテキストがUTF8でも必要、という事でしょうか。
読み込ませるテキストの文字コードがわかってない時はややこしそうですね。
0305205
2006/07/07(金) 20:47:14ID:???open(F,">$localsubjectpath")||die"subject.txtをopen出来ません:$!";
foreach(@localsubject){print F $_;}
close(F);
が追記モードになっていたために2重に書き込んでしまうという症状が起きました。
上書きモードで実行したらうまくいきました。
くだらない質問に答えてくれて本当にありがとうございました。
0306nobodyさん
2006/07/07(金) 21:37:02ID:???解決おめ。
234で指摘したのとほぼ同じ原因でないか…自力で二日も模索乙
まさか、まだ追記モードを使っていたとは夢にも思ってなかった訳だが。
0307nobodyさん
2006/07/07(金) 22:07:16ID:???おめ。
俺はがんばって >>234 のコードを読解して新しく書き直してるのかと思ってたw
少しは参考にすればいいのにね。
0308294
2006/07/08(土) 10:38:42ID:???こちらでの質問はこれで終わりとし、
別スレでこちらで回答していただいた事を元に
少しポイントをしぼって質問してみたいと思います。
回答していただいた方々、ありがとうございました。
0309294
2006/07/08(土) 10:40:49ID:???0310nobodyさん
2006/07/08(土) 13:48:22ID:???0311nobodyさん
2006/07/08(土) 14:50:57ID:9n4HcMAb「〜」の変換がうまくいきません。
変換できずに、「\x{ff5e}」になってしまいます。
JISにも「〜」ありますよね。
どうしたら回避できるでしょうか?
0312nobodyさん
2006/07/08(土) 14:58:49ID:???どの文字コでも設定と正規表現で2行だと思うけどw
0314nobodyさん
2006/07/08(土) 15:15:04ID:???Unicodeと既存のエンコーディングのマッピングを作る際に、〜のマッピングがメーカーによって
WAVE DASHとFULLWIDTH TILDEの二つに分かれてしまったことに起因する問題。
http://ja.wikipedia.org/wiki/Unicode
事前に"\xEF\xBD\x9E"(\x{FF5E})を"\xE3\x80\x9C"(\x{301C})に変換して統一してやればOK。
ちなみにUTF-8はASCIIとの兼ね合いは勿論のこと、1バイト目の範囲が2バイト目以降の範囲と
重ならないように設計されているから、utf-8フラグを使用しない場合でも、ずれてマッチする心配はしなくて大丈夫。
0316nobodyさん
2006/07/08(土) 15:28:25ID:???とってもまだるっこしいですが、
encode('iso-2022-jp', decode('shiftjis', encode('cp932', $x)))
とする手もあります。
日本は既存の文字コードとunicodeの対応表をつくるにあたって
統一に失敗して大きく2種類(JISとMS)できてしまったため、こんな
面倒を強いられるのです。恨むなら当時の関係者を恨んでください。
ちなみに「〜」を\x{ff5e}にするのはMS流で、JISだと\x{301c}に対応
させることになっています。
個人的には日本語に関してはunicodeはunicode-jisをunicode-msの
2種類あると思って、それらを自動判定して相互変換するJcode相当の
モジュールが欲しいなと思います。
0317nobodyさん
2006/07/08(土) 15:31:47ID:???そういう面倒を吸収してくれるライブラリがやっぱり必要なんじゃない?
0318nobodyさん
2006/07/08(土) 15:39:20ID:???→ Jcode (それ以下)
とかやって、その自作モジュのとこで対策すればいいのかもだね
0319nobodyさん
2006/07/08(土) 15:40:35ID:???ttp://search.cpan.org/dist/Encode-EUCJPMS/EUCJPMS.pm
使え的な指摘がありますよ。
0320nobodyさん
2006/07/08(土) 15:41:10ID:???0321311
2006/07/08(土) 15:41:57ID:9n4HcMAb〜は事前に\x{301c}に変換したいと思います。
実際、携帯電話からの入力なので、
Encode::from_to( $x, "CP932","UTF8");
としてUTF8に変換してたのですが、CP932→UTF8なので「〜」が\x{ff5e}になってしまうんでしょうか?
0322nobodyさん
2006/07/08(土) 15:55:45ID:???0323nobodyさん
2006/07/08(土) 16:11:50ID:???0324nobodyさん
2006/07/08(土) 17:22:37ID:H4L43ePpこれを省略せずに書くとどうなりますか?
配列の1番目から4番目まで限定的ではなく
配列内全てをforeachする書き方が分かりません。
@hoge_Aと@hoge_Bの要素数は同じです。
0325nobodyさん
2006/07/08(土) 17:40:04ID:???> push @fuga, $hoge_A[$_] . $hoge_B[$_] foreach 0..3;
> これを省略せずに書くとどうなりますか?
foreach my $i (0,1,2,3) {
push @fuga, $hoge_A[$i] . $hoge_B[$i];
}
0326nobodyさん
2006/07/08(土) 17:41:41ID:???省略せず、じゃなくて一般化の話かな。
まず要素数を取得し、そこから範囲を作る。そのRangeに対してforeachもしくはmap
push @fuga, $hoge_A[$_] . $hoge_B[$_] foreach 0..@hoge_A-1;
or
@fuga = map { "$hoge_A[$_]$hoge_B[$_]" } map 0..@hoge_A-1;
しかし、要素数は同じと言い切れるんだったら、同時に管理されるデータなんだろ?
なら関連性のある二つのデータを別の配列に入れると言う、その構造を何とかしたほうが良いと思う。
@fuga = map { "$_->{A}$_->{B}" } @hoge;
そうすると、こんな風にできる。詳しくはperllolを参照
0327nobodyさん
2006/07/08(土) 17:44:23ID:???@hoge_A-1 を $#hoge_A
と書くのがBest Practice。
$#は配列の最後の要素番号を表すから、
配列のインデックスとして使う場合に適している。
0329326
2006/07/08(土) 18:01:09ID:H4L43ePp「配列の1番目から4番目まで回す」んじゃなくて
「(0,1,2,3)という配列を回す」ってことだったんですね。
ありがとうございます。
>>326
大変詳しい回答と説明ありがとうございます。
想定通りの結果を得ることができました。
>関連性のある二つのデータを別の配列に入れると言う、その構造を何とかしたほうが良いと思う。
まさにその通りで、そのために今回の処理をしようとしていました。
具体的には(情報の後出しになってしまいますが...)
フォームから「月」と「日」を取得し、「日付」という配列に格納するための処理です。
とにもかくにも、アドバイスまでいただいて本当にありがとうございました。
>>327
より良いコードのためのアドバイスありがとうございます。
勉強になりました。
0330nobodyさん
2006/07/08(土) 18:04:13ID:???0331nobodyさん
2006/07/08(土) 18:51:46ID:???環境なくなっちゃって確認できなくて orz
0332nobodyさん
2006/07/08(土) 19:08:45ID:???0334nobodyさん
2006/07/08(土) 20:17:42ID:???1 while $cnt != push @fuga, ( shift @hoge_A ) . ( shift @hoge_B ) ;
つーのを思いついた自分に鬱
0335nobodyさん
2006/07/08(土) 21:09:20ID:???ある掲示板スクリプト(bbs.cgi)があるとします。
自分のWEBサイトではこの掲示板をいくつか設置しているのですが、
そのたびに、「bbs1.cgi」、「bbs2.cgi」、「bbs3.cgi」みたく名前を付けて設置しています。
これをクエリを使用して「bbs.cgi?c=1」や「bbs.cgi?c=2」みたくしたいのですが、考え方が分かりません。
ちなみにできればWEB上から必要な数を必要なだけ作成できるようにしたいと思っています。
アルゴリズムだけで構いませんので、どうかよろしくお願い致します。
0336nobodyさん
2006/07/08(土) 21:17:18ID:???0337nobodyさん
2006/07/08(土) 21:59:16ID:???>>335
そのスクリプトの構造にもよるけど十中八九大改修。
他の掲示板と共有できない点を洗い出すことから始めるといいよ。ログファイルとか。
ファイル名変えてる=同一ディレクトリって所から危なっかしいけどPerl関係ない…
改造スレあたり行くのが無難だと思う。
0338nobodyさん
2006/07/08(土) 22:33:57ID:???print $x;
としようと思うのですが、$xはリファレンスの可能性があります。
リファレンスの場合であってもref関数でチェックなどせずにそのまま表示しようと思うのですが、リファレンスだとメモリの場所がわかるわけですよね。
これが何かセキュリティ上問題になるようなことはあるのでしょうか。
例えば、他の変数の内容を閲覧できてしまう、といったことがあれば考え直そうと思うのですが。
0339nobodyさん
2006/07/08(土) 22:38:32ID:???無理なのでもうすこし地道に勉強してからの方がいいと思われる。
0340nobodyさん
2006/07/08(土) 22:39:14ID:???0341nobodyさん
2006/07/08(土) 22:42:45ID:???そんなことで悩んでる暇があったら表示されないようにちゃっちゃと
書き直すほうが早い。
メモリの場所がわかっただけで即やられるということはないだろうが、
他のセキュリティホールとの合わせ技でなんかされる可能性を
否定するのは難しい。
0342nobodyさん
2006/07/09(日) 05:26:05ID:???> これが何かセキュリティ上問題になるようなことはあるのでしょうか。
直接の問題はないと思う。
が、何を「セキュリティ上問題」とするかによるだろうね。
「メモリの場所がわかる」ことも見方によれば問題だろうし。
0343nobodyさん
2006/07/09(日) 05:32:57ID:???ログ読み込みで
open fh,"log$ENV{QUERY_STRING}.dat";
ログ書き込みで
open fh,">log$ENV{QUERY_STRING}.dat";
・・・不特定多数が来る板だとキケンかもw
0344nobodyさん
2006/07/09(日) 05:40:13ID:???$xはリファレンスでなかったら何になる可能性があるの?
リファレンスになるかもしれない$xを表示したいwebコンテンツ
って言うのが謎なんだけど・・・w
0345338
2006/07/09(日) 07:29:33ID:???ありがとうございます。
>>344
確かにそうですね、、よく考えるとそう思います。
ちょっとアルゴリズムを再考してみます、ありがとうございました。
0346nobodyさん
2006/07/09(日) 13:14:05ID:OFKeC9Kgそういうことはできますか?
簡単な例で言うと、
@DATA = ('B','A','A','B','A','D','C','D');
という配列を対象とした場合は、
@DATA = ('B0','A0','A1','B1','A2','D0','C0','D1');
といった感じです。
map{$count{$_}++}@DATA;
という風にしていくつ重複があったかを調べることはできたんですが
その都度、数字を振る方法が分かりません。
分かる方、どうぞよろしくお願いします。
0347nobodyさん
2006/07/09(日) 13:21:34ID:???0348nobodyさん
2006/07/09(日) 13:24:03ID:???>>347
何故に grep ?
0349nobodyさん
2006/07/09(日) 13:36:33ID:???>>347さん
>>348さん
即回答ありがとうございます!
どちらの方法でもうまくいきました。
348さんの記述の方がより簡潔なのでそちらの方を使わせてもらおうと思いますが
347さんの記述も参考にして勉強します(恥ずかしながら記述の内容が理解できてないので)。
ありがとうございました!
0350nobodyさん
2006/07/09(日) 15:12:46ID:???それだと 0 が付かないと思ったら、ちゃんと付くんだね。
++ で空の値が 0になる方が. の連結より評価が先になるってことか。
grep 使うのは @data に書き戻さないで良いから(@dataを直接書きかえる)。
>>348 のを grep で書くと
grep { $_ = $_ . $count{$_}++ } @data;
0351nobodyさん
2006/07/09(日) 15:29:54ID:???>grep 使うのは @data に書き戻さないで良いから(@dataを直接書きかえる)。
いや、map でも無精しなければ…。s/grep/map/ してみ?
0352nobodyさん
2006/07/09(日) 15:42:53ID:???でよくね?
# TMTOWTDI
0354nobodyさん
2006/07/09(日) 16:19:00ID:???制御構文の後置って書いていて気持ちいいんだよな
0355nobodyさん
2006/07/09(日) 16:29:17ID:Grc/Miyg以下のようなハッシュと配列があります。
my %sex = (
'm' => '男性',
'f' => '女性',
);
my @list = ('name','age','sex','mail','addr', ・・・);
プログラム中で、
while (my($key,$val) = each(%sex)){
・・・
}
という処理を行いたいのですが、%sexの'sex'という文字列を、@listから拾いたいのです。
while (my($key,$val) = each(%{$list[2]})){
・・・
}
というふうに。
もちろん上記の例では「ハッシュではありません・・・」という意味のエラーが出るのですが、
やりかたがわからず困っています。
each(eval ('%' . "$list[2]")
でもやっぱりダメで、他に考え付きません・・・
よろしくお願い致します。
0356nobodyさん
2006/07/09(日) 16:39:01ID:???ってか普通は %sex とかを $hash->{sex} = {}; とかってやる気がする。
ちなみに eval でやるなら
each(eval ('%' . "$list[2]") → each(eval ("\\%$list[2]") こうじゃね。
0357nobodyさん
2006/07/09(日) 16:46:51ID:???0358nobodyさん
2006/07/09(日) 16:46:54ID:???0359355
2006/07/09(日) 19:33:47ID:???配列@listには、"配列やハッシュに使う「名前」"だけを格納してるのです。。
>>358
evalの使い方を間違えていたのですね。
ありがとう。その例でできました。
0360nobodyさん
2006/07/09(日) 20:03:39ID:???>配列@listには、"配列やハッシュに使う「名前」"だけを格納してるのです。。
どういう経緯でそうなったかは知らないけど、
eval使いまくりで効率悪くなる事この上ないなぁ。
my %var = (
'sex' => {
'm' => '男性',
'f' => '女性',
},
...
);
みたいにして
each %{$var{$list[2]}}
とすると、eval使わなくていいけど。
0361nobodyさん
2006/07/09(日) 20:04:15ID:???デバッガ作るんでもなけりゃ名前をキーにしたハッシュにしとけよ。
0362nobodyさん
2006/07/09(日) 20:39:33ID:???0363nobodyさん
2006/07/10(月) 09:14:03ID:???メモリの取得とか開放とか 変数使ったときの内部の挙動が
いまいち心配なのですがどうしたらよいでしょうか
0364nobodyさん
2006/07/10(月) 09:41:10ID:???perlのGCはリファレンスカウントなので循環参照を作って使い
捨てるとメモリリークになる。これに注意すれば無限に太り続ける
ことはないだろう。
perlは基本的にosからとったメモリは返さないので、一度でも大量に
メモリを使うと太ったままになる。それが困るようならたまにexecする
ぐらいしか手はない。
例外もあるがくわしくはperlfaq3の
How can I free an array or hash so my program shrinks?
参照。
0365nobodyさん
2006/07/10(月) 16:54:29ID:kBFNwS+Apushで複数の配列に同時に要素を代入する方法ってありますか?
0367nobodyさん
2006/07/10(月) 17:18:03ID:kBFNwS+Aありがとうござました。
おとなしく、2つ目の配列に1つ目の配列を代入します。
0368nobodyさん
2006/07/10(月) 17:46:11ID:???0369nobodyさん
2006/07/10(月) 18:08:23ID:kBFNwS+A数字を、片方はそのまま(データ処理用)、
もう片方はコンマ付き(ブラウザ表示用)、
と分けようとしたとき、その過程でどこかに
同じ配列を用意しないといけないと思っていました。
そうしなくても良い方法ってありますか?
0370nobodyさん
2006/07/10(月) 18:14:45ID:???0371nobodyさん
2006/07/10(月) 18:16:43ID:???どうせカンマ付きはそこで使い捨てになるんだろうし。
同じ配列2つだと整合性の問題もある。
0372nobodyさん
2006/07/10(月) 18:24:39ID:kBFNwS+A数字のデータ → 配列A → 素のデータ → 処理
→ 配列B → コンマ付きデータ → ブラウザ出力
という流れを想定しての質問でした。
>>370
確かに結果的には別の要素になりますが、その過程(Aの時点)では
同じ要素を入れる必要があると考えていたので、その局所的な点から
「同じ要素」と言ってしまいました。誤解を与えたならすみません。
>>371
ブラウザに表示するのは1度ではないので、その都度コンマを付けるより
初めから別に配列のデータを作って代入した方が良いかと思っていました。
整合性の問題については具体的には良く分かりません。
0373nobodyさん
2006/07/10(月) 18:27:23ID:???(3) の時点で配列のコピーつくればいいんじゃ?
var Array2 = Array1.concat(); とかして
0374nobodyさん
2006/07/10(月) 18:33:57ID:???>整合性の問題については具体的には良く分かりません。
途中で素のデータの方に変更がかかると
コンマ付きの方と値がズレるかも、ということ。
素のデータを更新したら、その都度、コンマ付きの方も更新しないといけない。
そういう心配をするなら、一つにしといた方が間違いが無い。
0375nobodyさん
2006/07/10(月) 18:50:46ID:kBFNwS+A(2)の段階で配列を2つ作ることと
(3)の段階で配列のコピーを作ることとの違いが分かりません。
>var Array2 = Array1.concat();
こういうのは見たことがないんですが、
配列のコピーというのはそういったテンポラリファイルとしてコピーする
モジュールか何かがあって、それを使うということでしょうか?
>>374
ご説明ありがとうございます。
配列に代入した後にデータを変更することはないので
その点については大丈夫です。
ただ、そういう考え方は重要ですね。
0376363
2006/07/10(月) 18:52:56ID:???ありがとうございまんこ
変数はローカル変数でも消費しちゃうのかな
とりあえず、perlでデーモンはいったんあきらめてみます
0377nobodyさん
2006/07/10(月) 19:12:46ID:???> 配列に代入した後にデータを変更することはないので
今の処理ではそうでも、何か拡張したときに変更するかも知れない。
データは1つだけ持っておき、出力時に変換関数を通すほうが安全。
同一データを変換する処理が数百回にも及ぶため、変換後のデータをキャッシュしておきたい、
というような要求に見えるが、安全性からはオブジェクトにして、データへの変更時には、
キャッシュも必ず更新されるようコーディングすべき。
0378nobodyさん
2006/07/10(月) 19:41:21ID:kBFNwS+Aアドバイスありがとうございます。
例えば、ブラウザに直接表示される部分はコンマ付きの値を
同時にフォームのhiddenでコンマ無しの素の値を、それぞれ置いておく
と言った場合には、局所的にせよ、やはり同じ配列を用意して
片方だけをコンマ付きにする必要があると思うんですが、
どうでしょうか?
0379nobodyさん
2006/07/10(月) 19:46:27ID:???0380nobodyさん
2006/07/10(月) 19:51:23ID:???配列全体に渡って作ろうとしているのか、そこが不明。
どうせ表示して終わりなんでしょ?
だったら、テンプレートにフィルタかけて、
表示側だけコンマ付きにすることもできるのに。
まぁ重複管理したければどうぞ。
0381nobodyさん
2006/07/10(月) 20:01:11ID:???0382nobodyさん
2006/07/10(月) 20:11:58ID:kBFNwS+Aはぁ・・・そうですか。
気分を害されたようでしたらすみません。
別段口答えしようというわけではなく、
指摘されたようなデータの保持の仕方は
理想的で、常にそうあるよう心掛けるべきだとは思いましたが、
どんな場面でも適用できるのか疑問に思ったので
しつこく質問してしまいました。
すみませんでした。
>>380
>なんで一時的にしか使わないコンマ付きの値を、
>配列全体に渡って作ろうとしているのか、そこが不明。
例えば、「数字をフォームに入力し、その数字について確認する
確認時には見やすいようにコンマ付けされた数字をブラウザには表示する
しかし、それとは別にhiddenで素の数字を置いておく」
といった場合のやり方をするためには、同じ配列を用意して
片方の配列のみコンマ付け仕様にする、という方法しか思いつかなくて
そうしていました。
ちなみに、配列内全てが入力された数字の情報なので、配列全体に渡って
コンマ付きの値を作る必要があるという流れになりました。
>だったら、テンプレートにフィルタかけて、
>表示側だけコンマ付きにすることもできるのに。
この方法については知りませんでした。
具体的にどういうことかはよく理解できませんが、
これ以上の質問はスレ汚しになりそうですし
お怒りを買いそうなので、これにて失礼します。
レス下さった方々ありがとうございました。
気を悪くされた方々、悪意はありませんでした。すみませんでした。
0383nobodyさん
2006/07/10(月) 20:24:53ID:???379だけど、
別に気分害したわけでもなく、単にどっちでもいいと思っただけw
好きなように書かないと楽しくもないし、そっちのがお手軽なら、そうすればいいんじゃね? みたいな。
せっかく perl なんだから、1つの方法にこだわることないし。
>>380 とかだって、よりいいやり方もあるよ、って示しただけだしね。
0384nobodyさん
2006/07/11(火) 00:36:18ID:???メモリ上の配列を弄ってもデータファイルには影響ないのだから、データ保存完了後に
好き勝手弄ればいい
0385nobodyさん
2006/07/11(火) 10:15:27ID:???あるいはパフォーマンス上、別データとして保存する利点もある。
しかし、同一の値を1回だけ出力するという今回の質問では不要。
元データだけ持っておき、出力時に変換すれば十分。
というか、メモリの無駄使い。
0386nobodyさん
2006/07/11(火) 10:33:29ID:???大抵はテンプレートファイルを読み込んで
決めておいたタグ部分を変数に置換するものだと思う。
その時に「カンマをつけるタグ」を別途用意しておいて
カンマつける関数かまして置換すればいいと思う。
自力で考え出した時俺は天才かと思ったwwwナツカシス
0387nobodyさん
2006/07/11(火) 12:28:46ID:???Template::Plugin::Comma - TT Plugin to commify numbers
ってのがまさしくそういうの。CGIじゃTTは重いかもしれんけどね。
0388nobodyさん
2006/07/11(火) 12:34:16ID:???モジュール使わずに自分で書いてるとなかなか思いつかないかもね
俺も最初は変数コピーしてカンマつけてその変数を出力してた
>>386みたいにすればテンプレートをいじるだけでOKだから管理が楽
0389nobodyさん
2006/07/11(火) 15:26:39ID:???で、なんでだれもココ突っ込まないんら?
0392nobodyさん
2006/07/11(火) 19:27:03ID:D6pM+gvD6桁の数字の連続060711とあったら
$yaer = 06;
$mon = 07;
$day = 11;
というように分けるにはどうすれば良いんでしょ?
06.07.11みたいに区切り入れてsplitするしかない?
0393nobodyさん
2006/07/11(火) 19:28:51ID:P82+nFT5print @{[split /;/,$temp]}->[1];
これってどういう理屈でしょうか。
splitがリストを返してきてそれを一旦無名リファレンスにしてますよね?
で、あとはそれをデリファレンスだけですが。
う〜ん・・・無名のデリファレンスってこんなのだっけなぁ
0394393
2006/07/11(火) 19:30:40ID:P82+nFT5やっぱり普通はこうですよね。
で、両方できるみたいだけど。。。
初めのやつはどんな理屈なんでしょうか。
0395393
2006/07/11(火) 19:32:35ID:P82+nFT5[split /;/,$temp] これで無名配列リファで
{[split /;/,$temp]} これでさらに無名ハッシュリファにしてますか??
それでハッシュの中に入ってる配列のリファのデリファをするのに
print @{[split /;/,$temp]}->[0];
ってなるのかなぁ。
でもなんで初めに%じゃなくて@になるんでしょう
0398nobodyさん
2006/07/11(火) 19:47:57ID:???>print @{[split /;/,$temp]}->[1];
多分、それを書いた人はデバッグしてる時に
print "@{[split /;/,$temp]}";
↑こんな感じでsplit後のデータを表示してた。
配列リファレンスのデリファレンスをすると、ダブルクォートの中に入れられる。
その名残が残ってるだけだと思う。
別に深く気にする事はない。
0399392
2006/07/11(火) 19:52:07ID:D6pM+gvDサンクル!
unpackって関数知らなかった。色々使えそうだわいわい。
正規表現ってホント色んなことできるなぁ。
やり方は全然思い付かないけど・・・。
0400393
2006/07/11(火) 19:59:25ID:P82+nFT5なるほど。HTMLに埋め込む時の手法ですね
@{[]}とか${\[]}だったかな。
>配列リファレンスのデリファレンスをすると、ダブルクォートの中に入れられる。
これはどういうことでしょう。
あ、つまりHTMLの中に入れられるみたいな意味ですね。
納得です。
0401393
2006/07/11(火) 20:08:51ID:P82+nFT5宜しくお願いします。
アクセス解析を自分で遊びで作ったのですが、たまにアクセスから1分以内とかのだけみたいときがあります。
sprintf "%04s%02s%02s%02s%02s%02s",sub{shift()+1900,shift()+1,@_}->([gmtime(time+32400)]->[5,4,3,2,1,0]);
このフォーマットで、作ってる現在時間と記録されてる過去の時間の時間的比較ってどうやればいいですか?
今は1分なら100とかでやってしまてるのですが。
変換関数とかあるのでしょうか?mistyでは見つかりませんでしたが。
0402393
2006/07/11(火) 20:20:59ID:P82+nFT5使わない場合はやはり簡単ではないようで。
数学の世界ですねきっと。
0403nobodyさん
2006/07/11(火) 20:35:09ID:???待て待て待て
そのフォーマットなら単純に文字列比較するだけで良いはずだが。
my $limit = sprintf "%04s%02s%02s%02s%02s%02s",sub{shift()+1900,shift()+1,@_}->([gmtime(time-60)]->[5,4,3,2,1,0]);
if ($limit lt $date) { }
で一分以内になるはず。試してないが
後、この場合じゃ無駄だがgmtimeの逆をする関数ならTime::Localにある
ttp://search.cpan.org/~drolsky/Time-Local-1.12/lib/Time/Local.pm
0404nobodyさん
2006/07/11(火) 20:42:15ID:???でいろいろ使えると思うけど。1900足したりしなくていいし。
0405nobodyさん
2006/07/11(火) 20:44:44ID:???0406393
2006/07/11(火) 21:22:41ID:P82+nFT5おお!
モジュールを使うと、フォーマットやら細かい部分が変わってしまって
色々手を入れないといけなくなりそうだったので嫌だったのですが。
盲点でした。60秒前の設定で作り直せばよかったんですね。
それもltなんて知りませんでした。
いまさらltまで発見させてもらって最高です。
0407393
2006/07/11(火) 21:24:30ID:P82+nFT5ltと>ってどうやって使い分けるんですか?
そもそも文字列を数値比較するなら>,==とかでいいとおもうのですが。
0408nobodyさん
2006/07/11(火) 21:29:11ID:???0409393
2006/07/11(火) 21:37:58ID:P82+nFT5???
a ne a
はわかるのですが、
1 lt 1
がわからないのです。
1 > 1とどういう差があるのか・・・
0410nobodyさん
2006/07/11(火) 21:42:41ID:???だからなんで数値だけの文字列と比較するんだよ。
"hoge" と "1234" 比較して、"hoge" の方が大きい事を
判断したい場合もあるだろうが。
数値比較しか無いなら、"hoge"はいつでもゼロになる。
0411393
2006/07/11(火) 21:48:06ID:P82+nFT5hogeに数字を与えるのですか?
hageとも違う数字を?
ちょっと実験してきます。
0412393
2006/07/11(火) 21:50:40ID:P82+nFT5print "左辺の方が小さいです。" if "hage" lt "hoge";
print "左辺の方が小さいです。" if "hoge" lt "hage";
どうやら"hage"の方が小さいようです・・・・
どうなってるのですか?これ。
0413nobodyさん
2006/07/11(火) 22:06:01ID:???0414nobodyさん
2006/07/11(火) 22:06:29ID:???・一文字目は両方ともhで同じ('h' eq 'h')。
・二文字目はaよりもoのほうが後にある('a' lt 'o')
ので、hageよりもhogeのほうが大きい、と判断される。
この一文字一文字の比較はバイト列として行われるから、詳しくはASCIIコード表をじっくり眺めてくれ。
ちなみに、数値しか入ってこないはずの日時の比較になぜ文字列比較をしたのかと言うと。
この場合はまだ良いんだけど、後数桁増えた場合、数値として扱うと誤差が発生するため、固定長の場合は習慣的に。
> print 20060711213959123456;
2.00607112139591e+19
> print 20060711213959123456 < 20060711213959123455
1
0415nobodyさん
2006/07/11(火) 22:24:42ID:???保持しておけば比較も簡単だと思うのだが、なぜわざわざ話をややこしくしたがる奴が多いの
だろうか。
0416nobodyさん
2006/07/11(火) 22:51:13ID:???0417nobodyさん
2006/07/11(火) 23:02:30ID:???ほんとに誤差がでるの?@5.8.8
-------------
$\ = "\n" ;
print 20060711213959123456;
print 20060711213959123456 > 20060711213959123455
-------------
2.0060711213959e+20
1
自分の環境に合わせて、lt を使うかどうか判断しましょう
0418nobodyさん
2006/07/11(火) 23:07:10ID:???書くときに localtime なりすればいいわけで、
これならたとえ 西暦 から ともだち暦 に変わったってデータの変更とか必要ないしな。
0419nobodyさん
2006/07/11(火) 23:09:27ID:???0420nobodyさん
2006/07/12(水) 00:23:20ID:qvG7JsXw今CGIを制作しているのですが、正規表現でおもいっくそ躓きましたorz
例えば「$nameが5文字以上、100文字以下でなければエラーを実行する。」
みたいな感じに「$name」に文字制限を掛けたいのですが・・・。
よろしくお願いします。
0421nobodyさん
2006/07/12(水) 00:31:07ID:cb+ZHaYE0422nobodyさん
2006/07/12(水) 00:35:00ID:qvG7JsXwすいません。ありがとうございます・・・。
しかし、悩んでいるのはその先なんです・・・。それをどのように正規表現のパターンにはめればよいか・・・。
0423nobodyさん
2006/07/12(水) 00:40:55ID:???0425nobodyさん
2006/07/12(水) 00:54:54ID:qvG7JsXw「5文字以上、100文字以下」であることを調べたいと思ってるんですが・・・ orz
0426nobodyさん
2006/07/12(水) 00:57:04ID:???&error;
}
0427nobodyさん
2006/07/12(水) 01:01:22ID:???質問:
5文字以上100文字以下の文字列にマッチする正規表現が書きたい
回答:
出来無くないけど正規表現の使い方間違えてるよ
0428nobodyさん
2006/07/12(水) 01:03:57ID:???&error;
}
0429nobodyさん
2006/07/12(水) 01:06:52ID:w3I1i8Fsprint (2+4)*3/2-1; # 6(8が正しいはず)
print int((2+4))*3/2-1; # 8
となるのは何故でしょうか?
0430420
2006/07/12(水) 01:13:25ID:qvG7JsXwこんな低レベルな質問に・・・本当にありがとうございました orz
0431nobodyさん
2006/07/12(水) 01:13:29ID:cb+ZHaYE0432nobodyさん
2006/07/12(水) 01:17:09ID:???0433nobodyさん
2006/07/12(水) 01:28:20ID:???と「,」で区切られた文字列があるとして
その中の冒頭部分のいくつかの要素が欲しいとき
どうするのが一番メモリ食わずに済みますか?
例えば、上の文字列からbとcとdが欲しい場合、
(undef,$hage1,$hage2,$hage3,undef) = split(/,/,$hoge);
とするのがベストなんでしょうか?
0434nobodyさん
2006/07/12(水) 01:38:13ID:???あとはsplitした結果の配列スライスを取るしかないね。
正規表現は処理として重いし。
データが絶対に1文字なら、substrで切ってからsplitするとか。
データが5000とかあって、3番目から100個取りたいとかいう事でなければ、
あまりメモリを気にしてもしょうがないよ。
perl使ってる時点で、かなりのメモリを喰ってる訳だから。
0435433
2006/07/12(水) 01:46:55ID:???ありがとうございます。
多少のことなんか気にせずバリバリ書く方が気楽なんですけどね。
省メモリに凝りだすと、ついついつまらないことまでも気になって眠れませんw
ちなみにものすごくどうでも良いことだとは思うんですが
(undef,$hage1,$hage2,$hage3,undef) = split(/,/,$hoge);
と
(undef,$hage1,$hage2,$hage3,) = split(/,/,$hoge);
って、あらゆる点から見て全く同じ処理という解釈で良いんですかね?
0436nobodyさん
2006/07/12(水) 01:52:13ID:???(undef,$hage1,$hage2,$hage3,undef) = split(/,/,$hoge,, 5);
0437nobodyさん
2006/07/12(水) 02:05:31ID:???質問の答えじゃないですが
perldoc -f split
で第3引数のLIMITを見てみて。単純にsplitするよりは効率いいかも。
0438433
2006/07/12(水) 02:18:09ID:???なるほど、どこまで読み込むかの範囲指定できる引数を割り当てられるんですね。
って、以前にsplitの項を本で読んだときに絶対目にしてるはずなんだけどなぁ。
実際に使わないと身に付かない体質なのか・・・。
これは付けておくに越したことはないですね。可読性の点からも悪くないですし。
即、該当箇所全てに割り振らねば!
ありがとうございました!
undefで値を捨てるのと、そもそも値を未定義(?)にしておくのと何か違いがあるのか
分かる方いらっしゃいましたら、お暇なときにでも教えて下さい。
0439nobodyさん
2006/07/12(水) 02:44:06ID:???>ちなみにものすごくどうでも良いことだとは思うんですが
>(undef,$hage1,$hage2,$hage3,undef) = split(/,/,$hoge);
>と
>(undef,$hage1,$hage2,$hage3,) = split(/,/,$hoge);
>って、あらゆる点から見て全く同じ処理という解釈で良いんですかね?
上はそのまま。
下は、
(undef,$hage1,$hage2,$hage3) = split(/,/,$hoge);
に最適化される。
0440nobodyさん
2006/07/12(水) 02:56:50ID:???0441nobodyさん
2006/07/12(水) 04:55:16ID:???my ( $hage1,$hage2,$hage3) = ( split/,/,$hoge)[1,2,3] ;
てスライス使わない?
0442nobodyさん
2006/07/12(水) 09:45:38ID:???> これは付けておくに越したことはないですね。可読性の点からも悪くないですし。
> 即、該当箇所全てに割り振らねば!
何も考えずに即値をばらまくと後できっと忘れます。やるならコメント推奨。
> undefで値を捨てるのと、そもそも値を未定義(?)にしておくのと何か違いがあるのか
> 分かる方いらっしゃいましたら、お暇なときにでも教えて下さい。
undef って書かなくていいので、楽ちんな上にプログラムサイズを小さくすることができます。
いや正直「そもそも値を未定義(?)にしておく」が、どういう操作を指しているのか分からないので分かりません。
0444nobodyさん
2006/07/12(水) 11:35:39ID:???(undef,$hage1,$hage2,$hage3) = split(/,/,$hoge);
なんて酷いの始めてみた。
0445nobodyさん
2006/07/12(水) 11:38:48ID:???0446nobodyさん
2006/07/12(水) 11:50:40ID:???undef を左辺に置く手法は、何番目の要素をそれぞれ拾い、捨てているのか視覚的に分かりやすいというメリットもある。
リストの要素数が小さく、かつ一定である場合には特に。
0447nobodyさん
2006/07/12(水) 11:55:26ID:???スライスしなくてもいい
を考えて、warningが出ないなら有用だと思うが
0448441
2006/07/12(水) 12:13:35ID:???まあ機会があれば使うかもしれん。
>>393
>print @{[split /;/,$temp]}->[1];
の方は「 split のケースでは」一生使うことはない。
0449nobodyさん
2006/07/12(水) 14:25:53ID:???0450nobodyさん
2006/07/12(水) 16:11:36ID:x2NzMLn/foreach $keyword (@keywords) {
if ( index($line, $keyword) >= 0 ) {
push (@result, $line);
last;
}
}
}
こーんな感じで検索してるんだけど、
@keywordsの中身がHitしても次の行に行ってくれない、
というか@keywordsの複数の中身がhitすると同じ行が何回もpushされちゃう。
なんでなんでしょうか?
0452nobodyさん
2006/07/12(水) 20:58:47ID:???0453nobodyさん
2006/07/12(水) 21:00:13ID:???視覚的にとかいう意味だと、スライスの方が数字なんだし読みやすい希ガス。
>>451
探す文字がパターンマッチを必要としないならindexの方が激速。
0454nobodyさん
2006/07/12(水) 21:01:33ID:???テストカキコついでに>>392 への遅レス
ダークサイドだが
my @date = grep {$_} split /(\d2})/, '060711' ;
ちう手もあるよん。
0456nobodyさん
2006/07/12(水) 21:10:09ID:???>>454
そw 普段こんなの絶対使わないw
が、たまに
my $i = 0;
my %hash = map { $_ or $i ++ } split /(.{20})/, $hoge ;
とかしたくなって誘惑される。
だからダークサイド。
0457nobodyさん
2006/07/12(水) 21:24:50ID:???>探す文字がパターンマッチを必要としないならindexの方が激速。
なるほど…今度使ってみよう。
>>456
それって20で割り切れなかったら…
まあ、承知のうえで書いてんでしょうけど。ダークサイド宣言してるし。
0458nobodyさん
2006/07/12(水) 21:26:14ID:Fw7S49xFperlで書かれたあるcgiからhtmlを読んでその中身を表示したいのですが、さらに一歩踏み込んで、そのhtmlの中でさらにperlで書かれたcgiを呼んで、そのhtmlを動的に変更して表示したいのですが、そんなこと可能ですか?
0459すいません…
2006/07/12(水) 21:50:43ID:???ダウンロードしたのですが、コマンドプロンプトでバージョンチェックを
しても、「バッチファイルとして認識していません」と表示されるのですが
どうすれば良いのでしょうか?
0460nobodyさん
2006/07/12(水) 21:51:10ID:???一応対応はできる、がこんなことするくらいだったら
普通に hash 作成すべき。
split /(.{20})/, $hoge ;
push @_, '', pop @_ if @_ % 20 != 0 ;
my $i = 0;
my %hash = map { $_ or $i ++ } @_ ;
0461460
2006/07/12(水) 21:59:24ID:???orz...吊ってくる
0462460
2006/07/12(水) 22:03:56ID:???スレ汚しすまん
0463nobodyさん
2006/07/12(水) 22:36:08ID:???Perlでシェルスクリプト(useradd)を使用するにはどうしたらいいでしょうか?
0465nobodyさん
2006/07/12(水) 23:03:43ID:l/BVmrr1これってPerlユーザーの主流じゃないようなんですが
何故ですか
0466nobodyさん
2006/07/12(水) 23:08:41ID:???system "your script" ;
もしくは your script をバッククォートにてかこむ。
your script 部分にはコマンド単独実行時の
打ち込むものすべてを入れる。
0467nobodyさん
2006/07/12(水) 23:18:33ID:???#!/usr/bin/perl
$user = "aaa";
system "useradd $user";
エラーは出ないのですが、ユーザーが追加されてません。
なぜでしょうか?
0468nobodyさん
2006/07/12(水) 23:30:16ID:???具具ってみたけど
useradd って管理者権限が必要でしょ。
sudo useradd か perl 自体の実行を su でするか
しないとだめなんじゃない?
力になれそうにありません。すまん。
0470446
2006/07/12(水) 23:41:57ID:???>>453
> 視覚的にとかいう意味だと、スライスの方が数字なんだし読みやすい希ガス。
もちろんそりゃ読みやすいほうを使ったらよろしいんです。いつでもどちらかがイイってな話はしてないですから。
「視覚的に」と言うからには、数値のリストを添字として読み、それを元にスライスされる前のリストからどの値を取り出してどの値を捨てたのかを、脳内変換すること無しに、その姿を *目で見て* 把握できることを指しています。
逆から言えば、その意味では添字によるスライスの表現は、左辺 undef と比較した場合、視覚的ではないと言わざるを得ないでしょう、ということです。
0471nobodyさん
2006/07/12(水) 23:43:05ID:3OAigznjCGI経由でsql文を実行しようとすると動きません
コンソールからやっても動かないのでsql文がおかしいと思います。
mysql> update todo set content = aho where id = 9;
ERROR 1054 (42S22): Unknown column 'aho' in 'field list'
以上のエラーが出ています。
mysqlのバージョンは4.1.13です。
よろしくお願いいたします。
0472nobodyさん
2006/07/12(水) 23:44:44ID:???それじゃ同じ答えしか返ってこない。
system使えとか、``使えとか、qx() しろとか。
systemの戻り値を調べるか、$! を見て。
0473nobodyさん
2006/07/12(水) 23:46:15ID:3OAigznj本当にありがとうございました。
0474nobodyさん
2006/07/12(水) 23:53:16ID:???>ちょっと質問変えてみます
>Perlでシェルスクリプト実行するにはどうしたらいいでしょうか?
まあ、同じ答えになるんだけどもちょっとだけ詳しく。
「/PATH/hoge.sh を引数 piyo つきで実行するなら」
system "sh /PATH/hoge.sh piyo" ;
「STDOUT を perl の変数に直接入れたいなら」
open EXE, "sh /PATH/hoge.sh piyo|" ;
@data = <EXE> ;
「STDERR とか細かなところまで制御したいなら」
perldoc IPC::Open3あたり
0476nobodyさん
2006/07/13(木) 00:23:07ID:???Perl は UNIX 上の仕事をやっつけるために生まれ、UNIX 系のシステムを中心に普及したから。
でも主流じゃないことを気に病むことはないよ。まずは悩む代わりに、その時間を使ってコードを書くんだ。
0477nobodyさん
2006/07/13(木) 00:26:45ID:???`
0478nobodyさん
2006/07/13(木) 00:32:23ID:???>探す文字がパターンマッチを必要としないならindexの方が激速。
あんま誤解の生じること言わないほうがいいw
0479nobodyさん
2006/07/13(木) 00:38:17ID:???一般に正しいと思うけど。
(最適化のかかる)オートマトン作らなくて良いパターンでなければ、
indexの方が遥かに安価で速いだろう。
0480469
2006/07/13(木) 00:39:17ID:???0482nobodyさん
2006/07/13(木) 00:48:22ID:???0483nobodyさん
2006/07/13(木) 00:48:54ID:???正しくないw
ベンチとってみればわかるけど
A1 $_ =~ /hoge/
A2 index($_, 'hoge')
my $word = 'hoge';
B1 $_ =~ /$word/
B2 index($_, $word)
A1 A2 はほぼ同じ速さで、
B1 は B2 より速い。
index($_, $word[1]) or index($_, $word[1]) ・・・
より
/$word[0]/ or $word[1] ・・・
のが速い。
$_ が 'aaaaaaa......' で $word が 'baaaaaaaaaaaa' とかいう特殊な場合は考えないでね。
0484469
2006/07/13(木) 00:48:56ID:???0485nobodyさん
2006/07/13(木) 00:50:07ID:???× /$word[0]/ or $word[1] ・・・
○ /$word[0]/ or /$word[1]/ ・・・
0486nobodyさん
2006/07/13(木) 00:50:10ID:???日本語の問題だと思うけど。
「探す文字がパターンマッチを必要としないなら(最適化がかかるので)indexの方が激速なんてことはない。」
0487458
2006/07/13(木) 00:52:59ID:aY2uz4D9レスありがとうございます。
もう少し具体的に質問します。
まずparent.cgiがあります。ここやってることはhtmlテンプレートを使ったchild.htmlファイルを読み込んで表示させるだけです。つまり
$template = HTML::TEMPLATE->new(
filename => 'child.html',
);
print $template->output;
のような感じです。
このchild.htmlでは
<!-- TMPL_INCLUDE NAME="hoge.html" -->
のようにhtmlファイルを読み込んでいます。
しかし今回このhoge.htmlの代わりにhoge.cgiを使いたいのです。つまり静的なhtmlファイルではなくcgiを使ってここに表示される内容を動的に変化させたいわけです。これをするのにいい方法ありますでしょうか?
0488nobodyさん
2006/07/13(木) 01:04:37ID:???静的なhtmlをincludeするんじゃなくて、そこで普通にテンプレートを使えば
実質お望みの事ができると思うんだけど…。
0489nobodyさん
2006/07/13(木) 01:05:37ID:???いろいろ方法はあるだろうけど、全く別の CGI を呼ぶ 「いい方法」 というなら SSI が 「いい方法」 だと思うぞ。
0490nobodyさん
2006/07/13(木) 01:06:25ID:???0491nobodyさん
2006/07/13(木) 01:17:32ID:???パーミッション777のディレクトリだとmkdirできるのですが
755だとできません。777だとセキュリティ的に問題ですよね?
755のディレクトリ直下に新規ディレクトリを作成するにはどうしたらいいでしょうか?
0495487
2006/07/13(木) 02:29:43ID:aY2uz4D9知識不足で申し訳ないです。普通にテンプレートを使うとはどういうことでしょう?テンプレートでcgiを実行するようなものがあるんですか?
>> 489
SSIで試してみました。parent.cgiから読み取るのをchild.shtmlにしてその中で<!--#exec cmd="perl hoge.cgi" -->として実行してみました。
結果普通にchild.shtmlを見ると実行が確認できたのですが、parent.cgiの中でshtmlを読み込んでしまうとSSIが実行されないようでダメでした。
>>490
カウンターではありませんw
0496nobodyさん
2006/07/13(木) 02:50:05ID:???テンプレート使ってるってことは、そもそもCGIで動いてるんでしょ。
その場で動的なページ作ればいいだけでは。
テンプレートで静的なhtmlを読み込んで、
さらにそこからCGI叩いて動的なページを、、、なんて考える前に。
0497495
2006/07/13(木) 03:13:47ID:aY2uz4D9レスありがとうございます。
しかしそのテンプレートのhtmlの"ある部分"にCGIの結果を入れたいんですよ。そこはスタイルシート等で位置が厳密に決まっているのでその部分だけ元のparent.cgiでhoge.cgiを呼び出してってのは難しいんじゃないかと思ってます。
0498nobodyさん
2006/07/13(木) 03:25:44ID:???0499nobodyさん
2006/07/13(木) 06:06:02ID:???言いたい事はわかるが、
それはパターンマッチを必要とする条件じゃないのか?
ただの文字列を探すならindexしかないだろ。
0500nobodyさん
2006/07/13(木) 06:14:58ID:???皮をかぶってるかもしれないから、ソース見るかベンチ取るかしてみないと(ry
0501nobodyさん
NGNGふつーに簡単なベンチ取ったら
indexの方が2倍 速かったんですけど
当然っちゃー当然の結果やね
0502nobodyさん
2006/07/13(木) 06:32:39ID:???http://x68000.q-e-d.net/~68user/webcgi/search-1.html
0503457
2006/07/13(木) 07:33:25ID:???>>502
横レスだけどリンク先を良くよんだら?
search-2.cgi がせめて and 検索だったらいいんだけどリンク先は
アンフェアな比較だよ。(まあ、そういう目的で作ったんんじゃない
だろうけど)
以下は寝起きで確認したベンチマークのソース。
#!/usr/bin/env perl -w
#use strict ;
use Benchmark ;
my $str1 = ( 'a' x 30 ) . 'hoge' . ( 'a' x 10 ) ;
my $str2 = ( 'a' x 30 ) . ' hoge ' . ( 'a' x 10 ) ;
sub cont1(){ $str1 =~ /hoge/ }
sub cont2(){ $str2 =~ /hoge/ }
sub test_index1(){ index $str1, 'hoge' }
sub test_index2(){ index $str2, 'hoge' }
timethese 500000, { o0 => 'cont1' , o1 => 'cont2' , o2 => 'test_index1' , o3 => 'test_index2' } ;
================
Benchmark: timing 500000 iterations of o0, o1, o2, o3...
o0: 1 wallclock secs ( 1.66 usr + 0.01 sys = 1.67 CPU) @ 299401.20/s (n=500000)
o1: 2 wallclock secs ( 1.66 usr + 0.02 sys = 1.68 CPU) @ 297619.05/s (n=500000)
o2: 1 wallclock secs ( 1.43 usr + 0.01 sys = 1.44 CPU) @ 347222.22/s (n=500000)
o3: 1 wallclock secs ( 1.43 usr + 0.01 sys = 1.44 CPU) @ 347222.22/s (n=500000)
0504nobodyさん
2006/07/13(木) 07:46:36ID:???search-2 が and 検索であろうとなんであろうと、単純な index と正規表現
の速度比較のソースにはならんな。
0505nobodyさん
2006/07/13(木) 13:17:19ID:???>Perlはもしかしたらindexが正規表現ライブラリの
>皮をかぶってるかもしれないから
それは普通に考えてありえない…。
0507nobodyさん
2006/07/13(木) 16:04:15ID:???>>503 と同じようなのを書いてベンチ取った。
何度かやってみたが、変数に入れてもindexの方が速かった。
#!/usr/bin/perl
use Benchmark;
my $str1 = ('a' x 30) . 'hoge' . ('a' x 10);
my $str2 = ('a' x 30) . ' hoge ' . ('a' x 10);
sub test_reg1 { my $hoge = 'hoge'; $str1 =~ /$hoge/; }
sub test_reg2 { my $hoge = 'hoge'; $str2 =~ /$hoge/; }
sub test_index1 { my $hoge = 'hoge'; index($str1, $hoge); }
sub test_index2 { my $hoge = 'hoge'; index($str2, $hoge); }
timethese 500000, {
reg1 => 'test_reg1',
reg2 => 'test_reg2',
idx1 => 'test_index1',
idx2 => 'test_index2',
};
idx1: 1 wallclock secs ( 0.83 usr + 0.00 sys = 0.83 CPU) @ 602409.64/s (n=500000)
idx2: 0 wallclock secs ( 0.83 usr + 0.00 sys = 0.83 CPU) @ 602409.64/s (n=500000)
reg1: 1 wallclock secs ( 1.00 usr + 0.00 sys = 1.00 CPU) @ 500000.00/s (n=500000)
reg2: 0 wallclock secs ( 1.00 usr + 0.00 sys = 1.00 CPU) @ 500000.00/s (n=500000)
0509nobodyさん
2006/07/13(木) 16:38:50ID:???あー、ほんとだ。
でもね、検索対象のサイズを大きくするにしたがって逆転していくみたい。
my $str1 = ('a' x 10000) . 'hoge' . ('a' x 1000);
my $str2 = ('a' x 10000) . 'hage' . ('a' x 1000);
とかでやってみておくれ。 これは 11k だけど、うちの環境では 1k あたりから差がではじめた。
0511nobodyさん
2006/07/13(木) 17:29:16ID:???気になる人はよく考えるなり実験するなりして選択しろと
いうことか。
0512nobodyさん
2006/07/13(木) 17:33:49ID:???(オートマトン作らなくて良い)なんて事は無いし。
0513nobodyさん
2006/07/13(木) 19:41:52ID:???0515nobodyさん
2006/07/13(木) 20:09:12ID:IeuSyhG10516nobodyさん
2006/07/13(木) 20:52:55ID:???0517nobodyさん
2006/07/13(木) 21:53:37ID:???0518nobodyさん
2006/07/13(木) 21:58:11ID:???「それでもPerlは動いている」
0519nobodyさん
2006/07/13(木) 22:11:56ID:Ms2xB21uアクセス解析用のcgiで出力を上記のようにしています。
自分自身先日winXPのIE7のベータ版にブラウザを変えて、気付いたのですが、
キャッシュされてしまってページ間の移動時に思うように動作しないことがあります。
これはベータ版のバグかもしれませんが。普通はcgiファイルをキャッシュして読み込みを省略することはないと思うので。
それでキャッシュ対策のヘッダを付け加えたいのですが、
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="Tue, 20 Aug 1996 14:25:27 GMT">
これのPERLヘッダ?版はどう記述すればいいでしょうか?
宜しくお願いします。
0520nobodyさん
2006/07/13(木) 22:22:32ID:Ms2xB21uprint "Cache-Control: no-cache\n";
print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n\n";
一応こんな感じかなと思いますが、あってるのでしょうか?
http://www.gac.jp/article/index.php?stats=question&category=10&id=11811&command=msg
ここではどうやらNNにはこれでは残ってしまうように書いてあるのですが。
0522519
2006/07/13(木) 22:24:37ID:Ms2xB21u要は私の場合は戻るボタンが効かないように、ではなくて、
アクセス解析CGIがちゃんと動作することと、
チャットで使ってる、
<meta http-equiv="Refresh" content="15">
がちゃんと動作することなのですが。
0523519
2006/07/13(木) 22:25:35ID:Ms2xB21uありがとうございます。
その書き方がイマイチ自身がもてなかったので投稿して確認に参りました。
0524nobodyさん
2006/07/13(木) 22:26:24ID:???0525nobodyさん
2006/07/13(木) 23:13:19ID:???というエラーが出たんですが、これはどういうときに出るもんなんですか?
test.cgiの60行目で''と''が同じになってるよ(コピーされたとかじゃなくてな)
ってこと?意味が分かりません。
0526525
2006/07/13(木) 23:16:07ID:???59行目}elsif($action eq 'move'){
60行目&move;
61行目&move_complete;
62行目}elsif(......
0529nobodyさん
2006/07/14(金) 00:05:57ID:???この「temp」フォルダの中にある各フォルダの名前を$dirnameとしましょう。
各フォルダの中に、
{
$dirname
}
とだけ書かれた、「test.txt」という名前のファイルをそれぞれ新しく作りたいんです。
#!/usr/bin/perl
opendir DIR, "temp" or die "can't open temp\n";
@dir = map { -d "temp/$_" ? $_ : '' } readdir DIR;
foreach $dirname (@dir) {
chdir "./$dirname";
open OUT, ">test.txt" or die "can't create the file\n";
print OUT "{\n";
print OUT "$dirname\n";
print OUT "}\n";
close OUT;
chdir "..";
}
close DIR;
こんな感じにプログラムを書いてDOSプロンプトから実行したのですが何も起きません・・・
どうすればいいのか教えていただけないでしょうか?
0530525
2006/07/14(金) 00:20:17ID:???&move;を別の名前に変える動いた・・・なぜ??
逆に59行目の'move'を別の名前に変えただけでは同じエラーが。
0531nobodyさん
2006/07/14(金) 00:26:19ID:???とりあえず、mapで書いてる行をgrepで書き直す。
@dir = grep { -d "temp/$_" && !/^¥./ } readdir(DIR);
0533nobodyさん
2006/07/14(金) 01:07:41ID:???print @dir ; か
chdir "./$dirname" or die してみそ
@dir の中身は
./temp/hoge
./temp/piyo
じゃなく
hoge
piyo
になるYO @OSX
0534nobodyさん
2006/07/14(金) 01:11:29ID:???foreachの前の時点で@dirに期待した値が入ってるかどうかぐらいは
確認して問題の切り分けをしろよ。
あとchdirも失敗することがあるので or dieしとけ。
0535nobodyさん
2006/07/14(金) 01:13:56ID:???誰かがなんか書いたらそれコピペして動くかどうかだけ?
なんだかなぁ。
0536nobodyさん
2006/07/14(金) 01:14:40ID:???open OUT, "> temp/$dirname/test.txt" or die "can't create the file\n";
ってすればいいじゃない
0537nobodyさん
2006/07/14(金) 01:21:07ID:???0538529
2006/07/14(金) 01:27:17ID:???できました!!!
ものすごく賢いやり方ですね。
>>534、>>533
chdirがうまくいってなかったというか、どうやら相対ディレクトリ名の指定とかが根本的
にわかっていなかったようです。openでカレントディレクトリも変わるんだと思ってました。
>>535
(・∀・)
みなさんどうもありがとうございます。
おかげさまで相対ディレクトリ名の指定ということに関してだいぶ理解が進みました。
0539nobodyさん
2006/07/14(金) 02:04:03ID:???そもそも1回目の
chdir "./$dirname";
でもし成功して temp/hoge/ になっちゃった場合、2回目はそこから chdir だから temp/hoge/fuga/ とかなんじゃねの?
0540nobodyさん
2006/07/14(金) 02:23:45ID:???フルパスも相対パスも知らずにファイル扱ってたのか((( ;゚Д゚)))
0541nobodyさん
2006/07/14(金) 02:33:40ID:???>>529 のコードではファイルへの書き込みを行なった後に chdir ".." してるから
temp/ → temp/hoge/ → temp/ と戻るはず。
でもやっぱり読みづらいから、カレントディレクトリはあんまり変えて欲しくないなぁ。
0542nobodyさん
2006/07/14(金) 16:30:45ID:???前提条件でそういうのはないならOKだが一般的にはchdir ".."では
戻れないかもしれない。
perlのchdirにはファイルハンドルやディレクトリハンドルを渡せるので、
戻りたいディレクトリを開いておいてこっちを使うほうが安全。
0543nobodyさん
2006/07/14(金) 18:02:15ID:IyAZlhFkqmailなのですが、perlにパイプさせるにはどうしたらよいでしょうか?
sendmailなら/etc/aliases でできますよね?
0545nobodyさん
2006/07/14(金) 19:43:53ID:???上記の掲示板に投稿する際のコード入力のスクリプトを作ったんですが
時たまコード入力より下が表示されなくなってしまいます。
どうすれば改善していいか分かりません。
どなたか改善よろしくお願いします。
0546nobodyさん
2006/07/14(金) 19:50:38ID:???<form>タグが無い。
<table>タグも無い。
下から5行目、==&gt;と書くべき所で、'==>' と書いている。
0547nobodyさん
2006/07/14(金) 19:55:39ID:???というか、sub code 自体をどこからも呼んでない…。
sub error は存在しない。
何がしたいの?そこからして不明。
0548nobodyさん
2006/07/14(金) 19:59:34ID:???削除パスワードの下に&code;で呼び出して使ってます。
sub errorはあります。
で何をしたいかと言うとどうやってもコード部分が原因だと分かっていてもたまにコード部分からしたが消える
のが直せないので直してほしいわけです。
0549nobodyさん
2006/07/14(金) 20:04:26ID:???0550nobodyさん
2006/07/14(金) 20:05:56ID:???そんな一部しかないんじゃ分からん…。
とりあえず、>>546 の通り&code の中でHTML表示してる部分、
tableタグの開始も終了も無いんだが…。そこが一番あやしい。
ちゃんとtableタグ入れてみたら?
それさえ分からなければ、PerlじゃなくてHTMLの質問だよ。
0551nobodyさん
2006/07/14(金) 20:08:03ID:???http://livetool.ty.land.to/aska/aska.cgi
ココに問題の掲示板とソースをのっけてあります。
数回更新ボタンを押していると表示されなくなりますのでそれを改善したいのです。
よろしくお願いします。
0552nobodyさん
2006/07/14(金) 22:04:47ID:LnOAoBN3よい参考書を教えてください
0554nobodyさん
2006/07/14(金) 22:26:32ID:cNzjTfEoその程度は参考書などいらない。
というか基本的にプログラム組むのに参考書なんていらない。
http://www.rfs.jp/sb/index.html
ここに書いてある内容を全て理解・・しなくても簡単にそのくらいは作れる。
まずは自分のパソコンに仮想環境を作ることが先決だ。
そうすればどれだけ程度の低い話なのかわかる。
優れたプログラムを組めるかどうかは人によって優劣がでるが、
最低限動くものなら健常者であれば誰でも可能。
0555nobodyさん
2006/07/14(金) 23:28:12ID:???WebProgは脆弱性があると、攻撃される危険が付きまとうことも忘れないでくれ。
と言うことで最低限ここは読んでおくべき。
ttp://www.ipa.go.jp/security/awareness/vendor/programming/
出来ればこの辺もね
ttp://www.jumperz.net/texts/csrf.htm
0556nobodyさん
2006/07/15(土) 13:04:39ID:FLr1xmaF0558nobodyさん
2006/07/15(土) 19:19:39ID:???>#乱数の作成
>$rand1 = int(rand(10));
を
$rand1 = int(rand(10)) + 1;
と末尾に+1しろ。
0559nobodyさん
2006/07/15(土) 19:25:01ID:???1). 自力でつくってんだったら協力したるのに
2). 向うの掲示板に問い合わせろよ
3). KENT かよ!
0560nobodyさん
2006/07/15(土) 19:41:55ID:???だいたい合ってるwwwww
&code; とか気持ち悪いな。暗黙に &code(@_); と渡されることを知ってての諸行かな。
せめて &code(); とかにしてほしいなあ。
0561nobodyさん
2006/07/15(土) 19:48:58ID:???ありがとうございます。
文法的にも間違っていたようです。
>>559
すべてではないですが大半は作りましたが・・・・・。
0562nobodyさん
2006/07/15(土) 19:53:50ID:???全体の半分以上。過半。大部分。副詞的にも用いる。
へぇ・・・。
0563nobodyさん
2006/07/15(土) 19:55:13ID:???>せめて &code(); とかにしてほしいなあ。
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
と釣られてみるテスト
0564nobodyさん
2006/07/15(土) 20:04:58ID:???ほんとかどうか知らんが、おれは KENT であろうとなかろうと問い合わせ先が記入されてるソースに関してのレスは
つけんぞ。
おまえさんがさきに「この部分が自作です」といえば
話は別になるときもあるが。
0565nobodyさん
2006/07/15(土) 20:06:20ID:???0566nobodyさん
2006/07/15(土) 20:38:18ID:???ダメな子が増えて困る。
0567nobodyさん
2006/07/15(土) 20:45:33ID:???少なくともチャント動くし
0568nobodyさん
2006/07/15(土) 21:34:29ID:???○ 動きはする
0569nobodyさん
2006/07/15(土) 21:59:01ID:???0570nobodyさん
2006/07/15(土) 22:15:52ID:???0571nobodyさん
2006/07/15(土) 23:50:29ID:???攻撃できまくり☆(ゝω・)v
0572nobodyさん
2006/07/16(日) 00:07:06ID:???外部から任意コマンド実行可能なまま。
0573nobodyさん
2006/07/16(日) 06:07:21ID:???0574nobodyさん
2006/07/16(日) 13:59:39ID:pJTY6Rn5例えば
$hoge = '2743AB5837C9849';
というような文字列があるとして
$hoge =~ s/\D//g;
とした場合に\Dに該当する方(ABC)の値を取りたいんですが
どうすれば良いんでしょうか?
0575nobodyさん
2006/07/16(日) 14:07:23ID:???$&
0576574
2006/07/16(日) 14:21:08ID:pJTY6Rn5ありがとうございます。
マッチ変数というのがあるんですね。
ttp://www.rfs.jp/sb/perl/02/09.html
>後方参照の変数には上記のほかに、マッチ変数 $& $` $' $+ があります。これらの変数を使うと
>プログラム内のすべての正規表現の処理が遅くなるので、注意して使ってください。
という記述があったんですが、できることなら使わない方が良い代物なんでしょうか。
それとも多用がいけないのであって、1、2箇所であれば問題ないんでしょうか。
0578nobodyさん
2006/07/16(日) 14:48:17ID:???> という記述があったんですが、できることなら使わない方が良い代物なんでしょうか。
> それとも多用がいけないのであって、1、2箇所であれば問題ないんでしょうか。
1回でも使っている箇所があると、全ての正規表現が遅くなる。
マッチ変数が使われているかどうか調べるためのモジュールはDevel::SawAmpersand
0579nobodyさん
2006/07/16(日) 14:56:43ID:pJTY6Rn5ありがとうございます。
ちょっと落雷がヤバイので一旦PCの電源落とします。
落ち着いたらそのときまたレスします。すみません。
0580nobodyさん
2006/07/16(日) 15:07:17ID:???my @hit = () ;
push @hit, $1 while $hoge =~ s/(¥D)// ;
みたく $1 を使えば?
つーか $& 使ったことないなあ。オレ。
0581nobodyさん
2006/07/16(日) 15:54:56ID:???0582nobodyさん
2006/07/16(日) 16:08:19ID:???0583bench 魔
2006/07/16(日) 16:56:41ID:???===そーす===
my $str1 = 'a' x 6 . 'hoge' ;
$str1 = $str1 x 100 ;
sub test1(){ my ( $tmp, @hoge ) = $str1 ; push @hoge, $& while $tmp =~ s/hoge// ; }
sub test2(){ my ( $tmp, @hoge ) = $str1 ; push @hoge, $1 while $tmp =~ s/(hoge)// ; }
#timethese 10000, { test2 => 'test2' } ;
timethese 10000, { test1 => 'test1', test2 => 'test2' } ;
===実行結果===
1. ソース内に $& 蟻
Benchmark: timing 10000 iterations of test, test2...
test: 13 wallclock secs (13.22 usr + 0.10 sys = 13.32 CPU) @ 750.75/s (n=10000)
test2: 14 wallclock secs (13.34 usr + 0.10 sys = 13.44 CPU) @ 744.05/s (n=10000)
2. ソース内に $& なし(test1 をコメントアウト
Benchmark: timing 10000 iterations of test2...
test2: 14 wallclock secs (13.32 usr + 0.10 sys = 13.42 CPU) @ 745.16/s (n=10000)
0584bench 魔
2006/07/16(日) 16:57:32ID:???==========
で、test1 を以下の様に変えて
sub test1(){
my ( $tmp, @hoge, @fuga, @piyo ) = $str1 ;
( push (@hoge, $& ),
push (@fuga, $`),
push(@piyo, $' )) while $tmp =~ s/hoge// ; }
実行してみたが…
Benchmark: timing 10000 iterations of test, test2...
test: 26 wallclock secs (24.80 usr + 0.22 sys = 25.02 CPU) @ 399.68/s (n=10000)
test2: 14 wallclock secs (13.28 usr + 0.08 sys = 13.36 CPU) @ 748.50/s (n=10000)
test2 の結果は余りかわらず。
prelre にまで書いてある記載だから $& とか使ったら遅くなるケースが必ずある筈なんだけどなあ。
実際のソースで自分で確かめるしかねーな。
0585nobodyさん
2006/07/16(日) 17:10:42ID:???文句言いながらやる君が好きだ。
でも、
> これらの変数を使うとプログラム内のすべての正規表現の処理が遅くなるので、注意して使ってください
だから、同じ時に計測すると $1 の方も遅くなっちゃうんじゃないのかな?
比較じゃなくて構わないから、参考に単独での速度を計ってみてくれるといいかも。
できれば
> @hoges = $hoge =~ /\D/g;
系と
> push @hoges, $1 while $hoge =~ /(\D)/g ;
系とでも比較してあるとなお。
0586bench 魔
2006/07/16(日) 17:51:19ID:???>比較じゃなくて構わないから、参考に単独での速度を計ってみてくれるといいかも。
583 の 2.の条件が $& を排除した形のものデス。
$& の入っている行をすべてコメントアウトしました。
お約束「あなたの為にやるんじゃないんだからね!!」
>>583 のソースに
sub cont (){ my ( $tmp, @hoge ) = $str1 ; @hoge = $tmp =~ /hoge/g ;}
を加えて実行 ( 実行名 cont )。実行回数は 5 万回に変更
Benchmark: timing 50000 iterations of cont, test1, test2...
cont: 49 wallclock secs (48.24 usr + 0.34 sys = 48.58 CPU) @ 1029.23/s (n=50000)
test1: 67 wallclock secs (65.77 usr + 0.39 sys = 66.16 CPU) @ 755.74/s (n=50000)
test2: 69 wallclock secs (66.33 usr + 0.53 sys = 66.86 CPU) @ 747.83/s (n=50000)
そこから $& が入った部分を全削除して実行
Benchmark: timing 50000 iterations of cont, test2...
cont: 44 wallclock secs (42.59 usr + 0.33 sys = 42.92 CPU) @ 1164.96/s (n=50000)
test2: 69 wallclock secs (66.67 usr + 0.54 sys = 67.21 CPU) @ 743.94/s (n=50000)
…なるほど、test2 ( $1 を利用 )にはもともとコストが掛ってて $& の影響が表われなかった
だけか。
一箇所の正規表現だけだと、$1 より $& を使った方が速いがソース全体だと影響を及ぼす
という妥当な結果かな。
0587nobodyさん
2006/07/16(日) 18:23:45ID:???オツカレ!
つまり $& を使うとそもそも結果を伴う $1 の処理には影響ないけど、
普通の正規表現も結果をとることになるから総合的に遅くなる、ってわけだな。
結局、>>574の場合、一番早いのは
my @matchs = $hoge =~ /\D/g;
$hoge =~ s/\D//g; # ※より早い形→ $hoge =~ tr/0-9//cd;
って2段階で処理して $& も $1 も使わない形なんだろね。
0588574
2006/07/16(日) 19:11:43ID:pJTY6Rn5>>577
一度別の変数に逃がしておいて、そっちの方で再度逆のパターンで取得する、
という理解で良いんでしょうか。参考にしてみます。
括弧でくくって逃がしておく方法は知らなかったので勉強になりました。
>>578
マッチ変数は1箇所でも使うと他の全ての正規表現にも影響が出るんですね。
今のところ使ってる箇所はないんで、できたら使わない方向で考えてみます。
>>580>>581
速度も気になりますが、「注意して使ってください」の文言に
ちょっとビビってしまいました。でも、他にも正規表現使ってる箇所があるので
できたらマッチ変数使わなくても良いのならそっちの方が良いと思っています。
>>583-584>>586
画に描いたようなツンデレと詳しいベンチマークありがとうございました。
局所的にはマッチ変数よりも$1使った方が処理は速いけれど
他にも正規表現使ってる箇所があれば、結果は逆になるということですね。
コード内で他にもいくつか正規表現使ってるところがあるので
マッチ変数を使わなくてはならない状況になれば$1を代用することにします。
非常に勉強になりました。
>>587
正規表現の置換と言えば即sでやってたので
trに特有の便利な修飾子があるのを見落としていました。
ずばりの解答も含めてありがとうございました。
レスくださった皆さん、ありがとうございました。
最近あちこちで落雷が発生しているみたいなのでパソコンの方もご自愛下さい。
0589nobodyさん
2006/07/16(日) 19:42:51ID:???by KENT信者
0590nobodyさん
2006/07/16(日) 19:44:18ID:???0591nobodyさん
2006/07/16(日) 22:04:02ID:???たとえば ^\d$ と入力すると
0
1
2
3
4
5
6
7
8
9
と展開するみたいな
0592nobodyさん
2006/07/16(日) 22:16:57ID:???0593nobodyさん
2006/07/16(日) 22:32:38ID:???正規表現の展開?
0594591
2006/07/16(日) 22:41:09ID:???展開して表示する方法があるのかどうかです
^\d$なら>>591の通り0〜9まで展開
^[Aa]$ならAとaの2つ展開
という意味です
0595nobodyさん
2006/07/16(日) 22:52:27ID:???できないってことでいいよ。
0596nobodyさん
2006/07/16(日) 22:56:17ID:???0597nobodyさん
2006/07/16(日) 22:56:40ID:???>>592のいう通りじゃない?
簡単な正規表現だったら、頭の中で想像つくし、
複雑なものだったら、展開後の文字が何万行にも
わたってしまうから...
単純な例だと「/./」。
これの展開は 1byte で表されるものすべてだから、
多byte文字とか考えたらガクガクブルブルw
0599nobodyさん
2006/07/16(日) 23:01:02ID:???my @c = grep { $_ = chr($_); /$p/ } (0..0xFF);
0600nobodyさん
2006/07/16(日) 23:34:52ID:???そしてサーバ上にあらかじめ用意してあるファイルBにその結果を書き出す、
ということをやりたいんですが、そういうことは可能でしょうか?
0602600
2006/07/16(日) 23:42:33ID:???なるほど。とすると簡単な流れとしては
csvファイルAをサーバにアップロード
→オープンして処理
→ファイルBに書き込む
→ファイルA削除
という解釈で大丈夫でしょうか?
0603nobodyさん
2006/07/16(日) 23:48:10ID:???0607nobodyさん
2006/07/17(月) 00:25:28ID:???search.cpan.org にいって
NET::FTP とか NET::SSH::PERL とか
そっちがわ系のモジュールを検討してみたら?
0609600
2006/07/17(月) 00:46:22ID:???ファイルAをアップロード→オープン
のところで、おそらくアップロードが完了する前に
オープンをかけてしまいエラーが出てしまいます。
アップロードとファイルBへの書き込み処理は
別々にしないと無理ですかね・・・。
>>603
喜び勇んで早速書き始めてたらいきなり否定されてたとは・・・
>>605
grepを使うにしても、まずはサーバ上にファイルAを上げないとダメですよね?
>>606
そういうモジュールがあるんですか。
調べてみます。
0612nobodyさん
2006/07/17(月) 01:06:13ID:???0613nobodyさん
2006/07/17(月) 01:06:32ID:???パターンなんて無限大にあるしなあ。
/.../ これだけ展開するので 255*255*255 だろw
もっと条件言うか何がしたいか言うかしないと 「無理」 って感じ。
0615nobodyさん
NGNG観自在菩薩行深般若波羅蜜多時照見五
蘊皆空度一切苦厄舎利子色不異空空不
異色色即是空空即是色受想行識亦復如
是舎利子是諸法空相不生不滅不垢不浄
不増不減是故空中無色無受想行識無眼
耳鼻舌身意無色聲香味觸法無眼界乃至
無意識界無無明亦無無明尽乃至無老死
亦無老死尽無苦集滅道無智亦無得以無
所得故菩提薩垂依般若波羅蜜多故心無
罫礙無罫礙故無有恐怖遠離一切顛倒夢
想究竟涅槃三世諸仏依般若波羅蜜多故
得阿耨多羅三藐三菩提故知般若波羅蜜
多是大神咒是大明咒是無上咒是無等等
咒能除一切苦真実不虚故説般若波羅蜜
多咒即説咒曰
羯諦羯諦波羅羯諦波羅僧羯諦菩提薩婆訶
般若心経
仏説摩訶般若波羅蜜多心経観自在菩薩行深般若波羅蜜多時照見五蘊皆空度一
切苦厄舎利子色不異空空不異色色即是空空即是色受想行識亦復如是舎利子是
諸法空相不生不滅不垢不浄不増不減是故空中無色無受想行識無眼耳鼻舌身意
無色声香味触法無眼界乃至無意識界無無明亦無無明尽乃至無老死亦無老死尽
無苦集滅道無智亦無得以無所得故菩提薩捶依般若波羅蜜多故心無罫礙無罫礙
故無有恐怖遠離一切顛倒夢想究竟涅槃三世諸仏依般若波羅蜜多故得阿耨多羅
三貌三菩提故知般若波羅蜜多是大神呪是大明呪是無上呪是無等等呪能除一切
苦真実不虚故説般若波羅蜜多呪即説呪曰羯諦羯諦波羅羯諦波羅僧羯諦菩提薩
婆訶般若心経
0616607
2006/07/17(月) 01:10:00ID:???適当にぐぐっただけなので、中身は知らんよ。
ただ、ftp, ssh 系のモジュールは、cpan に結構ある
から、その中に役立つものはあるかも。
0617nobodyさん
2006/07/17(月) 01:11:22ID:???昔ム板のPerlスレで似たようなお題が出たのを思い出した。
Perlについての質問箱 21箱目
ttp://pc8.2ch.net/test/read.cgi/tech/1134327348/478-
ミラー
ttp://makimo.to/2ch/pc8_tech/1134/1134327348.html#478
で、こんなのが紹介されている。
ttp://search.cpan.org/~bowmanbs/Regexp-Genex-0.06/lib/Regexp/Genex.pm
読んで試してみたらどうも\d等の文字クラスが含まれていると、
ランダムにしか出てこないみたいだけど参考まで。
0618600
2006/07/17(月) 01:21:32ID:???FTPと似たようなことができるみたいなので
よく分からない状態で用いるのは、
セキュリティ上危険な気がしました。
ご忠告ありがとうございました。
0619nobodyさん
2006/07/17(月) 05:25:24ID:AcPhLonl0620nobodyさん
2006/07/17(月) 06:08:57ID:???0621nobodyさん
2006/07/17(月) 07:11:29ID:???mod_perlでも動かすのかな?
それより、local宣言だらけを心配した方がいいよ。
逆に、my宣言が全然ないとか。
0623nobodyさん
2006/07/17(月) 11:23:26ID:???> FTPと似たようなことができるみたいなので
> よく分からない状態で用いるのは、
> セキュリティ上危険な気がしました。
「FTPと似たようなこと」をやろうとしてるんじゃなかったのか。
にほんごってむずかしーね。
0624nobodyさん
2006/07/17(月) 12:15:35ID:???いう事に思い至らなかっただけでしょ。
0626nobodyさん
2006/07/17(月) 16:03:52ID:???http?
0627nobodyさん
2006/07/17(月) 16:31:38ID:???1.8014398509482e+016
ってなるけど実数表示させるにはどうすりゃいいのん?
0631nobodyさん
2006/07/17(月) 17:13:50ID:???perldoc bigint を見れば分かるけど、
> "bigint" is just a thin wrapper around various modules of the Math::BigInt family.
0633nobodyさん
2006/07/17(月) 22:53:09ID:???0634nobodyさん
2006/07/17(月) 22:57:20ID:???消防はもう寝な
0638nobodyさん
2006/07/17(月) 23:21:32ID:???0640nobodyさん
2006/07/17(月) 23:43:04ID:???18014398509481984
こうですか? わかりません><
0641nobodyさん
2006/07/17(月) 23:45:16ID:???0642nobodyさん
2006/07/18(火) 00:11:32ID:???user@localhost:~$ perl -Mbigint -e 'print 64**9, "\n"'
18014398509481984
user@localhost:~$ perl -v | grep v5
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
0643nobodyさん
2006/07/18(火) 00:24:40ID:DXYFSpfLこのような表記は許されるのでしょうか?
1)$TEST[100]に代入されている文字列を表示させたい
2)$TEST[***]<-ここに$A[1]を入れたい
$A[1]=100;
$TEST[100]='TEST';
print $TEST[ $A[1] ];
やはり・・・
$A[1]=100;
$TEST[100]='TEST';
$B=$A[1];
print $TEST[$B];
なのかなあ
0645643
2006/07/18(火) 00:46:23ID:DXYFSpfLソース記述が途中で間違っていたのかも知れなかったです。
この表記がまちがっていると思い込んで2時間位悩んでいましたm(_ _)m
0646nobodyさん
2006/07/18(火) 00:52:26ID:???0647nobodyさん
2006/07/18(火) 01:00:06ID:???0648nobodyさん
2006/07/18(火) 02:34:41ID:???5.8.4 だけど、use bigint で 18014398509481984 って結果でたよ
>643
大文字は定数で使われるのがほとんどなので、変数は小文字でどぞ。
0649nobodyさん
2006/07/18(火) 03:41:25ID:???1.(2/3)*(2/3) の解を 4/9 にするにはどうすればいいですか?
2.次に1.の解を 1/2.25 (分子を1)にするにはどうすればよいですか?
0650nobodyさん
2006/07/18(火) 03:50:18ID:RAKThs0C$ENV{'HTTP_COOKIE'}で何も取得できません!
作成直後ではなくて、ブラウザでリクエストを再送しても取得できません。
どんな原因が考えられましょうか!
0651nobodyさん
2006/07/18(火) 04:54:13ID:???>>628と同様に、bigrat or Math::BigRatでどうよ。
2はライブラリ任せにしないで、算数的に出力時にdenominatorをnumeratorで割れば?
0652nobodyさん
2006/07/18(火) 05:24:58ID:???use bigrat;
$a = (2/3)*(7/57);
print $a,"\n";
printf( "1/%f",1/$a);
%fのところはうまくいじらないと思い通りの出力にならないかも?
つーか7/8を1/xと表示したいときxは何になってほしいのか・・・?
0653nobodyさん
2006/07/18(火) 05:35:52ID:???$ENV{'HTTP_COOKIE'}で何も取得できなくて、
いったい何で”保存されてるのを確認した”のか、教えてください。
パッと思いつく原因としてはクッキーを出してるスクリプト
と受け取ってるスクリプトがあるディレクトリが別になってるとか?
どうやってクッキーを発行して、どうやって受け取ろうとしてるのか、
もっと詳細に報告してください。
0654650
2006/07/18(火) 09:21:50ID:???スクリプトはいっしょで、読み書きするスクリプトをリロードして確認したり、
読みと書きでパラメータを分けて行き来したりしています。
Set-Cookie: session=test;expires=;\n
と書いてます。index.cgi?a=1で書いてindex.cgi?a=2で読んでいます。
宜しくお願いします!
0655nobodyさん
2006/07/18(火) 09:28:15ID:???現在作ってるスクリプトで設定内容などは
$config = {
'test' => "テスト"
}
sub get{
my $pkg = shift;
my $hash = $config;
bless $config, $pkg;
}
my($cfg) = config->get();
print $cfg->{test};
この用にして設定内容を取得してます。
そして今回、$config の中に配列へのリファレンスを含めるようになり
@urls = (ずらずら〜っと);
と URL が書かれた配列へのリファレンスを
$config = {
'urls' => \@urls,
}
として $config へ設定しました。
この際に $cfg で値を取得する書き方としては
@{$cfg->{'urls'}}
で正解なのでしょうか?
もっときれいな書き方や 「こっちのほうが解釈としては正解じゃね?」 みたいな
書き方があれば教えていただければ幸いです。
0657nobodyさん
2006/07/18(火) 10:19:23ID:???0658nobodyさん
2006/07/18(火) 10:26:39ID:???perlのoopの使い方がどうみてもむちゃくちゃなので勉強しなおしてください。
変な癖をつけると後で苦労するよ。
0659nobodyさん
2006/07/18(火) 10:32:26ID:???OOPをやりたいなら
package Config;
sub get{
my $pkg = shift;
my $hash = shift;
bless $hash, $pkg;
}
.....(いろんなメソッド)
package main;
my $cfg = Config->get({'urls'=>\@urls})
そのままだと、sub getが意味ない
>>658
perl oopのいい入門て見たことない希ガス・・・
0660nobodyさん
2006/07/18(火) 10:35:44ID:???この書きかたでいこうかと思います
>657
以前このスレだかどこかで KENT の様に設定用変数を数多く
用意するのは綺麗じゃないみたいなことがあったときに、
私が
config.pl
%config=('test'=>2);
sub getconfig{return %config;}
my %config=&getconfig();
ってやってるって書いたら効率悪いって言われたもんで、
ちょっと書き直してたらこうなった次第です。
0661nobodyさん
2006/07/18(火) 10:35:45ID:???0662nobodyさん
2006/07/18(火) 10:43:45ID:???関数コールするよりもオーバーヘッドは少ないかなって思ったので。
数回から数十回のコールでオーバーヘッドを気にするのは無駄
とは分かってはいたんですがやっぱりスマートな書きかたではなかったですか(-_-;
0663nobodyさん
2006/07/18(火) 10:46:41ID:???0664nobodyさん
2006/07/18(火) 10:52:28ID:???print "content-type: text/html\n";
print "Set-Cookie: session=test\n";
print "\n";
print $ENV{HTTP_COOKIE};
とりあえずうちの環境だと、これを2回読み込むと画面にsession=test
と出るので、それでだめだったら環境がおかしい
0665nobodyさん
2006/07/18(火) 12:38:15ID:???Set-cookie:〜\nContent-type:〜\n\nってなってたのをクッキーとContent-typeの順番を入れ替えただけで
行けたっぽいです。書き込み時がおかしかったようです。
ネットで順番はどっちでもいいようなことを見たし、実際クッキーらしきものが書かれていたのでこれでいいのかと
思ってました。ざっと試しただけですが、これから詳しいことを検証したいと思います。
あと、バグ入りクッキーは本当にクライアント環境によって挙動が違いました。(会社では場合によって読めた)
0666nobodyさん
2006/07/18(火) 13:25:28ID:???となっていたに1票
0667nobodyさん
2006/07/18(火) 14:04:40ID:???ていうか、ただのハッシュとして使うだけなら
なんでオブジェクトにするのか全く不明。
それなら単純にハッシュを宣言して、読み込むだけの方が良い。
0669nobodyさん
2006/07/18(火) 14:43:02ID:???それでも、やはり順序不問ってことは、どっかでケアレスミスしたかもしれません。今夜再検証してみます。
0670nobodyさん
2006/07/18(火) 15:15:34ID:???外部ファイルにhashで設定を書いてrequireすると、
同じ内容の変数が2つ存在することになって無駄があるので
オブジェクトにした次第です。
0671nobodyさん
2006/07/18(火) 15:24:45ID:???その考え方が間違ってる。そんなことでオブジェクトにしちゃいけない。
だったらまだ、>>660 にある最初の書き方の方が、考えがマトモ。
同じ内容の変数が2つになるのが嫌なら、
外部ファイルの変数を別のハッシュに代入せずに、そのまま使えば良いだけの事。
0672nobodyさん
2006/07/18(火) 15:28:41ID:???書くにはどうしたら良いんでしょうか?
単純に
if($data !=~ /MOJI/)
という書き方では反映されないみたいなんですが。
0673nobodyさん
2006/07/18(火) 15:31:12ID:???0674nobodyさん
2006/07/18(火) 15:31:47ID:S5V5gxsh「○○かつ△△」を文字列で扱う方法はやはりないのでしょうか?
$type1 = 'BAKA';
$type2 = 'KASU';
if ( $type1 eq 'BAKA' and $type2 eq 'KASU')
みたいにするには数値をそれぞれ代入してからやるべきなのでしょうか?
0676nobodyさん
2006/07/18(火) 15:38:45ID:???0677672
2006/07/18(火) 15:39:57ID:???if($data =!~ /MOJI/)
と書いてみましたがエラーが出て動かないです。
どこが間違っているんでしょうか?
>>674
単純に
if ( ( $type1 eq 'BAKA' ) && ( $type2 eq 'KASU' ) )
で良いじゃないでしょうか。
0678nobodyさん
2006/07/18(火) 15:42:18ID:???0680nobodyさん
2006/07/18(火) 15:47:11ID:S5V5gxsh数値比較では && や and を使えますが
文字列でも同じように && や and を使っていいのかどうかということです
0681nobodyさん
2006/07/18(火) 15:47:29ID:???最近の質問見てるとネットだけで独学の人が多いような気がする。
0684nobodyさん
2006/07/18(火) 16:01:37ID:???0685nobodyさん
2006/07/18(火) 17:42:03ID:???その都度デリファレンスするのって、見た目が余り綺麗じゃないからその案は
以前考えてるときに却下しました。
0686nobodyさん
2006/07/18(火) 17:51:43ID:???誰がデリファレンスしろと…。
>>675 が言ってるのは、
外部ファイルで %config を定義して、return ¥%config; でリファレンスを返せば
同じハッシュが2つにならないということでしょう。
使う時は $cfg->{'hoge'} みたいなので良いんだし。デリファレンス要らない。
0687nobodyさん
2006/07/18(火) 18:24:24ID:???「とりあえず外部PL(PM)ファイルに設定をずらずらして require」 じゃなくて、
普通の(TXT)ファイルとかにCSVとかTSVみたいな感じで設定を書いて、
my $cfg1 = Config->new('config1.txt');
my $cfg2 = Config->new('config2.txt');
みたいな感じで設定取ってくるもんじゃないの?
>>655みたいに値を得たいときは my @url = $cfg1->get('url'); とかしてさ。
そうじゃないならOOPの意味もないな、って思うんだけどw
0688nobodyさん
2006/07/18(火) 18:29:25ID:???0689nobodyさん
2006/07/18(火) 18:54:51ID:9xyhckKLページの更新をムダに頻繁にするのはいやなので30秒設定にしています。
要はチャットなのですが。
試験的に稼動してるのですが、相手にメッセージが届く前に相手が帰ってしまうようです。
そこで思ったのですが、こちらが書き込みをしたら即座に相手のブラウザに更新命令を
出すといったようなことはPerlCGIでは実現できませんでしょうか?
そんなことできたら怖すぎるかな?とも思いましたがやはりそんな危ない技術は正攻法では不可能ですかね?
ハッキング状態になっちゃいます?
アドバイスお願いします。
0691nobodyさん
2006/07/18(火) 19:18:16ID:???>こちらが書き込みをしたら即座に相手のブラウザに更新命令を
>出すといったようなことはPerlCGIでは実現できませんでしょうか?
できるわけないだろ。
そんな凶悪なセキュリティホールが空いてたらすぐに緊急のパッチが出るわ。
要は、最初のアクセスのときだけ3秒ぐらいでリロードして
その自動メッセージとやらを表示させて、
2回目以降は通常の30秒リロードにすれば良いんじゃないの?
0692nobodyさん
2006/07/18(火) 19:45:12ID:???共有サーバでやるとヌッ殺される。
0693nobodyさん
2006/07/18(火) 19:45:35ID:???あぁなるほど。
ファイルの最後で1;ってやるところで返すのはやらないほうがいいですか?
(出来るかどうか知らないけど)
>687
iniファイルのような設定ファイルは記述ミスに対するコーディングが生じるので考えてませんでした
勉強も兼ねて初めてパッケージ(もどき)を考えてみたけど、使いどころとか、使い方とか難しいですね
0694nobodyさん
2006/07/18(火) 19:49:14ID:???つーか値を得たいときは$self->{'config'}->{'value'}
もしくは$selfをconfig hashそのものにして、$self->{'value'}。
そもそも関数で値を”とってくる”という発想自体が間違ってる。(OOPなら
0695nobodyさん
2006/07/18(火) 19:52:09ID:qN74jZ6Aprint $count;
-------------------------------
↑のような構文を打ったところ
(SQLで返される数字が出力されるようにしたつもり)
print $countが↓のように出力されてしまいます。
-------------------------------
DBI::st=HASH(1234abcd)
-------------------------------
正しく数字が返されるようにするにはどのようにしたらよいでしょうか?
0696nobodyさん
2006/07/18(火) 19:55:35ID:???0698nobodyさん
2006/07/18(火) 20:04:32ID:???0700nobodyさん
2006/07/18(火) 20:06:25ID:???0701nobodyさん
2006/07/18(火) 20:10:22ID:???0702695
2006/07/18(火) 20:11:15ID:qN74jZ6Amy $count = $db->prepare("select count(*) from hoge where hogehoge = 1");
$count->execute;
print $count;
-------------------------------
↑のような構文を打ったところ
(SQLで返される数字が出力されるようにしたつもり)
print $countが↓のように出力されてしまいます。
-------------------------------
DBI::st=HASH(1234abcd)
-------------------------------
正しく数字が返されるようにするにはどのようにしたらよいでしょうか?
0703nobodyさん
2006/07/18(火) 20:13:37ID:???0704nobodyさん
2006/07/18(火) 20:15:42ID:???0705695
2006/07/18(火) 20:32:22ID:qN74jZ6Aありがとう
0706nobodyさん
2006/07/19(水) 00:26:20ID:aJ2dkknB$a = 31536001
に対して年$year 月$manth 日$day 時$hour 分$minute 秒$second
を求めるには地道に
$year = $a - 3153600;
とした方がいいのでしょうか?
それとももっと簡単な方法がありますか?
よろしくお願いします
0707nobodyさん
2006/07/19(水) 00:32:18ID:???0708706
2006/07/19(水) 00:35:08ID:aJ2dkknBあああ、すいません
ミスってました
31536001は31536001秒ということです
秒、(繰り上がるならそれぞれ)分、時間、日、月、年を求める方法があるのかどうかです
0709nobodyさん
2006/07/19(水) 00:38:52ID:???>>708
日数までは良いとしてだ。
一月の長さは同じじゃないわけだが、そこのところどうやって計算する気よ
0710nobodyさん
2006/07/19(水) 00:41:06ID:???$a = 31536000; # ← 3600*24*365
で、$a = 86401 なら 暦とか関係なく 1日と1秒 って経過時間だしたいってことね。
じゃあ単に
my @dates = gmtime($a);
とかやればいいんじゃねのw
0711706
2006/07/19(水) 01:03:53ID:aJ2dkknB年は365、日は30にするつもりです
>>710
そうです
ちょっと
my @dates = gmtime($a);
やってみます
0712706
2006/07/19(水) 01:08:22ID:aJ2dkknB51101071500
になります
0713706
2006/07/19(水) 01:25:12ID:aJ2dkknBちゃんと>>711でできました
ただ気になるのがある時点での時間を求めるので
月の表示がうまくいきません
$a = 61;
の場合は1分と1秒なのでそのまま0月カウントになりおkなんですが
11月の次が12月を飛んでしまいます
かといって$mon+1;をすると$a=61;のときに1月1分1秒になっていまいます
これは仕様でしょうか?
0714nobodyさん
2006/07/19(水) 01:51:28ID:???まず小学校まともに卒業してカレンダーと時計の見方を身につけろよ。
0715nobodyさん
2006/07/19(水) 02:04:47ID:???$mon は "11月" じゃなくて "11ヶ月目" なんだろ? +1する必要なんてない。
まあ $day を -1 してる (らしい) のはよかったと思うよw
0716706
2006/07/19(水) 02:12:29ID:aJ2dkknBなんかおかしいな〜と思ってずっとカレンダー見てました
ようやく謎が解けましたw
ありがとうございます
ただ>>711のようにすると100年を超えると解がヌルになるようです
$a = 31536000000;
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime($a);
$year = $year-70;
$mday = $mday-1;
print $year."年".$mon."月".$mday."日".$hour."時".$min."分".$sec."秒";
ヌルにしないためにはどうすればいいっすか?
0717nobodyさん
2006/07/19(水) 02:19:09ID:WORWfBlMこの際、ファイル名にタイムスタンプがついて1153238735__photo.jpgというようになりますが、
この「__photo」の部分を取って「1153238735.jpg」にする方法は無いでしょうか?
Content-dispositionのヘッダを使えばいいらしいですが具体的な方法が解りません。
よろしくお願いします。
0718nobodyさん
2006/07/19(水) 02:20:38ID:???▽2038年問題
http://ja.wikipedia.org/wiki/2038%E5%B9%B4%E5%95%8F%E9%A1%8C
まあ、そんな気になるなら一定の年数分の時間を最初に引いておけば?
0720706
2006/07/19(水) 02:33:21ID:aJ2dkknBわかりました
0721nobodyさん
2006/07/19(水) 13:05:06ID:???SSIをmod-perlで動かすにはどうしたらいいんでしょう?
CGIからmod-perl移行時にindexページはindex.html(SSI)からindex.cgiになるように設定したんですが、
GoogleのページランクとかもあるのでSSIを使いたいんですが、、
mod-perlに移行したらSSIが全く効いていないんです(-o-;
呼び出すperlがindex.plだとしたら、それ単体では問題なく実行されるんですが。。
0722nobodyさん
2006/07/19(水) 13:13:26ID:???http://www.google.co.jp/search?hl=ja&q=perl+SSI+mod_perl&lr=lang_ja
0724nobodyさん
2006/07/19(水) 19:58:46ID:???gmtimeとかって普通に現在時刻+αぐらいを扱うためのものだから、
100ねんとか、それ以上のことやろうとしてるんだったら、
自分でなんか作ったほうがいいと思う・・・
0725nobodyさん
2006/07/19(水) 20:00:25ID:???0726nobodyさん
2006/07/19(水) 20:03:34ID:+wpVYCo5$ENV{"HTTP_USER_AGENT"}
この中の文字列を正規表現とか掛ければいいのでしょうか?
$ENV{"HTTP_USER_AGENT"} =~ /internet explorer/i;
で大丈夫でしょうか?自分はIE6ですので他のバージョン確認できませんので宜しくお願いします
0727726
2006/07/19(水) 20:05:37ID:+wpVYCo5$ENV{"HTTP_USER_AGENT"} =~ /IE/;
これでいいのでしょうか?ちなみにOSは虫です。
0728nobodyさん
2006/07/19(水) 20:17:07ID:???自分のPCなら火狐とかモジラとかオペラとかインストールして
実験すれば?
あとは、自分のページの中で一番アクセスのあるページでユーザエージェントを記録して、
どういうブラウザのアクセスがあるか観察して判断
0729571
2006/07/19(水) 20:40:38ID:+wpVYCo5この雰囲気からすると、そんな簡単なIEとそれ以外の判別方法は存在しないということでしょうか。
確かに今後IEという文字が入るIE以外のブラウザが出る可能性もありまよもんね。
なかなか制作側には不便な環境なんですね。
レスありがとうございました。
もう少しだけ粘ってみます・
0730nobodyさん
2006/07/19(水) 20:47:29ID:???今のところ、User-Agentに"MSIE"が含まれる一般的なブラウザはIEだけ。
0731571
2006/07/19(水) 20:48:27ID:+wpVYCo5これで行こうと思います。
728さんもよければ参考にしてください。
それでは失礼します。
0732571
2006/07/19(水) 20:50:23ID:+wpVYCo5どうやらOperaが危ないようです。
$ENV{"HTTP_USER_AGENT"} =~ /MSIE/ and $ENV{"HTTP_USER_AGENT"} !~ /Opera/;
これで90%程度はいけるのではないかと思いますが。
0733nobodyさん
2006/07/19(水) 21:00:22ID:PWLYocjqUse of uninitialized value in substitution (s///)
というエラーが出ました。例えば下記の場合、@_が問題っぽいんですが、
どのように直したらいいでしょうか。
sub reformat_date {
my %args = (date => '', @_);
my $tmp = $args{'date'};
$tmp =~ s/(\d\d\d\d)(\d\d)(\d\d)/$1-$2-$3 00:00:00/;
return $tmp;
}
0734nobodyさん
2006/07/19(水) 21:04:25ID:???0736nobodyさん
2006/07/19(水) 21:21:25ID:???してるものと仮定して。
my %args = (date => $_[0] );
つかこれだけだったら、%args てまったくの無駄なんだけど…
で、入力は何?
0737nobodyさん
2006/07/19(水) 21:22:42ID:???ブラウザの「戻る」を押すと、入力フォームにデータが残ってる状態です。
二重のpostを防ぐために、postした後、戻るを押すと、
「ページの期限切れ〜」みたいな表示にする方法は無いんでしょうか?
0738nobodyさん
2006/07/19(水) 21:23:48ID:???0740733
2006/07/19(水) 21:34:01ID:???こういうシンプルなのも%argsになってます。736さんのように変更してもだめでした。
ていうか、全く同じ関数をテスト用のシンプルなコードに書いたら
エラーがでませんでした。-wは呼び出し元との兼ね合いでもエラー出すんでしょうか。
0741nobodyさん
2006/07/19(水) 21:36:59ID:???reformat_date( date => $hoge )
とかやってて、$hoge が未定義(undef) なんじゃないの?
$tmp =~ s/(\d\d\d\d)(\d\d)(\d\d)/$1-$2-$3 00:00:00/ if (defined $tmp);
とかにしてみればどうよ
0742733
2006/07/19(水) 21:37:48ID:???0743733
2006/07/19(水) 21:43:08ID:???呼び出し側が場合によって未定義のときがあったのが原因でした。
てっきり、字面だけでデバッグされているのかと勘違いしてましたので
呼び出し側をチェックしてませんでした。
ありがとうございました!
0745nobodyさん
2006/07/19(水) 22:22:19ID:???pragma no-cacheあたりで検索
まあ、そういう仕様の板が便利かどうかは微妙な気もするけど、
むしろ、パスワードで削除機能とかの方がエレガントなような・・・?(作るのはめんどくさいけど
0747nobodyさん
2006/07/20(木) 00:14:49ID:???print "pragma:no-cache\n\n";
とかこういうこと?それともパスワード機能の実装の仕方自体語れってこと?
後者だったら拒否w
0748nobodyさん
2006/07/20(木) 00:42:07ID:EXDq6RmQsub main{
local @tmp = ("aa","bb");
print "$tmp[0]"." "."$tmp[1]\n";
&subroutine(\@tmp);
print "$tmp[0]"." "."$tmp[1]\n";
}
sub subroutine{
local $tmp = @_[0];
$tmp = ("cc","dd");####################################
print "$tmp->[0]"." "."$tmp->[1]\n";
}
というコードを書きました。
しかし#############の行でエラーになってしまいます。
要するにmainルーチンから@tmpのポインタを送ってサブルーチン側では@tmpに("cc","dd")を代入したいのです。
サブルーチンで
$tmp->[0] = "cc";
$tmp->[1] = "dd";
とやれば済むのですが、こうではなくて = ("cc","dd")という風に代入したいのです。(実際はsplitとかを使って代入するから)ポインタを使ってどういう風にしたらよいかわかりません。ご教授おねがいします。
0749nobodyさん
2006/07/20(木) 00:48:05ID:???@{ $_[0] } = ("cc", "dd");
}
こういう事?
他の部分に関してはつっこんだら負けかなと思っている
0750748
2006/07/20(木) 00:50:00ID:EXDq6RmQ即レスありがとうございます。
そのようにやったらできました、ありがとうございました!
0754nobodyさん
2006/07/20(木) 09:22:01ID:???0755nobodyさん
2006/07/20(木) 09:42:37ID:???0756nobodyさん
2006/07/20(木) 11:10:49ID:OwGfxrortest.cgiが呼ばれたときにtest.cgiの中で、まず初めにaccess.cgiを起動実行させてから
test.cgiの本処理に映りたいのですがさすがに無理でしょうか?
access.cgiはgif画像を一つ返してくるだけです。
0757756
2006/07/20(木) 11:37:22ID:OwGfxroruse LWP::UserAgent;
my $ua = new LWP::UserAgent;
$ua->agent('AgentName/0.1'.$ua->agent);
# リクエストを作成
my $req = new HTTP::Request(POST => 'http://hoge.com/access.cgi');
$req->content_type('application/x-www-form-urlencoded');
$req->content("id=get");
# ユーザ・エージェントにリクエストを渡し、返されたレスポンスを取得
my $res = $ua->request($req);
# print $res->is_success;
昔作ったCGIから拾ってイジッテいちおうこれで呼び出しはできたのですが、
access.cgiに自分のとは違うIPが記録されてしまうようです。
アクセス管理CGIの都合上できればIPが別のものになってほしくないんです。
また、できればネット経由でない方法で呼び出せればと思ったのですが。
cron使用の呼び出しと同じような感じができて、さらにIPが自分のものか127.0.01とかなら最高なんですが。
どうぞ玄人の方お助け宜しくお願いします。
0758nobodyさん
2006/07/20(木) 11:47:34ID:???0759nobodyさん
2006/07/20(木) 12:01:19ID:WCdGbBzjところが、openでエラーになります。
majordomoのファイルが
オーナー:mail
グループ:deamon
属性:777
なのが原因だと思うのですが、このファイルを上記条件から書き換えるようにするには、cgiのプログラム
からどのようにしたら良いでしょうか?
0760nobodyさん
2006/07/20(木) 12:12:22ID:???$!の値も示せよ。
0761756
2006/07/20(木) 12:13:08ID:OwGfxror0762nobodyさん
2006/07/20(木) 12:16:44ID:???その理屈ならYAHOOは死刑になっちゃいそうな勢いだな。
あんな有名なサイトが無許可で他人のサイトのアドレスを晒しまくって。
とりあえず削除申請してこいよ。
0763756
2006/07/20(木) 12:24:17ID:OwGfxror荒れるから止めて欲しいのですm(__)m
私あてのレスです。
本人である私がスルーしてるのですから、察してくださいませんか。
宜しくお願いします。
0764nobodyさん
2006/07/20(木) 12:35:40ID:???system('perl access.cgi');とか?
というか、そのaccess.cgiの返してくる画像は必要なんですか?
画像だけが、必要なら<img src="access.cgi">とか?
でも、そのくらい知ってそうっていう雰囲気ですよね・・・・・・・・
なんだろう・・・
0765756
2006/07/20(木) 12:46:10ID:OwGfxror言葉足らずだったかもしれません。ごめんなさい。
access.cgiはアクセスログを取っていくcgiなんです。
test.cgiは今仮で作ってるアクセス解析cgiなんです。
test.cgiからaccess.cgiを呼びたいのは最新の情報を読みたいからなんです。
つまりaccess.cgi直後のaccess.logが一番精度が高いわけです。
秒単位で誰がどこにいるかを表示してますので意外と重要なのです。
ですからaccess.cgiからの戻り値はまるでいりません。
要はaccess.cgiに処理をさせればいいだけなんです。
それこそ最悪access.cgiの中身をtest.cgiに書いて解決です。あまりにひどい決着ですが。
返してくるgif画像自体はまるでいりません。
長文すみません。ご飯を食べてまいります。
0766nobodyさん
2006/07/20(木) 13:09:01ID:???0767756
2006/07/20(木) 13:10:51ID:OwGfxrorexampleですね。ありがとうございます。
以後そういたします。
0768nobodyさん
2006/07/20(木) 13:13:04ID:???その前になぜかむかつくんだがなんでだぜ?
0769nobodyさん
2006/07/20(木) 13:20:02ID:???0770759
2006/07/20(木) 13:32:32ID:WCdGbBzj権限の問題だと思うのですが・・・どうすれば処理できるでしょうか?
0771756
2006/07/20(木) 13:32:50ID:OwGfxror呼び出したいがためだけにaccess.cgiに手を加えるのは避けたかったです。
他のケースのときでも全部そうなってしまうのは愚の骨頂みたいに思ってましたが
その認識が間違ってるのですかね。
ちょっとガッカリです。
0772nobodyさん
2006/07/20(木) 13:37:48ID:???0773nobodyさん
2006/07/20(木) 13:38:45ID:???ファイル自体が777なのでそれは問題ないと思うから経由するディレクトリだろうな。
どういう風にパス指定しているのかは知らないが関係するディレクトリを全部確認してみ。
0775nobodyさん
2006/07/20(木) 13:44:36ID:???へぇ。Operaは何がしたいんだろう・・・・
そもそも偽装するなよって話だよな。製作者への嫌がらせとしか思えない。
製作者協会とかあればなぁ。ふざけた実装を排除していけるのに。
>>768
まあまあ。今日はなかなかすごしやすい気温なんだからおっとりしようぜ
0777nobodyさん
2006/07/20(木) 13:48:44ID:???0778756
2006/07/20(木) 13:55:49ID:OwGfxrorいえ、それは勘違いですよ・・・(´・ω・`)
0779nobodyさん
2006/07/20(木) 13:58:35ID:???UAにIEを含んだらヤフにでも飛ばしたろとか思ったことあるはずだ
0780nobodyさん
2006/07/20(木) 14:05:54ID:???違うよ。
>>779
ん?なんか変だぞ?
そもそも「XHTML+CSSで凝ったサイト作ろうと」ってのがどうなんだろうか。
XHTMLやCSSは目的を果たすための一つの手段に過ぎないというのに、
その手段を目的としてるということは、何かを伝えたいんじゃなくて、使いたいだけという可能性もあるな。
それこそIEの挙動なんて無視すればいいじゃない。使いたいだけなんだから。
なんちゃって。人間がそれほど単純なら苦労はないよね。
やっぱり制作協会ってのがあればいいと思うんだよな。
0781nobodyさん
2006/07/20(木) 14:08:55ID:???0782nobodyさん
2006/07/20(木) 14:10:18ID:???access.logの内容はIPとかUAとか時刻とかがずらずら並んだ状態ですか?
もしそうだったら、別にいつ読み込んでも、新鮮とか新鮮じゃないとか
関係ない気がしますが・・・
それとも、なんか特殊な、フォーマットのデータがaccess.logには含まれてるんでしょうか?
0783759
2006/07/20(木) 14:11:14ID:WCdGbBzj/usr/local/majordomo/lists/ なので上位全ての777にするのは気がひけます。
listsだけは 777 にしみましたが、同じエラーでした。
linuxのfs設定で何かあるのでしょうかねぇ?
0784756
2006/07/20(木) 14:14:40ID:OwGfxrorありがとうございます。
ずらずら並んだ状態です。
アクセス時刻ももちろん並んでおります。アクセス時刻が一定を過ぎると削除し
リアルタイムで誰がどこにいるかをある程度特定するアクセスプログラムになっております。
ですので新鮮さは重要なのです。
でももう最悪の方法で片付けてしまいました。せっかくご親切に気に掛けていただいたのにすみませんです。
access.cgiの一部をそのままコピペしましたtest.cgiにorz
0786nobodyさん
2006/07/20(木) 14:19:19ID:???また同じこと繰り返すことになるぞ
0787nobodyさん
2006/07/20(木) 17:29:45ID:gqKAMnqO1)combbslog.cgiというファイルを一行読み込んで
$rl,$yl,$gl,$wl,$blにそれぞれの値を代入して
すべてが1より大きければ実行する。
プログラムを書いてみたつもりです。
ちなみにcombbslog.cgiの中身は
<>1<>3<>1<>1<>1<>
↑こんな感じです
2)open(IN,"combbslog.cgi") || &error("Open Error: combbslog.cgi");
local(@file) = <IN>;
close(IN);
local($rl,$yl,$gl,$wl,$bl) = split(/<>/);
if(($rl > 1) && ($gl >1) && ($yl > 1) && ($wl > 1)){実行したい内容;}
3)とくにエラーなどは出ないのですが条件を満たしていても実行されません。
ファイルを読み込む当たりが良くわかっていないのでそのあたりがおかしいのではないかと思っています。
どこかおかしいところがありましたら教えてください。
0788nobodyさん
2006/07/20(木) 17:38:15ID:???とりあえず
print $rl,$yl,$gl,$wl,$bl;
してみろ
0789nobodyさん
2006/07/20(木) 17:44:06ID:???if文の所。
>
の演算子の意味はわかってるよね?1には反応しないよそれじゃあ。2からだな
だからファイルの中身が全部2以上なら実行されるだろうね。
0790nobodyさん
2006/07/20(木) 17:48:57ID:???$rlの値がいつも空になると思うよ。
split(/<>/) だと
$rl<>$yl<>$gl<>$wl<>$bl<> こうでしょ。
>>788
> データファイルに*.cgiという拡張子をつけるのはおかしい。
( ´_ゝ`)・・・
>>789
すべてが1より大きければ実行する。ってことだからいいんじゃないの
0792787
2006/07/20(木) 18:00:12ID:???とりあえず全部2以上にしてみて
あと$rl<>$yl<>$gl<>$wl<>$bl<>にしてみますね
0793787
2006/07/20(木) 18:13:32ID:gqKAMnqO上記のことをやってみましたが出来ませんでした・・・
ためしに
print $rl,$yl,$gl,$wl,$bl;
しても何も表示されなかったのでどこか他のところがおかしいのかな?
以下にプログラム全文載せますので、もしよろしかったらまたお願いします。
-selectcol.cgi-
#!/usr/bin/perl --
open(IN,"combbslog.cgi") || &error("Open Error: combbslog.cgi");
local(@file) = <IN>;
close(IN);
local($no,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$tim,$rl,$yl,$gl,$wl,$bl) = split(/<>/);
print $rl,$yl,$gl,$wl,$bl;
__END__
-combbslog.cgi-
1<>2006/07/20(Thu) 00:06<>blackh.gif<><><>北朝鮮がミサイルを発射することで国際社会からより疎外されている<><>127.0.0.1<><>1153321603<>2<>2<>2<>2<>2<>
0794nobodyさん
2006/07/20(木) 18:17:11ID:???.r‐――'i / > _ ,ノ~';;. .....,,、 l´゙|゛ |´゙l゙ ,,,,,,,...... --、,
. ̄ ゙̄} | / ./ .;;./ '、 / ,./ ,! ./____| |__________、 ,,............-! !ー'''"゙.l .ヽ --‐= /
.r‐―" |'l゙_,,, ̄'i --、'ッ / / ./ ...........、 ,,................,! ゙‐'ー''''''''''、 '.l゙´_,,,, 、 /./
l |゙゙゙゙"'".._.... ! .|........ニ / / / / || .l'''''''''''''''''''_.゛,,.... --′ ./ .イ-―ー 、
! .―--ィ .! .r‐''i .r‐‐i ! ..l ヽ. ゙'/l'''''''''''''′゙'''''''''''''''i `゙゙゙゙゙゙´゙_,゙,゙,,,,゙;;..\, ./ ,..-''''^゙゙゙゙゙''''、 ヽ
.゙‐'"^゙| ! .| .゙‐'''" !―" | \ .\. `゙゙゙゙゙゙゙゙゙| .!゙゙゙゙゙゙゙゙゙´ ,r'",, ---- ..,,/ < / .| |
.| ! .゙‐'゙゙゙゙゙! .!゙゙.l゙'│ .\. ゙'-, ,! ! ! l゙ ゛ ._./ ./
.,,,,,,,ノ !.r‐―ー" ゙''二、ヽ .\ .゙> .!^^^^^^^^^゛ `^^^^^^^^.! .\`'''''''''''''''''''''> 'l'''''''''^゙゙_,,..-'゛
.ゝ--‐゛ ゙‐''"゙ ̄´゛ `'´ ` . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄゛ `゙゙''''''''''''''''"  ̄ ̄゛
0795nobodyさん
2006/07/20(木) 18:19:15ID:???local(@file) = <IN>;
ぢゃなくて
@_ = <IN>;
なら動くんで内科医?
0796nobodyさん
2006/07/20(木) 18:19:15ID:???あえてソコだったんだがただのかわいそうな人になってしまったw
0798787
2006/07/20(木) 18:25:43ID:gqKAMnqO>>795さんのいうとおりにしたら
error500
CGIエラー-Content-Typeヘッダが正しくありません。
とでてしまいました。これはどういうことでしょうか?
0799nobodyさん
2006/07/20(木) 18:25:51ID:???おかしいと思う理由が知りたいんだが
0800nobodyさん
2006/07/20(木) 18:27:34ID:???0801nobodyさん
2006/07/20(木) 18:29:28ID:???っつーかもう触れないでくれw
どおりで俺の冗談には誰も笑わないわけだ
0803nobodyさん
2006/07/20(木) 18:32:45ID:???> close(IN);
> local($no,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$tim,$rl,$yl,$gl,$wl,$bl) = split(/<>/);
$_ に何入ってんだよwww
foreach (@file) {
local($no,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$tim,$rl,$yl,$gl,$wl,$bl) = split(/<>/);
・・・
}
こうしたいんじゃねえのかい?
0804nobodyさん
2006/07/20(木) 18:33:56ID:???0805nobodyさん
2006/07/20(木) 18:34:18ID:???print "Content-type: text/html\n\n";
を出力の前に入れないと駄目でしょ。
それと>>793が全文だとすると、sub error はいずこへ
0807nobodyさん
2006/07/20(木) 18:35:31ID:???ブラウザでやってんの?
なら
つ【print "Content-type: text/html;\n\n"】
0808nobodyさん
NGNG0809787
2006/07/20(木) 18:41:17ID:gqKAMnqOパーミッションの設定はまだ関係ないですよね。
0810787
2006/07/20(木) 18:44:23ID:gqKAMnqO>>803さんや>>805さんのとおりにしてみたらエラーは出なくなりました。
ただ何も出力されてきません。
0811nobodyさん
2006/07/20(木) 18:48:34ID:???とりあえず
open(IN,"combbslog.cgi") || &error("Open Error: combbslog.cgi");
print <IN>;
close(IN);
とかからやってみたら。
あと無意味に local 使ってるのが kentくさくてイヤ。
0812787
2006/07/20(木) 18:51:54ID:???はい、デバックは自分で頑張ってみますね。
Kentさんのところをすごく参考にしていたのでそうなってしまいました。
0813787
2006/07/20(木) 18:55:45ID:gqKAMnqOファイルを読み込むとき
最初の一行だけを読み込むとか出来ますか?
0814789
2006/07/20(木) 18:57:06ID:???まあ雨がひどいからな。
0815nobodyさん
2006/07/20(木) 18:58:03ID:???$data = <IN>;
close(IN);
0817787
2006/07/20(木) 19:02:37ID:???雨の日でよかったです。
0818787
2006/07/20(木) 19:18:46ID:???本当にありがとうございました。
花火大会を中止に追い込んだにっくき雨でしたが、
いまでは感謝しています
0819nobodyさん
2006/07/20(木) 19:47:26ID:???0821nobodyさん
2006/07/20(木) 20:18:14ID:???0822nobodyさん
2006/07/20(木) 23:14:01ID:???IE7って最高だな。
0823nobodyさん
2006/07/20(木) 23:25:57ID:???0824nobodyさん
2006/07/20(木) 23:27:54ID:???0825nobodyさん
2006/07/20(木) 23:55:28ID:???0826nobodyさん
2006/07/21(金) 01:52:13ID:VvqLR3Fu例えば、「この文字列はindex.cgiの563行目で出力されました」と動的に出力できますか?
0827nobodyさん
2006/07/21(金) 01:53:59ID:???0828nobodyさん
2006/07/21(金) 01:56:42ID:???1: 自分は明日休みで暇だから・・・
2: なんかおまいらにコーディングの問題でも出して・・・
3: みようかな・・・
問題
・DATログをGrepして表示する
・検索語は任意の文字
・表示方法は100個づつ
最速コーディング達成者には妹の入浴画像を賞品(ry
0829nobodyさん
2006/07/21(金) 02:00:29ID:???おお!感動しました。そんな簡単にできたんですね。
エラー処理関数内でdieしたらデバッグの役に立たない行数がログに残るので
その対策をと考えておりました。ありがとうございます!
0831830
2006/07/21(金) 02:20:35ID:???呼び出し元の行をログに書きたいならcaller関数をあたると良い。後Carpモジュールも
0832nobodyさん
2006/07/21(金) 02:24:01ID:???丁度、callerを発見して感動して、その報告をしに来たところでした。
ありがとうございます!
0833nobodyさん
2006/07/21(金) 03:50:54ID:???0834nobodyさん
2006/07/21(金) 10:04:09ID:???注文こねえかな
0835nobodyさん
2006/07/21(金) 10:25:40ID:???チェックされた項目は別ファイルに時刻付きで書き出すつもりでした。
2. ttp://marco.s4.xrea.com/cgi-bin/check/check.cgi
を元にいろいろ変えて見てます。
3.入力フォームからpostでデータを渡して、表示上はどのチェックボックスもオンではないのに、
ブラウザをリロードすると、前にチェックされたデータが再度チェックされてます。
これは、どうしてでしょうか?
初心者で、不具合をうまく言えなくてごめんなさい。またこちらでの書き込みが不適切でしたら、該当スレをご教示いただければ有りがたく存じます。
下記は、ソースの一部分です。
print "<form action=$script method=post>\n";
print "<tr><td bgcolor=$page_color><font color=$bg_color>Check</font></td>\n";
print "<td bgcolor=$page_color><font color=$bg_color>項目</font></td></tr>\n";
open(LST,"$listfile");
@LIST=<LST>;
close(LST);
$cnt=0;
foreach (@LIST){
chomp($_); #chomp 行末の改行を削除
$cnt++;
print "<tr><td><input type=checkbox name=chk$cnt value=1";
print "></td><td><b>$_</b></td></tr>\n";
}
print "</table>\n";
print "<input type=hidden name=checkcnt value=$cnt>\n";
print "<input type=submit value=送信>\n";
print "</form>\n";
0836nobodyさん
2006/07/21(金) 10:31:20ID:???http://pc8.2ch.net/test/read.cgi/php/1141174205/
0838nobodyさん
2006/07/21(金) 12:09:34ID:NKhAgGvd入力されたURLが正しいURLかを判断するソースはどのようになるのでしょうか?
メールアドレスを判断するスクリプトは何とか分かるのですが、
URLとなると・・・どのようにしたらよいか・・・・
0839nobodyさん
2006/07/21(金) 12:17:55ID:???ttp://www.din.or.jp/~ohzaki/perl.htm#httpURL
まあここまでやらなくてもいいと思うが
0841nobodyさん
2006/07/21(金) 12:25:52ID:???とよくバカにされるんですが、どうしたら良いでしょうか?
0842nobodyさん
2006/07/21(金) 12:30:03ID:???スレ違い、そしてその人は無知
ttp://www.kanzaki.com/docs/html/htminfo-uri.html#uri
ttp://www.alib.jp/html/uri.html
0843nobodyさん
2006/07/21(金) 12:31:22ID:???0844nobodyさん
2006/07/21(金) 12:59:56ID:???0845nobodyさん
2006/07/21(金) 15:15:48ID:???--ここから--
my $param = '123a456';
my $n = '';
for (;;) {
$param =~ s/[0-9]+//;
$n = defined($&) ? $& : '';
print 'debug $n='.$n.' $parm='.$param."\r\n";
last if ($n eq '') ;
}
print 'end';
--ここまで--
とりあえず for(;;0) のように第三パラメータになんでもいいから
突っ込めば $& が再評価されてループを抜けるのはわかったが、Bad
Know-How くさいので正しいコードを誰か教えて。
0846nobodyさん
2006/07/21(金) 15:33:56ID:bw5ViySCというのを正規表現で書くとどうなりますか?
0847nobodyさん
2006/07/21(金) 15:36:13ID:???こうやったけどこうなってできませんでした、とか
0848nobodyさん
2006/07/21(金) 15:39:23ID:???$&はThe string matched by the last successful pattern match なので
マッチしなくて置換が行われなかったときに値が変わるのを期待する方が
危険な気がする。s///は置換に成功したかどうかを返すのでそれで分岐
するのが筋じゃないかと。
forの第三パラメタがあったときに値が変わるほうがむしろ不思議だな。
どっちにしろ成功したパターンマッチのすぐ後以外のところでマッチ関係の
変数($<数字>とか$&とか)を使うのは怖いので自分ならしない。
0849846
2006/07/21(金) 15:49:32ID:bw5ViySC$moji =~ s/ / /g;
my ($temp undef) = split(/ /,$moji);
0850845
2006/07/21(金) 16:05:32ID:???サンクス
$& はマッチしなかった場合 undef になるというのをどっかで読んだんだが。
defined($&) の条件分岐はしないほうがいいてこと?でも for(;;0)のときには
ちゃんと評価されるのが謎なんだよな。
0851nobodyさん
2006/07/21(金) 16:08:33ID:???perl -MO=Deparse foo.plで for(;;) とfor(;;1)を比べてみたが、
for(;;)の方は単純に
while(1) { ... }
になるのに対して、for(;;1)の方は
while (1) { do { ... }; '???'; }
となってループ内の実行文がdo ブロックの中に入るかたちに
なっていた。このためfor(;;)の方では最後に成功したマッチが
456の置換になるのに対して、for(;;1)の方ではこのループに入る
前(一度もないのでundef)になるのだろうと思われる。
ちなみに、プログラムの先頭に 'hoge' =~ /.*/; を追加して
for(;;1)を試すと3回目からhogeになる。
0852845
2006/07/21(金) 16:35:45ID:???my $param = '123a456';
my $n = '';
while (1) {
last unless ($param =~ s/[0-9]+//);
$n = $&;
print 'debug $n='.$n.' $parm='.$param."\r\n";
}
print 'end';
0853nobodyさん
2006/07/21(金) 17:08:27ID:???my $param = '123a456';
my $n = '';
while ($param =~ s/[0-9]+//) {
$n = $&;
print 'debug $n='.$n.' $parm='.$param."\r\n";
}
print 'end';
0856nobodyさん
2006/07/21(金) 18:49:30ID:???s/\s.*//; かな? split を使うなら、第三引数に1がいいかも
>>853
my $param = '123a456';
while ($param =~ s/([0-9]+)//) {
print 'debug $n='.$1.' $parm='.$param."\r\n";
}
$& を使うと全体が遅くなるから、キャプチャした方が良くない?
0857nobodyさん
2006/07/21(金) 19:06:38ID:???0858nobodyさん
2006/07/21(金) 20:22:51ID:???余程凄いもん作るわけ?
俺はちょくちょく書き換えるから最適なコードなんて求めない。
早く仕上げることの方が面白いしね。
漫画みたいにズダダダダダーって物事を進めていくのが面白いんだよ。
っていうか画像サイズとかをかんぺきにするだけでじゅうぶんだそ。
0859nobodyさん
2006/07/21(金) 20:47:36ID:???0860nobodyさん
NGNG0863nobodyさん
2006/07/22(土) 01:07:15ID:???0864nobodyさん
2006/07/22(土) 01:25:10ID:???0866nobodyさん
2006/07/22(土) 05:06:31ID:???foreach $test (@test){
print "$test";
}
と
foreach $test (@test){
$test .= $test;
}
print "$test";
とではどちらが鯖負担の軽減、高速化になりますか?
0867nobodyさん
2006/07/22(土) 05:30:37ID:???上。だってやってること違うじゃん。
foreachよりforの方が速いから、上の方のもっと速くするには
for(@test){
print;
}
0868nobodyさん
2006/07/22(土) 05:33:09ID:???agroupeの要素がbgroupeに含まれていれば、ok!と出力し、
入っていなければ、その要素を出力するスクリプトがうまくいきません。
@agroupe=qw(quit exit login logout);
@bgroupe=qw(exit quit);
for(@agroupe){
if(grep(/^$_$/,@bgroupe)){
print "ok!\n";
} else{
print $_, "\n";
}
}
これでやると全部入っていることになっちゃうんですが、どこが間違ってるでしょうか。
0869nobodyさん
2006/07/22(土) 05:40:00ID:???@agroupe=qw(quit exit login logout);
@bgroupe=qw(exit quit);
for my $word (@agroupe){
if(grep(/^$word$/,@bgroupe)){
print "ok!\n";
} else{
print $_, "\n";
}
}
0870nobodyさん
2006/07/22(土) 05:43:37ID:???@agroupe=qw(quit exit login logout);
@bgroupe=qw(exit quit);
my %bgroupe = map { $_ => 1 } @bgroupe;
for (@agroupe){
if(exists $bgroupe{$_}){
print "ok!\n";
} else{
print $_, "\n";
}
}
0871nobodyさん
2006/07/22(土) 05:47:20ID:???ありがとうございます。
そうか、grepの場合、$_にはそのループのデフォの$_じゃなくて
比較対象の要素が入ってるんですね。前も引っかかったのに忘れてて
小一時間損したぁぁ。
ちなみに
if(grep(/^$word$/,@bgroupe)){
print "ok!\n";
} else{
print $word, "\n"; # print $_, "\n";だと何も出てこない!
}
0873nobodyさん
2006/07/22(土) 09:05:18ID:???本当にそのコードなんだったらチェックは付かない。
しかし実際は、そのコードからは出力されるはずのない
<tr><td><input type=checkbox name=chk1 value=1 checked></td><td>洗顔</td></tr>
という行が出力されている。(checkedの部分が問題
つまり
print "<tr><td><input type=checkbox name=chk$cnt value=1";
print "></td><td><b>$_</b></td></tr>\n";
の2行の間に「すでにチェックされたかどうか」を判定するコードが実際には入ってると考えられる。
その部分のコードを削除すればたぶんOK
0874nobodyさん
2006/07/22(土) 17:39:40ID:???my $foo = "hoge";
print "$foo";
みたいに文字列を無駄なダブルクォートで囲う人が居なくなって欲しい。
>>866 みたいなやつ。
ダブルクォートで囲うと新しい文字列を作る事になるから
上のような場合は、ただの無駄にしかならない
($fooと全く同じ文字列を作って表示している)。
一体、どこで習ってくるんだろう。
KENTもそこまで酷くないよね?
0875nobodyさん
2006/07/22(土) 17:41:47ID:???0876nobodyさん
2006/07/22(土) 18:08:55ID:???$fooと同じ文字列をわざわざ作るなんて馬鹿なコンパイラはない。
0877nobodyさん
NGNG0878nobodyさん
2006/07/22(土) 18:50:39ID:???$ perl 876.pl 2>/dev/null
Benchmark: timing 1000000 iterations of bare, quote...
bare: 2 wallclock secs ( 0.78 usr + 0.53 sys = 1.31 CPU) @ 762776.51/s (n=1000000)
quote: 1 wallclock secs ( 0.96 usr + 0.56 sys = 1.52 CPU) @ 657030.22/s (n=1000000)
$ cat 876.pl
use Benchmark;
my $foo = 'bar';
timethese(1_000_000,
{'quote'=>sub {print STDERR "$foo";},
'bare'=>sub {print STDERR $foo;},
});
0879nobodyさん
2006/07/22(土) 18:55:33ID:???魅力のひとつだと思う・・・
0880nobodyさん
2006/07/22(土) 19:40:53ID:???Benchmark: timing 1000000 iterations of bare, quote...
bare: -1 wallclock secs ( 0.11 usr + 0.00 sys = 0.11 CPU) @ 9090909.09/s (n=1000000)
(warning: too few iterations for a reliable count)
quote: -1 wallclock secs ( 0.20 usr + 0.00 sys = 0.20 CPU) @ 5000000.00/s (n=1000000)
(warning: too few iterations for a reliable count)
$ cat 876.pl
use Benchmark;
my $foo = 'bar';
timethese(1_000_000,
{
'quote'=>sub {$boo="$foo";},
'bare'=>sub {$boo=$foo;},
});
printしないとこんなかんじ
0881nobodyさん
2006/07/22(土) 21:43:50ID:???"" で括るのは、新しい文字列の生成という意味だから、最適化はされないよ。
-MO=Deparse 付けてみても、"$foo" そのまま。
0882nobodyさん
2006/07/23(日) 01:44:22ID:NrRWf3Mx「Perl・CGIコーディング初心者質問スレ」
に変えるべきだと思う。
0883nobodyさん
2006/07/23(日) 01:46:04ID:BeERA3x6念のため言っておくけどハッシュにすると遅いよ。
可読性があがるからコーディングが早いってだけ
でもハッシュ使っとけ
0885nobodyさん
2006/07/23(日) 02:19:16ID:???速さを求めたいならはじめに両方の要素をソートしておくことをお勧めする。
もちろんそれに応じたコーディングも必要だが要素数が多ければ目に見える効果があるはず。
0886nobodyさん
2006/07/23(日) 03:06:54ID:???if ($ENV{'PERLXS'} eq "PerlIS") {
print "HTTP/1.0 302 Temporary Redirection\n";
print "Content-type:text/html\n";
}
という記述があったんですが意味がよく分かりません。
分かる人、翻訳お願いできませんか?
0887nobodyさん
2006/07/23(日) 03:31:22ID:???検索したらすぐに解ったが…
ttp://www.att.or.jp/perl/faq/perlwin32faq/perlwin32faq7j.html#My_CGI_scripts_don_t_seem_to_run
ttp://www.att.or.jp/perl/faq/perlwin32faq/perlwin32faq7j.html#How_does_my_script_know_if_it_s_
「ISAPIで実行されていたらステータス行とContent-Typeヘッダ吐き出せ」
0888886
2006/07/23(日) 03:35:53ID:???すみません。まさか検索で引っかかるとは思いが至らず・・・。
要は削除してしまっても問題ない箇所なんですね。
こんな時間にありがとうございました。
0889nobodyさん
2006/07/23(日) 03:44:25ID:671DuE1Hうざいよ、藻前。
>my $foo = "hoge";
>print "$foo";
>みたいに文字列を無駄なダブルクォートで囲う人が居なくなって欲しい。
上のは必要。下のは"$foo\n"が普通なので必要。ちなみに$foo,"\n"より速い。
0890nobodyさん
2006/07/23(日) 11:48:54ID:???>上のは必要
お前、何当たり前の事言ってんだ…。
>下のは"$foo¥n"が普通なので必要
コード違うじゃん。誰が改行付ける時の話してる?
0891nobodyさん
2006/07/23(日) 11:56:10ID:???0892nobodyさん
2006/07/23(日) 12:16:20ID:rog/ar/Gperl-5.8.8で、URLエンコーディングのデコードをやりたいと思っています。
以下の様にやってみました。
use encoding "euc-jp";
$str = "%C6%FC%CB%DC";
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
print $str;
が、何も出力されません。
use encoding "euc-jp" を除くと正しく出力("日本")されるのですが、
この部分は入出力の関係上できればのこしておきたいと思っています。
どうしたら解決できるか、どなたかお分かりの方教えてください。
0893速さ順
2006/07/23(日) 13:08:12ID:???"$foo\n"
$foo,"\n"
こんな感じか?それなら文字列連結でいいんじゃね
0894nobodyさん
2006/07/23(日) 13:30:13ID:???これじゃだめなの?
use encoding "euc-jp";
{
no encoding;
$str = "%C6%FC%CB%DC";
$str =~ tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
}
print $str;
0895nobodyさん
2006/07/23(日) 14:44:30ID:???なんかこないだから一人ずれてるのいるよね・・・。
>>892 がなんで use encoding 下でダメなのか説明おねがいえらいひと。
0896ヽ(´ー`)ノ ◆.ogCuANUcE
2006/07/23(日) 17:23:10ID:???解決法は >>894、もしくは use encoding を使わない。
理由は perldoc encoding の DO NOT MIX MULTIPLE ENCODINGS のあたりを参照。
use encoding "euc-jp";
my $str = '%C6%FC%CB%DC';
print "before: $str (" . length($str) . ")\n";
$str .= "\xFE";
print "after : $str (" . length($str) . ")\n";
use encoding については、作った本人が「使うな」と言ってる上に、
副作用が多すぎる。
新規で書くコードに関しては、Encode.pm で適宜変換するようにして、
文字リテラルには ascii しか書かないか、use utf8 をして utf-8 に
統一してしまうかの、どちらかを選択するべき。
古いコードで use encoding しているものは、no encoding で逃げるか、
駄目なら書き直すべし。
知ってる人間が use encoding 使ってたら、確実に殴る。
0897nobodyさん
2006/07/23(日) 17:35:06ID:???unko
HOGEHOGE
これの << ってなんだっけ
名称をどわすれした
0898nobodyさん
2006/07/23(日) 17:51:27ID:???0899nobodyさん
2006/07/23(日) 18:45:27ID:???ああ、そうか。 なるほどねー。
use encoding "euc-jp"; 下では
$str = "\xc6";
$str .= "\xfc";
$str .= "\xcb";
$str .= "\xdc";
こう書いても $str は "日本" ってはならないわけだな。 ic ic
0900nobodyさん
2006/07/24(月) 01:13:30ID:ga9J27XZ0901nobodyさん
2006/07/24(月) 02:23:23ID:???0902nobodyさん
2006/07/24(月) 10:35:48ID:78lGpjq9open FH,"+>>test.log";
seek FH,0,0;
print FH "$time","\n";
close FH;
test.logの先頭に一行新しく入れたいのですが、これだと末尾に一行追加されます・・・・
多分+>>のせいだと思いますが、先頭に入れようとしたら、
my @list=<FH>;
truncate FH,0;
print FH $time,"\n";
print FH @list;
とするしかないのでしょうか?
なんかいちいち一旦全部配列に入れてファイルを消してってのが嫌です。
0903902
2006/07/24(月) 10:39:56ID:78lGpjq9seek FH,0,0;
がないと@tempに何も入りませんね。
しかしなんでそこでのseekは効くのに、前者の方ではうまくいかないんだろう
0904902
2006/07/24(月) 11:25:03ID:78lGpjq90905nobodyさん
2006/07/24(月) 11:51:01ID:???0906nobodyさん
2006/07/24(月) 11:56:03ID:???こういうフォーマットの文字列を
11時53分11秒
に変換したいです。
なるべく短い記述ですませいたいのですが。
できれば2バイトずつで自動スプリットできればそのままsprintfに渡せるのですが。
substrを3個も書いてsprintfに渡すのはなえますよね。
0909nobodyさん
2006/07/24(月) 12:23:35ID:???>>907
そういえば正規表現でいけましたね。ありゃ()がミソでしたね確か。
396は本当になるほど!って感じです。
unpackはまるで使いこなせていないままでしたが便利なものですねこれ。
0910905
2006/07/24(月) 12:35:23ID:TyNTrbq3↑は見つけましたが1年ほど前なので、他にありますでしょうか?
0911nobodyさん
2006/07/24(月) 13:02:47ID:???基本的に内容消さないで最初の行に追加する方法は無いと思う。
解決法としては、逆に、使うときに、my @list = reverse <FH>;
とか、foreach(reverse <FH>)
とかするとか、・・・
0912nobodyさん
2006/07/24(月) 13:16:16ID:???0913902
2006/07/24(月) 13:20:39ID:78lGpjq9あきらめス。
ありがとうございす。
0914nobodyさん
2006/07/24(月) 15:16:26ID:???馬鹿、またそうやって全部メモリに読み込んで。
しかも foreach でもう一度展開して。
勘弁してくれ。
>>913
http://perldoc.jp/docs/modules/File-ReadBackwards-1.02/ReadBackwards.pod
>このモジュールはファイルを行単位で逆方向に読み込みます。
>使い方は簡単で、メモリの使い方は効率的で高速です。
>オブジェクトとtieされたハンドル・インターフェイスの両方を
>サポートしています。
使わない理由は無い。
0915nobodyさん
2006/07/24(月) 16:33:06ID:???正直メモリ展開とか実感できない・・・1ミリ秒か100ミリ秒かとか体感違いないので・・・
昔のコンピュータを使ったこと無いってのもあるかも・・・
0916nobodyさん
2006/07/24(月) 16:40:34ID:???cとかで実装するかなぁ・・・と思う、・・・(今のとこそういうプロジェクトの予定無し・・・
個人的にforeach(reverse <fh>){.....}なんかは見やすいのでがんがん使う。
まあ、遅いって言ってもせいぜい多項式オーダーの遅さだと思うので、あまり気にしない
指数オーダーだったら大変だが・・・w
0917nobodyさん
2006/07/24(月) 16:58:47ID:???my @list=<FH>; はよろしくないけどw
0918nobodyさん
2006/07/24(月) 18:27:39ID:LY53xScL↑のように、パッケージファイル(List.pm)を更新しても、Webページで反映されません。
.cgiを持つ拡張子のファイルは反映されます。
これはどのようなことが原因ですか?
どのようにすればList.pmで書き換えた内容の更新が反映されるようになりますか?
0919nobodyさん
2006/07/24(月) 18:44:08ID:???んな訳ない
0920nobodyさん
2006/07/24(月) 18:46:52ID:???0921nobodyさん
2006/07/24(月) 18:58:52ID:???0922nobodyさん
2006/07/24(月) 19:16:35ID:???0923nobodyさん
2006/07/24(月) 19:24:17ID:???0924nobodyさん
2006/07/24(月) 19:40:51ID:???0925nobodyさん
2006/07/24(月) 19:46:47ID:???テンポラリファイル作って一行出力してから元ファイルから残りを追記後
リネームでもできるけど一緒にロックせにゃならんし残った後のこともあるな。
>>906
substr($str,0,2),substr($str,2,2),substr($str,4,2)
でもできるだろう。数字と判定してからのほうがよいと思うけど。
0927nobodyさん
2006/07/24(月) 20:13:17ID:???$date = "115311";
$date =~ s/(\d\d)(\d\d)(\d\d)/$1時$2分$3秒/;
0928nobodyさん
2006/07/24(月) 20:49:14ID:???0929nobodyさん
2006/07/24(月) 20:53:25ID:???0930nobodyさん
2006/07/24(月) 21:09:27ID:???0931ヽ(´ー`)ノ ◆.ogCuANUcE
2006/07/24(月) 21:16:05ID:???残念ながら、標準では入ってないが。
0933nobodyさん
2006/07/24(月) 22:22:30ID:IKH596diYY-BOARDを使っていますが最近英語の荒らし書き込みが増えちゃって困っています
そこで相談したところ「半角のみの投稿を禁止すればよい」という話を
聞いたのですが実際にスクリプトを変更する技術がなく出来ませんが
どなたか実際に使っている方などいたりしませんか?
アドバイスよろしくお願いいたします。
0934nobodyさん
2006/07/24(月) 22:46:14ID:???KENT WEB総合スレへドゾ。改造方法もあるでよ。
http://pc8.2ch.net/test/read.cgi/php/1078991985/450-
0936nobodyさん
2006/07/24(月) 23:59:23ID:cgyCzAHv見つけた内容は行いたい処理とは違う物しか発見できませんでした。
どなたか、下記の内容について処理方法を概要だけでも結構ですので
ご教授お願い出来ないでしょうか?宜しくお願い致します。
----
HTML内のフォームからファイルと時間を選択させて、
その時間になったら自動で指定ファイルをFTPで別サーバー
へ移動するという処理は可能でしょうか?
Perlでcrontabに書き出すことができればと思いましたが
レンタルサーバーでそれは許可されておりません。
cronを使用せずにperlにより指定時間になっているかどうかを
チェックして時間になっていたらFTPでファイルを移動
するような処理は可能なのでしょうか?
0937nobodyさん
2006/07/25(火) 00:19:33ID:???この場合プログラムが能動的に動くことは不可能。
ただスクリプトがアクセスされたときに指定時間になっているかをチェックすることは十分可能。
ほかはperlの機能としては全て可能だが、サーバーにより制限がかかっている場合もある。
0938nobodyさん
2006/07/25(火) 00:30:15ID:???0939nobodyさん
2006/07/25(火) 00:43:59ID:???0940nobodyさん
2006/07/25(火) 00:46:36ID:???0941nobodyさん
2006/07/25(火) 00:48:44ID:???最新版がインストールされますが、
昔のバージョンを指定し、かつ、そのバージョン
と依存関係のあるものをインストールすることって
できますか?
0942nobodyさん
2006/07/25(火) 01:08:00ID:???そうですか。有難うございます。
やはりcrontabに書かせるしかないのですね・・・
ホスティングでcrontabを変更できる所は日本であるのでしょうか?
>fork
forkで時間指定になるまで子供を常駐させるという事なのでしょうか?
もう少し詳しく教えていただけないでしょうか?
0943nobodyさん
2006/07/25(火) 03:11:29ID:???0944nobodyさん
2006/07/25(火) 09:30:20ID:???>この場合プログラムが能動的に動くことは不可能。
無限ループ内にsleepなり時間チェックの関数書いとけば可能。
ただ、>>937の言うように「サーバーにより制限がかかっている場合」に注意。
0945nobodyさん
2006/07/25(火) 10:15:47ID:???なにがしたいのかわからんけど。
0946nobodyさん
2006/07/25(火) 11:45:48ID:???パーミッションをいじられて実行不可にさせられるのが共有サーバー。
自鯖にするか占有を借りれば好きかってできるかと。
0947902
2006/07/25(火) 11:52:35ID:kxudY76Dせっかくなのですが。
ファイルの一番上の行に書き込む時より、全部を読み込んで処理して表示する時の
方が他にも処理があり、頻度も五分ですのでアsdgjな;ぐあwbんrgぅじぇbんぎl
ファイルに書き込むときに最上部に書いた方が今回の場合はグラッリェなのです。
すいません。ありがとうおざいます。もう肌がヒリヒリしてたえられrません。
病院にいきってててててててえてtwえまsづあsd。あdgsgfdsあ
0948902
2006/07/25(火) 11:56:06ID:kxudY76D>my @list=<FH>; はよろしくないけどw
どうしてですか?一見完璧に見えますが。実のところ落とし穴があるのでしょうか?
やっぱり違いますねこのスレは。なんかプロに教わってる感じで最高です。
お返事お待ちしております。とりあえず病院に行ってきます。
なんか肌がボロボロやぶれて血だらけになってしまいました。
なんですかね。これ・・・・orz
0949nobodyさん
2006/07/25(火) 12:06:57ID:???>無限ループ内にsleepなり時間チェックの関数書いとけば可能。
何か勘違いしてないか?
お前のサーバーでは無限ループの中にsleepなり時間チェックの関数書いたプログラムが勝手に立ち上がるの?
結局そのプログラム自体は誰かからアクセスされることによってしか起動し得ないわけでしょ?
そもそも時間がたてば普通にkillされるし。
0950nobodyさん
2006/07/25(火) 12:11:52ID:???0951nobodyさん
2006/07/25(火) 12:13:12ID:???0952nobodyさん
2006/07/25(火) 12:17:22ID:???あとは時間チェックとスリープ組み込んだ無限fork
絶対怒られるけど。
0954nobodyさん
2006/07/25(火) 13:25:59ID:???qmHandle って最新Ver1.2.0でDecember 10, 2003なんだけど、
今だったらもっといいスクリプトとかあるかな?教えてエロイひと
0955nobodyさん
2006/07/25(火) 13:55:36ID:???ィ`w
@list って配列他に使わないのであれば、<FH> するより一気に read した方がいいよ、ってことかな。
0956nobodyさん
2006/07/25(火) 13:59:10ID:???0958nobodyさん
2006/07/25(火) 14:53:00ID:???open FH, 'example.data';
my @list = <FH>
foreach( @list ){
処理
}
より
open FH, 'example.data';
while( <FH> ){
処理
}
のほうが一般に高速、メモリの使用量も少ない。
前者はファイルに保存してある情報を全てメモリ上にぶちまけた上でその情報を使って処理するのに対して、
後者はそのときの処理に必要な部分のみをファイルからメモリに読み取って処理を行う。
ディスクアクセスのキャッシングは OS がシステム全体の状況に応じて行ってくれるので
間欠アクセスによるシークロスは気にする必要は無い。
0959nobodyさん
2006/07/25(火) 14:57:44ID:???use encoding qw(euc-jp);
use Encode qw(from_to encode decode);
my $str = "%C6%FC%CB%DC";
$str =~ tr/+/ /;
$str = encode("utf8", $str); # utfフラグを落とす
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
from_to($str, "euc-jp", "utf8"); # 変換
$str = decode("utf8", $str); # utfフラグを付ける
print $str;
でだめなん?
0960nobodyさん
2006/07/25(火) 16:17:48ID:p7nXlRS6問題なくアップできるのですが、100M近いものになると
「ページを表示できません。検索中のページは現在、利用できません。
Web サイトに技術的な問題が発生しているか、ブラウザの設定を調整
する必要があります。」
のエラーが発生してしまいます。
CGIでのファイル制限は設けていないのですがこのような症状になって
しまいます。どなたかご存知の方ご教授お願い致します。
0961nobodyさん
2006/07/25(火) 16:28:28ID:???0962nobodyさん
2006/07/25(火) 16:42:24ID:???timeoutはアップの途中でも起こることなのでしょうか?
もしそうだとしたらtimeoutを防ぐ(ごまかす?)手段などはありますか?
0963nobodyさん
2006/07/25(火) 16:50:00ID:???0964nobodyさん
2006/07/25(火) 17:04:06ID:???申し訳ありません。下記がログに残されているメッセージです。
CGI.pm: Server closed socket during multipart read (client aborted?).
0967nobodyさん
2006/07/25(火) 19:54:02ID:???みたいに適当な初心者が
>自分でparseしたら
ですか。
お前にCGIモジュール以上のものが書けるのかと問いたい問い詰めたい、小一時間ほど。
どうせおまえ KEMT からコピペするだけと違うんかと。
っていうか server も close も socket も during ...も中学レベルの単語じゃねぇか。
0968nobodyさん
2006/07/25(火) 20:00:23ID:???0970nobodyさん
2006/07/26(水) 10:23:21ID:???phpならphp.iniで入力サイズを増やす。
あと、perlならアップするファイルサイズの約二倍の物理メモリを。
そしてもう来るな
0972nobodyさん
2006/07/26(水) 11:37:01ID:???それはすごい perl ですね。
0973nobodyさん
2006/07/26(水) 11:37:58ID:???sub change{
my ($in) = @_;
my $sjis_str = '[\x81-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]';
my $target = '[\xF7][\x41-\x9B\xA1-\xFA]|[\xF9][\x41-\x9B\xA1-\xED]|[\xFB][\x41-\x8d\xA1-\xD9]';
$in =~ s/\G((?:$sjis_str)*)($target)/$1.'['.unpack('H4',$2).']'/ego;
return $in;
}
sjisとtargetがかぶってしまっています。$sjis_strから$targetを除くとどう表現できますかね?
文字コードテーブルはよーわからんヽ(+∇+)ノ
0974nobodyさん
2006/07/26(水) 12:04:59ID:JkK9HWj12006723,akjhkadghjhgiower
Text::CSV_XSを使ってCSV形式で保存してます。
アクセスログなので結構膨大です。
日付別に分別したいのですが何かいい案はありますか?
ハッシュのキーに数字のみが使えたらよかったですが。無理ですし。
で、まあdateとかつけようと思ったのですが。
push @$hash{date$temp[0]},$csv->string();
みたいな。
なんかうまくいきませんね。グローバルシンボルじゃボケエラーがでますが。
もちろんmy宣言はしてるのです。問題なく。
でりふぁれんす部分がおかしいかキーの中のやり方がおかしいかですね。
0975974
2006/07/26(水) 12:13:15ID:JkK9HWj1push @{$hash{$temp[0]}},$csv->string();
で動いた。
っていうかperlってキーに数字のみも使えるのね。便利すぎ
0976nobodyさん
2006/07/26(水) 12:13:57ID:???0977nobodyさん
2006/07/26(水) 12:32:06ID:???0978974
2006/07/26(水) 13:52:08ID:JkK9HWj1あれから色々と進めてカベにぶち当たってなんとか解決して。
でもイマイチなのでよりよい記述をアドバイス願います。
ループ処理をするときに
foreach(keys %hash){}
とやると$_に入りますが、これを$dateに入れたいのです。
今は
while(my($date,)=each %hash){}
としてますが、なんか不満が残る記述方法です。
もっとスマートなやりかたはないでしょうか。
それと連続ですみませんがもう一つ。
上記のやつでさらにkeyをsortしてから取り出したいのですが、each sort %hashだとエラーになってしまいました。
カッコもつけてみたのですがだめでした。これもできればスマートに・
宜しくお願いします。
0979nobodyさん
2006/07/26(水) 14:23:02ID:???key1 => 'data1',
key2 => 'data2',
key3 => 'data3',
key5 => 'data5',
key4 => 'data4',
);
my $key;
print "Unsorted Result\n";
foreach $key ( keys %hash ){
print " $key\t$hash{$key}\n";
}
print "\n\nSorted Result\n";
foreach $key ( sort keys %hash ){
print " $key\t$hash{$key}\n";
}
0980974
2006/07/26(水) 14:28:07ID:JkK9HWj1さっき試しに
while(my($date,)=keys %hash){}
してみたら無限ループでクラッシュするかと思いましたよ。
ありがとうございました。
0981974
2006/07/26(水) 14:32:56ID:JkK9HWj1せめて処理開始から1分が経過したら自動でexit()が発動するようなことはできないんでしょうか?
そうすればループが無限してもパソコンは安心ですよね。
0982nobodyさん
2006/07/26(水) 14:55:54ID:???だからみんな危ないかなってときはループが一定回数を超えたら処理をエラーメッセージと共に
処理を中断させるんざます。
0983nobodyさん
2006/07/26(水) 15:07:27ID:???0984nobodyさん
NGNG0985nobodyさん
2006/07/26(水) 15:39:28ID:???0987974
2006/07/26(水) 16:04:23ID:JkK9HWj1ここ読んでalarmが何かを理解しようと思いましたが、どうやら他にも理解しないといけないことがあるようで。
実行中のプロセスにSIGALARMシグナルをおくられてもね・・・
どっかで受け取る処理をするのか?
そのシグナルがきたら発動するようにできるのか?
そこらへんをこのサイトも書いてくれてたら・・・・
でもこのサイト質問すると答えてくれる。最高な管理人だからこんなこと言うの恐縮だ
0988nobodyさん
NGNG0989974
2006/07/26(水) 16:16:59ID:JkK9HWj10990nobodyさん
2006/07/26(水) 17:29:19ID:???そこに受け取る処理も何も全部書いてあるんだが。
それ読んで分からなければ、perldoc -f alarm 読んでも分からんだろうな…。
基本的に同じ事が書いてあるから。
0991nobodyさん
2006/07/26(水) 20:29:14ID:???(?:$sjis_str)* のとこを (?:$sjis_str)*? にしてみてわ?
ってか >>973 の場合 \G いらないと思うんだけど。
0992nobodyさん
2006/07/27(木) 09:50:11ID:1uzwaimq中身に数字以外を含むか、数字だけでも1桁でなければ
エラー分を出力してexitするルーチンを呼びたいのですが、
上記で穴は完全にふさげてますでしょうか?
0993nobodyさん
2006/07/27(木) 10:14:26ID:???for ( $i=0; $i<0; $i++ ) {
print $i;
}
このプログラムでは、初期値を0に設定してループごとに1足していっているのですが
終了の条件が 「0未満になった場合」 となっています。
0から1づつ足していってるので、「0未満」 となるはずもなく、0からの数字が延々と表示され続けます。
↑これって本当ですか?forの条件式部分って確かifと同じでしたよね。
だから0未満であれば実行するんであって、0未満でない上記の場合は一度も実行しないはずですが。
私が間違ってますか?
0994nobodyさん
2006/07/27(木) 10:52:50ID:???大嘘。そんなこと言ってる奴は葬ってしまう事が社会正義なので晒してください。
0996nobodyさん
2006/07/27(木) 11:26:26ID:???これを値の数値が小さい順に並べ替えたいのですがsどうやればいいでしょうか。
0997nobodyさん
2006/07/27(木) 11:31:29ID:???my @row = sort{$test{$a} <=> $test{$b} }keys %test;
print @test{@row};
なんか知らないけど試してたら偶然カスリました。
ここから後は自分でいけそうです。996でした。
0998nobodyさん
2006/07/27(木) 11:43:39ID:???http://perl.misty.ne.jp/04.html#e
0999nobodyさん
2006/07/27(木) 11:52:44ID:???print $a[int rand @a];
これでそれなりに全てが平等に抽選できてますかね?
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。