トップページphp
1001コメント315KB

Perl 初心者コーナー Part24

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆fBgbHI04bQ 03/06/07 22:30ID:GbQKLcPE
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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
0302nobodyさん03/06/13 18:27ID:???
んまぁ 最後のunlinkはなくてもいいかもしれないけど
保険として残ってたら削除ってことで。

ちなみにclose()をevalで囲っておかないと添付ファイルがない場合
特定のPerlのVerではエラーするよ
0303nobodyさん03/06/13 18:29ID:???
>>300
Linuxだが、

man: ??????????????????????
Failed to open the message catalog man on the path NLSPATH=<none>

No manual entry for CGI
0304299,29303/06/13 18:31ID:???
>>300
>>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);しないと消えないんだよな・・・
0305nobodyさん03/06/13 18:36ID:???
>>303
だったらCPANで見れ
0306nobodyさん03/06/13 19:35ID:???
string literals, numeric literalsとありますが、literalの意味が
わからないのですが。わかる方います?
0307nobodyさん03/06/13 19:36ID:???
文字って意味よ。だからliteralsなわけよ。
0308 ◆fvP8C22Kzg 03/06/13 19:43ID:???
#PK,a
0309nobodyさん03/06/13 19:45ID:???
>>295

#そのまま・・・
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:???
>>244
いまさら言うのもアレだが、2chみたいにPATH_INFOを使って
hoge.cgi/fuga.jpgのようにすれば、IEなどを騙せ・・・たと思うけども。
031118803/06/13 21:06ID:???
glob使えないそうな・・・
で、glob使わないで、
unlink(<tmp*>);と同じことする方法ってないですか?
0312nobodyさん03/06/13 21:20ID:???
>>311
readdir と grep 辺りで。
0313nobodyさん03/06/13 21:29ID:???
>>309
普通に考えて、配列には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:???
>>311
$path = ".";
opendir(DIR, $path) or die;
unlink grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
closedir(DIR);
031631103/06/13 21:57ID:???
>>312
>>315
あー、なるほどー。そっちでくるとはおもわなかった。
ありがとうございます。
031731503/06/13 22:02ID:???
あ、これだとカレント以外のディレクトリを指定したときカレントのを消そうとして失敗するな。
書いてから気が付いた。ごめん、適当に修正してくれ。
031831503/06/13 22:10ID:???
やっぱ直した。3行目だけ。
unlink map { "$path/$_" } grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
0319nobodyさん03/06/13 22:14ID:???
2ちゃんねるのトリップ作成法を教えてください
0320nobodyさん03/06/13 22:24ID:???
>>319
スレ違い
0321nobodyさん03/06/13 22:29ID:???
>>320
Perlのはずです。
0322nobodyさん03/06/13 22:30ID:???
>>321
>>1
0323nobodyさん03/06/13 22:33ID:???
>>321
カエレ(・∀・)ニドトクルナ!!
0324nobodyさん03/06/13 22:35ID:???
トリップのアルゴリズムは公開されてたっけ
2ch互換のBBSを作るくらいしかメリットは無いかな
0325nobodyさん03/06/13 22:40ID:???
>>319
いろんな2ch互換掲示板でも落としてきて解読しろ
0326nobodyさん03/06/13 22:41ID:???
>>325
ただcryptやっているだけでした。
ですので、2chのアルゴリズムと一致しません。
0327nobodyさん03/06/13 22:52ID:???
( ゚д゚)ポカーン
0328nobodyさん03/06/13 22:58ID:???
あーすまんハゲども。
トリッパーで十分だ、
ノシ
0329nobodyさん03/06/13 23:11ID:???
globって今は標準組み込み関数じゃないの?
0330nobodyさん03/06/13 23:11ID:???
↓次の話題どうぞ
0331nobodyさん03/06/13 23:12ID:???
↓ ↑
→→→
0332nobodyさん03/06/13 23:15ID:???
標準だけど、内部動作は処理系依存だから、環境によって結果が異なる。
033332903/06/13 23:27ID:???
例えば動かない環境教えてくれ
0334nobodyさん03/06/13 23:39ID:???
>>333
内部的にはシェルを呼び出してるんだから鯖がそれを規制してたらダメだな
033531103/06/14 00:24ID:???
>>315
丁寧にありがとうございます。
で、
$path = "../image/photo";
opendir(DIR, $path) or die;
unlink map { "$path/$_" } grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
closedir(DIR);

とやったのですが、結果を見ると、消えてないんですよね・・・
なんでなんでしょう?スクリプトも間違いがあるとは思えないし、
別にcgi自体は正常に終了してるしからエラーログも見れないし、
$path のディレクトリも存在してるし・・・

いったい何が原因なんでしょうか?
恐縮ですがもう少しおつきあいねがえれば幸いです。
0336nobodyさん03/06/14 00:27ID:???
>>335
tmp.* でいいのか?
0337nobodyさん03/06/14 00:28ID:EElS1+7W
perlでcgi作りたいです。
でもCGIの設置くらいしかしたことありません。
1から勉強しようと思います
で、参考書籍のスレに行ったんですがなんか微妙なので
こっちで手っ取り早く教えてください
ソースはメモ帳で書けるんですよね?

お勧めの本おしえてください。
プログラムはやったことないに等しいです
(HTMLはある程度書けます。それとHSPくらいなら・・・)
宜しくお願いします
0338nobodyさん03/06/14 00:30ID:???
>>335
・print map { "[$path/$_]" } grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
等としてみて本当に拾えているか確かめる。
・unlink 後に print $!; してみる。
0339 ◆hMJAPH9PWA 03/06/14 00:31ID:???
>>335
unlinkの後に$!を見てみる。
空ならunlinkは成功しているよ。
…というか、CGIスクリプトなのか。共用サーバでは実験しないでね。

CGIスクリプトは、途中でdieしても、HTTPヘッダさえ出力してあれば問題ないように見えることもあるから、注意してね。
0340311=33503/06/14 00:31ID:???
もうしわけないです。>>335 ですが、ファイルアップする場所がまちがってました。
正常に動きました。
申し訳ございません。
0341nobodyさん03/06/14 00:38ID:???
>>336
いいんだよ。それ正規表現だから。

>>337
ソースはメモ帳でOK。ただ扱えるサイズに制限があったような?
フリーのテキストエディタを使うといいよ。プログラミングに便利な機能がたくさんある。
034233703/06/14 01:25ID:EElS1+7W
>>341
HTML書くとき使ってるエディタ使うことにします
本はどうしようかな…
やはり見てから決めたほうがいいかな。
0343nobodyさん03/06/14 02:19ID:???
>>342
独習perlで初歩を勉強できる。
0344nobodyさん03/06/14 05:08ID:CEUIIJh6
Perlで、アクセス者のプリンタを制御することなんてできないですよね。
VBAならできるかもしれないけど。
0345nobodyさん03/06/14 05:46ID:???
>>344
Perlを何か勘違いしてる。
サーバサイドプログラムを勘違いしてる。

そういうのは、クライアントサイドプログラム。
0346nobodyさん03/06/14 07:32ID:FbHmkvIr
キタ━━━━━(゚∀゚)━━━━━!!!!
http://homepage3.nifty.com/coco-nut/
0347nobodyさん03/06/14 12:59ID:???
>>345
そんな事ないよPerlは何でもできるはず
0348nobodyさん03/06/14 13:13ID:???
句読点を抜いた文章は、バカっぽく見えるうえに説得力がまるでない。
0349nobodyさん03/06/14 15:23ID:???
サブルーチンで
sub sub{

}


sub sub($){

}
にはどういう違いがあるんですか?
0350nobodyさん03/06/14 15:48ID:???
>>349
sub 'hoge';
みたいに括弧なしで呼べたり、
sub @hoge;
とかした時の動作が変わったり。
0351nobodyさん03/06/14 22:11ID:???
>>350
>動作が変わったり

どうかわるの?
0352nobodyさん03/06/14 22:33ID:???
Perlでping撃ちたいんですけど、

プロンプトみたいに、撃つ回数
平均時間、最短時間、最長時間
を得ることができますか?
リファレンスみると、生きてるか死んでるか、しかわからないみたいなので・・・
0353 03/06/14 22:44ID:???
質問します。

アクセスログのファイルのファイルハンドルをFとすると

@line=<F>;

のようにするのは、よくないとどこかで見たのですが
ファイルサイズが小さい場合でも駄目なのでしょうか?
もしよかったとして、どれくらいのサイズまでなら大丈夫なのでしょうか?
もし過去ログにあるのならば、どのあたりの過去ログにあるかを教えて欲しいです。

よろしくお願いします。
0354nobodyさん03/06/14 22:47ID:???
>>352
system("ping");
0355nobodyさん03/06/14 23:03ID:???
>>353
小さきゃかまわないよ。
どのくらいのサイズまで大丈夫かなんて、環境によって違うので分からない。
「みんなはどれぐらいで線引きしてるか」の答えなら得られるかもしれない。
0356nobodyさん03/06/14 23:06ID:???
>>353
別に良くも悪くも無い
自分の用途によって使い分ける
0357nobodyさん03/06/14 23:11ID:???
>>349
「プロトタイプ」でググってみりる。
0358 03/06/14 23:19ID:???
>>355
>>356
レスありがとうございます。
なるほど、確かに環境によってかわりますよね。
では、どのくらいの大きさで区別をなさってるのでしょうか?

私は30〜50k程度のファイルでする予定です。
0359nobodyさん03/06/14 23:33ID:???
そんぐらいだと、一行づつ読んだ方がいいと思う。
0360nobodyさん03/06/14 23:33ID:???
>358
なんで差が出るかの理由を考えろ。
その方が早い。
0361nobodyさん03/06/14 23:35ID:???
ちなみに、私はカウンターとかダウンロード用のスクリプトみたいな、
かなり小データ以外は一行筒読んでます。
0362nobodyさん03/06/14 23:36ID:MAEKWf+y
SSIでCGIを呼び出そうとして失敗したときに
[an error occurred while processing this directive]
というエラー文が.sthmlファイルの中に出てくるんですが、
この文章を自由な文面に変更したり出来るんでしょうか?
0363nobodyさん03/06/14 23:42ID:???
シーケンシャルな処理でいいなら一行ずつ
ソートするとか、順序を入れ替えるとかしたいなら、一括で
0364 03/06/14 23:55ID:???
>>359>>360>>361>>363

またまたレスありがとうございます。

>>359
なるほど、1行ずつのほうがいいですか。
変更はすぐできるのですが、15〜20kくらいのファイルでもだめでしょうか?


>>360
1行に記録するデータの項目がある場合と無い場合があるからです。
例えていったら、掲示板で名前だけ書く人と、名前もメアドも両方書く人がいる、みたいな。
0365nobodyさん03/06/15 00:01ID:???
>>364
大きさだけじゃない。
例えば、速攻で作らなきゃならない、使い捨てのスクリプトを占有サーバで実行するなら
数十MBでもやるかもしれない。
0366 03/06/15 00:13ID:???
>>365
レスどうもです。
有料ですがレンタル鯖なので他の人に迷惑がかからないように
1行ずつ処理した方がよさそうですね。
ありがとうございました。
0367nobodyさん03/06/15 02:55ID:???
ディレクトリの作成日時ってどうやって取得するんですか?
0368nobodyさん03/06/15 03:19ID:???
>>367
stat
0369nobodyさん03/06/15 04:19ID:???
セッション管理を一時ファイルを作る形で実現させたいと思っているのですが、
プロセス番号($$)のファイル名を作成させて管理する形式でユニークに
しようかと思っております。

プロセス番号で管理すれば、完全にユニークになると考えて宜しいのでしょ
うか。
まだまだ初心者のため、自信がありません。
どうか教えていただければありがたいです。
0370nobodyさん03/06/15 05:09ID:???
>>367
(stat("dir"))[9]
0371nobodyさん03/06/15 05:34ID:???
あ、、、
FFFTPで表示されてる、サーバーにあるディレクトリの作成日時と
(stat("dir"))[9] 使って取得した日時(unixtime)が一致してない・・・・・

なぜだろう
0372nobodyさん03/06/15 06:24ID:m8nOAT8L
サブルーチン名を変数にして実行する方法はありません
でしょうか。どうもうまくいきません。
0373nobodyさん03/06/15 06:39ID:???
>>372
こういうやつ?

$foo = \&bar;
$foo->();

sub bar {
print "manko";
}
0374nobodyさん03/06/15 10:52ID:???

$hoge = "test";

&$hoge;

sub test{

}
0375nobodyさん03/06/15 17:55ID:fAURPzIq
CGIを転送したつもりなのに、
機能してませんよね。以下↓
http://www.keddy.net/~gekiya77/ore_plus_v02-04-16/
原因が分かるのならば、教えて下さいませ。
0376nobodyさん03/06/15 18:08ID:???
>>375
パーミッションがない
0377nobodyさん03/06/15 18:51ID:???
>>375
マルチ先でも言われてるが、パーミッションに問題がある。
0378nobodyさん03/06/15 18:58ID:???
>>371
0379nobodyさん03/06/15 19:01ID:???
>>378
ディレクトリ作成なら (stat("dir"))[10] ではどうだ?
0380nobodyさん03/06/15 19:32ID:???
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
パーミッションがないパーミッションがないパーミッションがないパーミッションがないパーミッションがない
0381nobodyさん03/06/15 19:37ID:???
>>380
パーミッションって「許可」っていう名詞だよ。
「『実行パーミッションがない』と言え」って意味かな。
0382nobodyさん03/06/15 19:48ID:???
ミッションがないパー
0383nobodyさん03/06/15 20:01ID:???
釣られすぎ(w
0384nobodyさん03/06/15 20:07ID:???
>>380=>>383
苦し紛れの言い訳?
0385nobodyさん03/06/15 20:27ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。


煽りや荒らしは放置で
次の方どうぞ。
0386nobodyさん03/06/15 20:36ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。


煽りや荒らしは放置で
次の方どうぞ。
0387nobodyさん03/06/15 20:49ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。


煽りや荒らしは放置で
次の方どうぞ。
0388nobodyさん03/06/15 20:50ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。


煽りや荒らしは放置で
次の方どうぞ。
0389nobodyさん03/06/15 21:03ID:m8nOAT8L
>>373-374
ご返答有難うございます。
やりたいことは>>374さんのようなことなのですが、
このように実行すると、
Bad name after main:: at -.cgi
と出てしまいます。

use strictをはずせば回避はできるのですが、
いろいろと試してみたいと思います。
ご親切に有難うございました。
0390nobodyさん03/06/15 21:04ID:QzYzFnUN
みてね〜♪
http://www1.free-city.net/home/s-rf9/page004.html
http://www1.free-city.net/home/s-rf9/page005.html
0391nobodyさん03/06/15 21:20ID:???
>>389
%funcs = (
hoge => sub {return 1},
hage => sub {return 0}
);

$name = 'hage';
print $funcs{$name}->(), "\n";
0392nobodyさん03/06/15 22:12ID:???
>>379
それでもだめでした。
違う日付になってしまいます。
0393nobodyさん03/06/15 22:17ID:???
389とちょっとかぶっちゃうかもしれませんが、%{変数}でエラーが
出てしまいます。strictはずせばいけるのですが、、、
先生方、もしお分かりでしたら教えてください、、、
0394nobodyさん03/06/15 22:43ID:???
>>393
それはソフトリファレンスだからではないか?
変数の部分は文字列が入っている?

回避方法としては、
1.プログラムの構成を考え直す(ソフト・リファレンスを使わない)
2.no strict;を直前に入れる。
3.eval を使う。
などが考えられる。
0395nobodyさん03/06/15 22:45ID:???
>>392,>>393
>>1
>【投稿する際の注意】
>質問するときは内容をよく吟味してから投稿してください。
>
>1:自分はこう言う事がしたい。
>2:それでこんな風にやってみたが・・・
>3:それだとこんなエラーが出て上手く行かなかった。
>
>最低でも1と3が無いと誰も答えられないよ。
0396nobodyさん03/06/15 22:48ID:???
>>394
そのとおりでございます。
変数の部分には文字列がはいっております。
リファレンスから勉強しなきゃ駄目ですね。
本当にご親切に有難うございました。
0397nobodyさん03/06/16 00:08ID:CSJJat6/
指定したURLのソースを取得したいのですが、Perlで可能でしょうか?
もし可能でしたらやり方を教えてほしいです。
0398nobodyさん03/06/16 00:16ID:???
>>397
LWP
0399nobodyさん03/06/16 00:35ID:???
mkdir関数でディレクトリをパーミッション777で作成したのですが
755で作成されてしまいました。
ラクダ本を読んでみたところ
>数値MODEで指定したパーミッション(を現在のumask値で修飾したもの)を持つ
とあるのですが、umaskで修飾とはどういうことなのでしょうか?
原因の分かるかたがいらっしゃいmしたらよろしくお願い致します。

以下の様にやっています
mkdir( './dir', 0777 ) or die( "ディレクトリを作成できません\n" );
0400nobodyさん03/06/16 00:56ID:???
>> 399
print umask; # 現在値
my $umask = umask 0; # umask を 0 にし、前の値を退避
mkdir ...
umask $umask; # 元に戻す

see also: http://www.google.co.jp/search?q=umask&hl=ja&lr=lang_ja
0401nobodyさん03/06/16 00:57ID:???
>>397
普通にGETしても割と簡単だし、面白いからやってみるべし
■ このスレッドは過去ログ倉庫に格納されています