Perl 初心者コーナー Part24
■ このスレッドは過去ログ倉庫に格納されています
0001 ◆fBgbHI04bQ
03/06/07 22:30ID:GbQKLcPE【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0263nobodyさん
03/06/12 21:37ID:xj4xPJ4f-s 消しても同じ結果なんですが…。
0264nobodyさん
03/06/12 22:01ID:???>return($newls2[0]); # 最高番号検出
さすがレスキュー・・・・
0265nobodyさん
03/06/12 22:27ID:???何個か数字があってその中から最高値を取り出せって言われたら
オレもソートさせちゃうけど・・・楽だし。
自分で、一個ずつ比較させる処理書いてもいいけど・・・
0266nobodyさん
03/06/12 23:27ID:???0267nobodyさん
03/06/12 23:47ID:xj4xPJ4fActivePerl5.8.0最新版でもNGでした。
誰か、暇な方、試して頂けないですかね…
0268nobodyさん
03/06/12 23:53ID:???0269nobodyさん
03/06/12 23:54ID:???FlashCGIつかっているのですが、こっちと、トリプが合いません。
新サバではないとおもいます。。。
はじめの2文字って「H.」から何かに変わったんでしょうか?
0274nobodyさん
03/06/13 00:28ID:???A > B ←これはAが大きいと真をかえすのだ
0275nobodyさん
03/06/13 00:35ID:nrl/A00ghttp://www.k-514.com/
0276nobodyさん
03/06/13 00:41ID:???実際のところは計測しなきゃわからないが。
0277nobodyさん
03/06/13 00:44ID:???0278nobodyさん
03/06/13 00:58ID:???0280nobodyさん
03/06/13 01:49ID:???$max = $_ if($_ > $max);
}
これが一番早くてメモリも使わず?
0281nobodyさん
03/06/13 01:57ID:???0282nobodyさん
03/06/13 02:08ID:???0283nobodyさん
03/06/13 02:12ID:???はて? perlgutsにもperlembedにもinterpreterと書いてあるが何か?
>>279
こういう恣意的なデータも取れるんだよ。
use Benchmark;
@ar = (1 .. 5);
timethese(10000, {
sort => '@br = sort { $b <=> $a; } @ar',
loop => '$max = $ar[0]; for (@ar[1..$#ar]) { $max = $_ if ($_ > $max);}'
});
Benchmark: timing 10000 iterations of loop, sort...
loop: 2 wallclock secs ( 2.23 usr + 0.01 sys = 2.24 CPU)
sort: 3 wallclock secs ( 1.98 usr + 0.00 sys = 1.98 CPU)
0284nobodyさん
03/06/13 02:19ID:???0285
03/06/13 08:01ID:???0286nobodyさん
03/06/13 08:01ID:???0287nobodyさん
03/06/13 09:29ID:???外部ファイルにして、requireするにせよ、useするにせよ、
perlは、皆コンパイルするということなんですが、
以下のようにするより、
use Hoge;
if (...) {
kore; # koreはmainの関数
} else {
are; # areはHoge.pmの関数
}
以下のようにした方が負担が減るということでしょうか。
if (...) {
kore;
} else {
use Hoge;
are;
}
0288287
03/06/13 10:01ID:???前提です。そして、ifになる確率が50%はあるとして。
0289nobodyさん
03/06/13 10:19ID:???useの場合は一緒じゃない?
requireなら、そうやったほうがいい。(require文が実行された時点で読み込むから)
0290287
03/06/13 10:31ID:???うん、こういうの書いた覚えあるんで、正しい判断だったんだと
わかってほっとしますた。
0291nobodyさん
03/06/13 11:18ID:???-----BEGIN PGP MESSAGE-----
Version: PGP 6.5.8ckt - ja http://www.hizlab.net/pgp/
qANQR1DDDQQDAwKzdZAaYlhVL2DJvuMRq1Krlrlnei+qaIGlODje1KRbdRDVTD1/
h7dQ6RfnS3GkGv2RNdvpZgVvgQqkSXcM3N8o9AkvtrmRtO3BsJJ1id5RArQwjmEE
kVXhF6Y5HdeQfOOTRjTMV2kS0i27sza8Gv+g+uFFTozzmsJ2ffbmrUi/K4MjsNnN
yh/mrKF/MkenFZqjnQobAHmjqzYxj8VMyx31Ar1GM4g/2UiEtAErfz//cJCJ0zsB
akVGj67i/wWnQoZgYVxe1sSyT/0=
=+BHl
-----END PGP MESSAGE-----
0292nobodyさん
03/06/13 11:41ID:???Namazuの仕組みを調べればいいんでしょうが、もっと簡単に
モジュール組み込んで、テキストファイル検索するみたいに、
バリバリ、正規表現検索がしたいのれす。
なにか情報の載っているサイトでもいいですから教えてくらはい。
0293nobodyさん
03/06/13 12:41ID:1CoOWAYzCGI.pmはmultipart/form-dataで送られたきたデータを受け取ると、
即座に一時フィルを作成するようなんですが、
このファイルを削除するか、ファイルを作成しないようにする方法はないですか?
0294nobodyさん
03/06/13 12:50ID:???Wordファイルの仕組みを調べれば、簡単じゃないことが分かるよ。
とりあえずバイナリエディタで開いてみ。
Namazuを使いたいってことなら、wordファイルからテキスト部分を抜き出して
インデックス作ればいいからそっちのやり方だと簡単かも。
>>293
全然CGI.pmの中身も見ずに反応するけど、
最後にファイル削除されないの?
ファイルを作成しないってことはメモリに全部蓄えるつもり?
予測可能なファイル名になっちゃうのなら問題だろうけど、
予測不可能なファイル名になってない?
0295nobodyさん
03/06/13 13:24ID:???use Benchmark;
$count= 100;
@array= (0 .. 5000);
timethese($count, {
'code1'=> q{
$max= $array[0];
for (1 .. $#array){
$max < $array[$_] and $max= $array[$_];
}
},
'code2'=> q{
@array2= sort {$b <=> $a} @array;
$max= $array2[0];
},
'code3'=> q{
$max= (sort {$b <=> $a} @array)[0];
},
'code4'=> q{
($max)= sort {$b <=> $a} @array;
}});
0296nobodyさん
03/06/13 13:43ID:U7lWej0Vhttp://endou.kir.jp/moe/linkvp.html
0297nobodyさん
03/06/13 14:45ID:???ActivePerlならWin32::OLEで、WordファイルをCOMオブジェクトとして開けば、
Wordオブジェクトのメソッドを呼び出せる。
ActivePerlじゃないならOLE::Storageで頑張る。
0298292
03/06/13 16:14ID:???wordファイルをバイナリエディタで開いて解析しようとしたが、
ちょっと漏れには無理だと悟って聞いたのです。大分前の話。
word2txtでwebを漁ってもぱっとしなかったし・・・
Namazuは、wordファイルも検索するって知ってる?つまり、
テキスト部分を抜き出すエンジンを備えているんじゃないかなぁ。
調べてみます。
>>297
うーん、ちょっとOLE::Storage見てみたけど、難しそうです。
Win32::OLEとかこれ使って、川合さんや極悪さんがExcelファイルを
簡単に扱えるモジュール書いてくれているんですが、やはり、word
は難しいんでしょうね。
0299nobodyさん
03/06/13 17:49ID:???> >>293
> 全然CGI.pmの中身も見ずに反応するけど、
> 最後にファイル削除されないの?
> ファイルを作成しないってことはメモリに全部蓄えるつもり?
> 予測可能なファイル名になっちゃうのなら問題だろうけど、
> 予測不可能なファイル名になってない?
それが、削除されないんですよ。
new CGIした時点で一時ファイルが作られて、
exit(0) or dieしても消えないんですよ。
どんどんファイルが増えていくのはちと問題ありかと。
0301nobodyさん
03/06/13 18:18ID:???その現象Windowsではなるよね
アップした際のファイルのファイルハンドルが開きっぱなしなのが原因
$q = new CGI;
$upfile = $q->param('upfile');
$tmpfile = $q->tmpFileName($upfile);#一時ファイル名取得CGItemp12345みたいな
〜処理〜
eval{close($upfile);}; #一応ファイルハンドル閉じる
unlink($tmpfile); #一時ファイル削除
0302nobodyさん
03/06/13 18:27ID:???保険として残ってたら削除ってことで。
ちなみにclose()をevalで囲っておかないと添付ファイルがない場合
特定のPerlのVerではエラーするよ
0303nobodyさん
03/06/13 18:29ID:???Linuxだが、
man: ??????????????????????
Failed to open the message catalog man on the path NLSPATH=<none>
No manual entry for CGI
0304299,293
03/06/13 18:31ID:???>>301
> >>299
> その現象Windowsではなるよね
> アップした際のファイルのファイルハンドルが開きっぱなしなのが原因
> $q = new CGI;
> $upfile = $q->param('upfile');
> $tmpfile = $q->tmpFileName($upfile);#一時ファイル名取得CGItemp12345みたいな
> 〜処理〜
> eval{close($upfile);}; #一応ファイルハンドル閉じる
> unlink($tmpfile); #一時ファイル削除
Thanks、解決しますた。
無料鯖なんで詳しく知らないけど、
環境変数見る限りではApache/1.3.27 (Unix) らしい。
でもunlink($tmpfile);しないと消えないんだよな・・・
0306nobodyさん
03/06/13 19:35ID:???わからないのですが。わかる方います?
0307nobodyさん
03/06/13 19:36ID:???0309nobodyさん
03/06/13 19:45ID:???#そのまま・・・
Benchmark: timing 500 iterations of code1, code2, code3, code4...
code1: 4 wallclock secs ( 3.98 usr + 0.00 sys = 3.98 CPU) @ 125.63/s (n=500)
code2: 5 wallclock secs ( 5.05 usr + 0.00 sys = 5.05 CPU) @ 98.97/s (n=500)
code3: 2 wallclock secs ( 1.37 usr + 0.00 sys = 1.37 CPU) @ 364.70/s (n=500)
code4: 1 wallclock secs ( 1.36 usr + 0.00 sys = 1.36 CPU) @ 367.65/s (n=500)
#@arrayをランダムに
Benchmark: timing 500 iterations of code1, code2, code3, code4...
code1: 2 wallclock secs ( 2.60 usr + 0.00 sys = 2.60 CPU) @ 192.23/s (n=500)
code2: 8 wallclock secs ( 7.98 usr + 0.00 sys = 7.98 CPU) @ 62.64/s (n=500)
code3: 4 wallclock secs ( 3.95 usr + 0.00 sys = 3.95 CPU) @ 126.71/s (n=500)
code4: 4 wallclock secs ( 3.93 usr + 0.00 sys = 3.93 CPU) @ 127.13/s (n=500)
#code1 を $max= $array[0]; for (@array){ $max < $_ and $max= $_ } に修正
Benchmark: timing 500 iterations of code1, code2, code3, code4...
code1: 1 wallclock secs ( 1.73 usr + 0.00 sys = 1.73 CPU) @ 289.02/s (n=500)
code2: 8 wallclock secs ( 8.03 usr + 0.00 sys = 8.03 CPU) @ 62.29/s (n=500)
code3: 4 wallclock secs ( 3.92 usr + 0.00 sys = 3.92 CPU) @ 127.62/s (n=500)
code4: 4 wallclock secs ( 3.90 usr + 0.00 sys = 3.90 CPU) @ 128.11/s (n=500)
0310nobodyさん
03/06/13 20:24ID:???いまさら言うのもアレだが、2chみたいにPATH_INFOを使って
hoge.cgi/fuga.jpgのようにすれば、IEなどを騙せ・・・たと思うけども。
0311188
03/06/13 21:06ID:???で、glob使わないで、
unlink(<tmp*>);と同じことする方法ってないですか?
0313nobodyさん
03/06/13 21:29ID:???普通に考えて、配列にはforeachが最速なんじゃないの?
$max = $array[0];
foreach my $array (@array) {
$max < $array and $max = $array;
}
0314nobodyさん
03/06/13 21:29ID:???0315nobodyさん
03/06/13 21:37ID:???$path = ".";
opendir(DIR, $path) or die;
unlink grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
closedir(DIR);
0317315
03/06/13 22:02ID:???書いてから気が付いた。ごめん、適当に修正してくれ。
0318315
03/06/13 22:10ID:???unlink map { "$path/$_" } grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
0319nobodyさん
03/06/13 22:14ID:???0324nobodyさん
03/06/13 22:35ID:???2ch互換のBBSを作るくらいしかメリットは無いかな
0327nobodyさん
03/06/13 22:52ID:???0328nobodyさん
03/06/13 22:58ID:???トリッパーで十分だ、
ノシ
0329nobodyさん
03/06/13 23:11ID:???0330nobodyさん
03/06/13 23:11ID:???0331nobodyさん
03/06/13 23:12ID:???→→→
0332nobodyさん
03/06/13 23:15ID:???0333329
03/06/13 23:27ID:???0335311
03/06/14 00:24ID:???丁寧にありがとうございます。
で、
$path = "../image/photo";
opendir(DIR, $path) or die;
unlink map { "$path/$_" } grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
closedir(DIR);
とやったのですが、結果を見ると、消えてないんですよね・・・
なんでなんでしょう?スクリプトも間違いがあるとは思えないし、
別にcgi自体は正常に終了してるしからエラーログも見れないし、
$path のディレクトリも存在してるし・・・
いったい何が原因なんでしょうか?
恐縮ですがもう少しおつきあいねがえれば幸いです。
0337nobodyさん
03/06/14 00:28ID:EElS1+7WでもCGIの設置くらいしかしたことありません。
1から勉強しようと思います
で、参考書籍のスレに行ったんですがなんか微妙なので
こっちで手っ取り早く教えてください
ソースはメモ帳で書けるんですよね?
お勧めの本おしえてください。
プログラムはやったことないに等しいです
(HTMLはある程度書けます。それとHSPくらいなら・・・)
宜しくお願いします
0338nobodyさん
03/06/14 00:30ID:???・print map { "[$path/$_]" } grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
等としてみて本当に拾えているか確かめる。
・unlink 後に print $!; してみる。
unlinkの後に$!を見てみる。
空ならunlinkは成功しているよ。
…というか、CGIスクリプトなのか。共用サーバでは実験しないでね。
CGIスクリプトは、途中でdieしても、HTTPヘッダさえ出力してあれば問題ないように見えることもあるから、注意してね。
0341nobodyさん
03/06/14 00:38ID:???いいんだよ。それ正規表現だから。
>>337
ソースはメモ帳でOK。ただ扱えるサイズに制限があったような?
フリーのテキストエディタを使うといいよ。プログラミングに便利な機能がたくさんある。
0342337
03/06/14 01:25ID:EElS1+7WHTML書くとき使ってるエディタ使うことにします
本はどうしようかな…
やはり見てから決めたほうがいいかな。
0344nobodyさん
03/06/14 05:08ID:CEUIIJh6VBAならできるかもしれないけど。
0346nobodyさん
03/06/14 07:32ID:FbHmkvIrhttp://homepage3.nifty.com/coco-nut/
0348nobodyさん
03/06/14 13:13ID:???0349nobodyさん
03/06/14 15:23ID:???sub sub{
}
と
sub sub($){
}
にはどういう違いがあるんですか?
0352nobodyさん
03/06/14 22:33ID:???プロンプトみたいに、撃つ回数
平均時間、最短時間、最長時間
を得ることができますか?
リファレンスみると、生きてるか死んでるか、しかわからないみたいなので・・・
アクセスログのファイルのファイルハンドルをFとすると
@line=<F>;
のようにするのは、よくないとどこかで見たのですが
ファイルサイズが小さい場合でも駄目なのでしょうか?
もしよかったとして、どれくらいのサイズまでなら大丈夫なのでしょうか?
もし過去ログにあるのならば、どのあたりの過去ログにあるかを教えて欲しいです。
よろしくお願いします。
0355nobodyさん
03/06/14 23:03ID:???小さきゃかまわないよ。
どのくらいのサイズまで大丈夫かなんて、環境によって違うので分からない。
「みんなはどれぐらいで線引きしてるか」の答えなら得られるかもしれない。
>>356
レスありがとうございます。
なるほど、確かに環境によってかわりますよね。
では、どのくらいの大きさで区別をなさってるのでしょうか?
私は30〜50k程度のファイルでする予定です。
0359nobodyさん
03/06/14 23:33ID:???0360nobodyさん
03/06/14 23:33ID:???なんで差が出るかの理由を考えろ。
その方が早い。
■ このスレッドは過去ログ倉庫に格納されています