Perlコーディング初心者質問スレ Part 48
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/04/26(水) 18:00:50ID:RLbnve1J【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0381325
2006/05/12(金) 09:22:53ID:???Benchmark: timing 50000 iterations of No.330, No.332, No.344, No.345, No.346, No.366, foreach(338), grep(377), until(327)...
No.330: 3 wallclock secs ( 2.98 usr + 0.06 sys = 3.05 CPU) @ 16409.58/s (n=50000)
No.332: 4 wallclock secs ( 4.06 usr + 0.08 sys = 4.14 CPU) @ 12074.38/s (n=50000)
No.344: 3 wallclock secs ( 2.92 usr + 0.02 sys = 2.94 CPU) @ 17018.38/s (n=50000)
No.345: 3 wallclock secs ( 2.91 usr + 0.00 sys = 2.91 CPU) @ 17205.78/s (n=50000)
No.346: 3 wallclock secs ( 2.88 usr + 0.13 sys = 3.00 CPU) @ 16666.67/s (n=50000)
No.366: 3 wallclock secs ( 2.75 usr + 0.03 sys = 2.78 CPU) @ 17979.14/s (n=50000)
foreach(338): 3 wallclock secs ( 2.73 usr + 0.03 sys = 2.77 CPU) @ 18076.64/s (n=50000)
grep(377): 3 wallclock secs ( 3.08 usr + 0.05 sys = 3.12 CPU) @ 16005.12/s (n=50000)
until(327): 3 wallclock secs ( 2.84 usr + 0.03 sys = 2.87 CPU) @ 17391.30/s (n=50000)
個人的には>>376-377さんのgrepを使ったアルゴリズムが好きです。
注)
@dataが壊れる(壊れても構わないのですが)場合、結果がおかしくなるので
公平を期すため、全てのテストルーチンには@data = @backup;を入れています。
それが不要なアルゴリズムは、省けばさらに速くなります。
(昨日出したベンチマーク結果は毎回ファイル開いて読んでました…無駄すぎですね)
また、@dataにはchompが掛かっているので>>366さんからはそれを省いています。
0383325
2006/05/12(金) 10:03:29ID:???backup: 3 wallclock secs ( 2.72 usr + 0.02 sys = 2.74 CPU) @ 18281.54/s (n=50000)
謎です、これじゃ引き算出来ません。
benchmarkの測り方を間違えていたなんていう強力なオチがありそうで怖いですが…。
どこかにスクリプト自体をアップした方が良いですかね?
0384325
2006/05/12(金) 10:16:16ID:???何となくパス付き:perl
テストデータは同梱していません。
そこそこ大きいテキスト+末尾に4〜5空行を入れてtest.datとして保存して下さい。
0385nobodyさん
2006/05/12(金) 10:21:57ID:???>>327 >>344 >>345
popで配列の後ろから取り出して調べる
>>330 >>366
配列の後ろから添え字アクセスで調べる
>>338 >>346
配列を一旦reverseして、先頭から調べる
>>332
配列の先頭から調べる
>>377
grepで空要素を排除してから、最後の要素を取り出す
0386nobodyさん
2006/05/12(金) 10:43:29ID:???もちろんそのまま引き算できるわけでなく、たとえば 回数/s の逆数をとって一回あたりの
秒数をだして引き算するわけよ。
0387325
2006/05/12(金) 11:03:32ID:???まとめ、大変分かりやすいです。どうもありがとうございます。
>>386
なるほど、あの結果はあれでおかしくはないんですね。
とりあえずスクリプトは>>384でアップしましたので、お好きな方にカスタマイズは
お任せするつもりです。
0388nobodyさん
NGNG0389nobodyさん
2006/05/12(金) 13:08:04ID:???それは自分への言葉ですか?
分かってるなら消えろよカスwww
0390nobodyさん
NGNG0391nobodyさん
2006/05/12(金) 14:15:44ID:DNrRJ4oV0392nobodyさん
NGNGBe全体をあぼーんでもしてるのだろうか(笑)
0393nobodyさん
2006/05/12(金) 14:35:17ID:???0394nobodyさん
NGNG0395nobodyさん
NGNGファイル掲示板のcgiで、ファイルのDLカウンターを付けたい
編集対象個所
<a href=\"$i_Url/$ico\" target=_blank>
$i_Url ファイルの置き場所のパス
$ico ファイル名
置換したいcgi呼び出し
./downcon.cgi?down=http://ohayou.com/test.zip&name=test.zipファイル&hp=http://ohayou.com
私の書き換えたコード
./downcon.cgi?down=$i_Url/$ico&name=$icoファイル&hp=hp=http://ohayou.com
結果
CGI呼び出しエラーのページが表示されてしまう
何がいけないのでしょうか?
教えてくださいませ。
0396nobodyさん
NGNG改造スレ池
0397395
NGNGめげずに頑張ってみるものですね!
0398nobodyさん
2006/05/12(金) 17:25:50ID:???煮沸消毒しる!
0400nobodyさん
2006/05/13(土) 00:50:41ID:RdM+BVxRprint "Content-type: text/html\n\n";
print "こんにちは!\n";
↑これだとInternalServerErrorが出るんですが、
#!/usr/bin/perl -w
に書き換えると正常に『こんにちは!』と表示されるのですが、どうしてでしょうか?
-wはエラーがあったら表示、みたいに思いこんでたんですが…
0401nobodyさん
2006/05/13(土) 00:57:56ID:???-wはwarningオプションなのでエラーとはまた違います。
(こういう書き方はイカンとか、間違ってるかも知れないとかの警告)
それで、ぱっと見た感じ間違いは無さそう。
正常に表示されるスクリプトから、「 -w」の3バイトを丁寧に削ってまた試してみては?
0402nobodyさん
2006/05/13(土) 01:04:20ID:RdM+BVxRなるほど、Warningの略だったんですね。
アドバイス通りに『 -w』を削ってみました。
1バイトあたり1分ぐらいかけて慎重に削り、パーミッションも744にしたのですが、
やはり『 -w』が無いと動かないようです。
というか、MovableTypeを見ていて『-w』と書いてあるのを見てマネしたら動いちゃった、
って感じなのですが、『-w』をつけないと動かないってことはあり得るんでしょうか?
0404nobodyさん
2006/05/13(土) 01:12:21ID:RdM+BVxRなるほど、それが原因なんですか…
これも既出もいいとこかもしれませんが、仕事中なのでコッソリ教えてもらえるとうれしいです。
IEでFTP接続しているんですが、AsciiモードやBinaryモードを切り替えることはできるのでしょうか?
よろしくお願いします。
0405nobodyさん
2006/05/13(土) 01:14:24ID:???0406nobodyさん
2006/05/13(土) 01:29:23ID:RdM+BVxR普段はFFFTPを使ってるんですが、今使ってるサーバーはFFFTPだと
ファイル一覧が取得できないんですよね…
しかし、MovableTypeはIEでアップロードして動いたのに、不思議なものです…
スレ違いになってしまったので、このあたりで失礼します。
親切にありがとうございました。
0407nobodyさん
2006/05/13(土) 01:41:49ID:???スレ違いで難だけど一応ここまで聞いちゃったら…
ホストの設定の"NLST -Rを使って高速に再帰取得"を切ってみれ。
それで駄目なら"LISTコマンドでファイル一覧を取得"にチェックを入れてみれ。
#!/usr/bin/perl[CR][LF] だとOSは"/usr/bin/perl[CR]"というコマンドを起動しようとする。
よってそんなインタプリタは見つからないのでエラー。
#!/usr/bin/perl -w[CR][LF] だとOSは"/usr/bin/perl"に"-w[CR]"を渡そうとする。
perlはCRを無視して無事起動。そういや、どこかの入門サイトでエラーになることがあるから、
shebang行には#!/usr/bin/perl -と書けと言っている迷サイトもあったと聞いたな。
0408nobodyさん
2006/05/13(土) 01:56:30ID:RdM+BVxRありがとうございます。
おかげさまでFFFTPでファイル一覧が取得できてしまいました。
今までの苦労は何だったんだ、と怒りに震えるほど感謝しています。
今までの23年間の人生で初めて涙を流して感謝しました。
0409nobodyさん
2006/05/13(土) 10:11:20ID:???0410nobodyさん
2006/05/13(土) 19:48:15ID:???foreach $line (@list_hoge) {
my ($key, $value) = split ":", $line;
$hash_ref_hoge->{$key} = $value;
で、my がループ毎に実行されるのが気分的によくないです。
繰り返しブロック中の一時的な変数って、ブロックの中/外、どちらで
宣言するのが一般的なんでしょうか?中で宣言するとループ毎に別変数に
なってしまう(と思う)し、外で宣言すると my の意味が無い気がする。
0411nobodyさん
2006/05/13(土) 20:55:01ID:???{ my $hoge;
for(@fuga) {
}
}
0412nobodyさん
2006/05/13(土) 20:56:24ID:???そういう事じゃなかったらごめん
0413nobodyさん
2006/05/13(土) 21:28:32ID:???0414nobodyさん
2006/05/13(土) 21:49:46ID:???0415nobodyさん
2006/05/13(土) 21:56:02ID:vvOrsJnf#ちなみに、'chop'と'chomp'が混在してるスクリプトの場合です
0416nobodyさん
2006/05/13(土) 22:04:22ID:???chopとchompは意味が違うので、無条件に置き換えられるかどうかは不明
わざわざ混在してるとなると、置き換えられないかも
作者に聞いてくれ
0418nobodyさん
2006/05/13(土) 22:15:50ID:???それでいいんだよ。
その1周分のループの中でしか使わないし、その明言でもある。
違和感あると言うけど、ひょっとして「my付けろって言われたからつけてる」って程度の認識だったりしない?
0420410
2006/05/13(土) 22:33:22ID:???自分は >>414 と同じ考え方で質問に書いた書き方をしてるんだけど
「普通こう書くだろう」っていうのがあれば、と思い質問した次第です
(412 が「普通こう書く」なのかな?)
#あまり気にしないことにします。
0421410
2006/05/13(土) 22:52:39ID:???>>418 違和感は、
自分は「$key、$value はこの foreach ブロック(!=ループ)でワーク変数として使う」
つもりで宣言しているのに、ループ毎に別変数が生成されると、何か
変数入れるメモリがもったいないんじゃない?とか思ってしまう
からなわけです(貧乏性)。もしかしてループ毎に前のループの変数は
開放されるのかな? であれば問題ないな。
0422nobodyさん
2006/05/13(土) 22:58:00ID:???0423nobodyさん
2006/05/13(土) 22:58:15ID:???ループ中のmy宣言されてるものはその都度新しく生まれ変わってる別物です
0424nobodyさん
2006/05/13(土) 23:02:54ID:???その場合は、同じ変数を使い回す事になる。
split後の$key, $valueの文字列長が、ループ内でだいたい同じ程度なら
Cレベルでのreallocもあまり気にしなくて良くなる。
一方、ループ内に入れた場合は、変数のメモリはループ毎にヒープに返される。
最適化がどうなってるか分からないけど、
もしかしたら同じスカラを使い回しているかも知れない。
微妙な違い。多分、ループ外に置いた方が速い。
0425nobodyさん
2006/05/14(日) 01:28:41ID:???内側が基本。
外側で宣言しちゃったら値の局所化、名前の局所化どちらも意味なくなっちゃうじゃん。
このPart48スレで何回か話題なったから読み返してみ。
もちろん、ループの進行と共に変化していく系の変数なら外のスコープで宣言するしかない。
0426nobodyさん
2006/05/14(日) 02:15:49ID:EM3+kg+P$message =~ s/<a href="\.\.\/test\/read\.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n?\d+-?\d*" target="_blank">(>>\d+-?\d*)<\/a>/$1/g;
$message =~ s/<r>>>(\d+)-(\d+)<\/r>/<a href="..\/test\/read.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n$1-$2" target="_blank">>>$1-$2<\/a>/g;
$message =~ s/<r>>>(\d+)-<\/r>/<a href="..\/test\/read.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n$1-" target="_blank">>>$1-<\/a>/g;
$message =~ s/<r>>>(\d+)<\/r>/<a href="..\/test\/read.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n$1" target="_blank">>>$1<\/a>/g;
これの一部分から“n”を抜いても問題はないですか?
具体的には、次の部分を右のように変更しました。
一行目:n?\d+-?\d → \d+-?\d
二行目:n$1-$2 → n$1-$2
三行目:n$1- → $1-
四行目:n$1 → $1
これで動作異常とか出ることないですか?
0428nobodyさん
2006/05/14(日) 02:26:46ID:???抜いて問題があるかないかと言えば、抜いたら問題があるから入っているんでしょうとしか言えないです。
そもそも、何でnを抜きたいのでしょう?
見た限り、パラメータとして掲示板の投稿No.をn1〜n10みたいに示すためのnのようですが、
受ける側の処理もそれに合わせて書き直せばnを抜こうが何だろうが大概動きますよ。
0430nobodyさん
2006/05/14(日) 02:31:40ID:???>>427
なぜかn抜いても1見えますです。
>>428
抜かなかったら、ソース見たとき変な現象がおきるです。
たとえばこんな感じに。
<a href="../test/read.cgi/php/1146042050/n2-10" target="_blank"><a href="../test/read.cgi/php/1146042050/2-10" target="_blank">>>2-10</a>
<a href="..">が二個連続で表示されて、その片方にnを含むのが出ますです。
ちなみに、n消したら二個連続の表示ではなくなりますた。
0432nobodyさん
NGNG0434nobodyさん
2006/05/14(日) 02:48:47ID:???$message =~ s|<r>>>(\d+)-(\d+)</r>|<a href="\.\./test/read.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1-$2" target="_blank">>>$1-$2</a>|g;
$message =~ s|<r>>>(\d+)-</r>|<a href="\.\./test/read.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1-" target="_blank">>>$1-</a>|g;
$message =~ s|<r>>>(\d+)</r>|<a href="\.\./test/read.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1" target="_blank">>>$1</a>|g;
nは関係ないけど2行目以降はピリオドの前に\が付いていなかったのでとりあえずエスケープしてみました。
0435nobodyさん
2006/05/14(日) 02:51:43ID:???$message =~ s|<a href="\.\./test/read\.cgi/$FORM{'bbs'}/$FORM{'key'}/n?\d+-?\d*" target="_blank">(>>\d+-?\d*)</a>|$1|g;
$message =~ s|<r>>>(\d+)-(\d+)</r>|<a href="\.\./test/read\.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1-$2" target="_blank">>>$1-$2</a>|g;
$message =~ s|<r>>>(\d+)-</r>|<a href="\.\./test/read\.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1-" target="_blank">>>$1-</a>|g;
$message =~ s|<r>>>(\d+)</r>|<a href="\.\./test/read\.cgi/$FORM{'bbs'}/$FORM{'key'}/n$1" target="_blank">>>$1</a>|g;
まあ、追加で直した部分も関係ないでしょうけど。
0436nobodyさん
2006/05/14(日) 04:09:54ID:???0437nobodyさん
2006/05/14(日) 12:36:02ID:AA1LZHiiブラウザのオートコンプリート機能を一時的にOFFにするか、オートコンプリートのデータから特定のキャッシュを削除する事って
できるんでしょうか?
HTTPヘッダー・・では無いと思うんですが。
0438nobodyさん
2006/05/14(日) 12:52:19ID:???0439nobodyさん
2006/05/14(日) 13:12:35ID:???オートコンプリートをONにしているバカだから
マルチポストがどれだけ嫌われているかもわかんないみたいだな
しかも、糞IE専用機能でセキュリティもOFFにしていないと
危ういとの話なのに
サーバサイドでは無く、クライアントサイドしかもIEに特化
もうね、バカかとアホかと。もう白雉はネットに繋ぐべきではないとか。
| <input/form autocomplete="off">
`──────────┐ ┌───
, '´l, ..| ./
, -─-'- 、i_ |/
__, '´ ヽ、
',ー-- ● ヽ、
`"'ゝ、_ ',
〈`'ー;==ヽ、〈ー- 、 !
`ー´ ヽi`ヽ iノ
! /
r'´、ヽ
`´ヽノ
0440nobodyさん
2006/05/14(日) 14:15:59ID:???具体的には、30分ごとに指定されたURLをGETリクエストするという処理です。
完全にサーバー側で処理させて、クライアントからのアクセス無しに定期的に処理したいのですがやはり不可能でしょうか?
0442nobodyさん
2006/05/14(日) 14:18:12ID:???0443nobodyさん
2006/05/14(日) 14:21:02ID:???定期かよ・・・
cron or タスク(Winならだけど) or 定期的にURLアクセスするクライアントソフト
ハイ次
0444nobodyさん
2006/05/14(日) 14:23:58ID:???0446nobodyさん
2006/05/14(日) 14:28:44ID:???cronを使わずに一定間隔ごとにクライアントからの要求無しに処理をするのは不可能でしょうか?
0448nobodyさん
NGNG0450nobodyさん
2006/05/14(日) 14:56:04ID:???0453nobodyさん
2006/05/14(日) 15:46:38ID:???例をあげるとこんな感じです。
http://sports.livedoor.com/baseball/pro/players?o=d&p=b&q=1&s=3&t=1
打率や安打数などでそれぞれソート出来るようになっています。
方法があれば教えてください。
0454nobodyさん
2006/05/14(日) 15:57:03ID:???@sorted = sort{ $a[3] <=> $b[3]} split(/\t/, $data);
・・・おそらく間違ってるだろうな(;´Д`)
0456違うスレからきました
2006/05/14(日) 21:38:49ID:n3OZH3Uz$greeting = "こんばんは";
$name = "三島";
&prt_message2($greeting,$name);
sub prt_message2{
print "$_[0]、$_[1]さん","\n";
}
はコマンドプロンプトがでてきません
違いはフォルダが違うだけなんですが
どう対処したらいいでしょうか??
ダブルクリックで起動させようとしました
いつもperl command line interpreterで開いてます
物凄い速さでウィンドウが とじることまではわかりました
それをとめる方法はどうしたらいいでしょうか??
調べたらプロパティをいじくると書いてあったんですが
みても書いてありませんでした
CMDですよね??
よろしくおねがいします
0457456
2006/05/14(日) 21:40:34ID:VsACWTan0461nobodyさん
2006/05/14(日) 21:54:05ID:VsACWTanバッチがわからないけど調べるよ
0462458
2006/05/14(日) 21:54:53ID:???Perlについての質問箱 24箱目
http://pc8.2ch.net/test/read.cgi/tech/1146022352/346
0463nobodyさん
2006/05/14(日) 22:00:05ID:VsACWTanそれでもマルチになるの?
それならごめん
0464nobodyさん
2006/05/14(日) 22:01:20ID:VsACWTan0465nobodyさん
2006/05/14(日) 22:58:28ID:???0466nobodyさん
2006/05/14(日) 23:05:40ID:???0467nobodyさん
2006/05/14(日) 23:09:50ID:VsACWTan一応ぐぐったんですが
よろしくお願いします
0468nobodyさん
2006/05/14(日) 23:10:56ID:VsACWTanあの速さでは…
0469nobodyさん
NGNG0471nobodyさん
2006/05/15(月) 02:44:34ID:???コマンドプロンプトは開きっぱなしにしれ
でなきゃ実行結果を表示してくれるIDE(統合環境)を導入してください
0472nobodyさん
2006/05/15(月) 02:49:43ID:???HDDはSerial ATAなどではなくてIDE接続ですが、このことでしょうか?
0473nobodyさん
2006/05/15(月) 02:53:19ID:???0474nobodyさん
2006/05/15(月) 03:30:43ID:lq2mogk+俺の掲示板に組み込みたいんで、Rock54のスクリプト記述教えてくださいよ。
焼き部隊に所属してるあなたなら知ってますよね?
0475nobodyさん
2006/05/15(月) 03:31:40ID:???○石焼き部隊
0476nobodyさん
2006/05/15(月) 03:36:55ID:???0477nobodyさん
2006/05/15(月) 04:08:20ID:???0478nobodyさん
2006/05/15(月) 11:03:36ID:???http://e-words.jp/w/IDE-2.html
Perlに関係ないからね。
0480nobodyさん
2006/05/15(月) 23:27:09ID:FBQXjrwN2: それで↓こんな風にやってみたが・・・
if ($ENV{REQUEST_METHOD} ne 'POST'
|| read(STDIN, $post, $ENV{CONTENT_LENGTH}) != $ENV{CONTENT_LENGTH})
{ $postdata = $ENV{QUERY_STRING};}
・
・
のようなソースを別ファイルに書き込もうと(拡張子はcgiもしくはpl)、
$file = "$urltrip\x5F$mon$mday$hour$min$sec.cgi";
open OUT,">$file";
print OUT "#!/usr/local/bin/perl\n\n# トリップテスト\n\n";
print OUT "if ($ENV{REQUEST_METHOD} ne 'POST'\n || read(STDIN, $post, $ENV{CONTENT_LENGTH})\n";
↑こうやったら
3: $ENV{REQUEST_METHOD}などが書き込み元の値に代入されてしまう・・・。
ご教授おねがいします
0481nobodyさん
2006/05/15(月) 23:30:50ID:???■ このスレッドは過去ログ倉庫に格納されています