探検


自作CGIを評価するスレ

1Premature end of script headers : /this/thread
垢版 |
03/04/05 12:47ID:tIET0nhf
自分の作ったCGIをみんなに評価してもらうスレだよ。言語は問わないよ。
よほどプログラムが短くないかぎりはアプロダにでもアップしてね。
03/04/06 04:23ID:???
>>66
駄目ではない、用途によって使い分ける事が重要
03/04/06 04:23ID:???
#○ログファイル
$def_log_file = q[./log.txt];
これは納得できるが
#○一度に表示されるレスの件数。
#[3〜6]推奨。多く設定すると端末側で読み込めない場合があります。
$def_mess_page = qq[5];
こっちをダブルクオートで囲むのはなぜ?
数値をクオートで囲まれると変な気がする…
03/04/06 04:25ID:???
>>41
>>32
03/04/06 04:32ID:???
myは本当は局所的に使うためなのはしってるんだけど
どうしてもその前後で値が必要になったりすることが多いので
サブルーチンなら先頭に全部まとめて書いてる・・・
03/04/06 04:34ID:???
>>70
余りいい設計じゃないなぁ・・・
subは位置に依存しないものであるべき
7241
垢版 |
03/04/06 04:37ID:???
>>61
>・最初(〜300行目)のqqはなんだ?
qq自体の意味でしょうか…?qならシングルクウォートでqqならダブルです。
入力は、ご使用していただく方に任意で入力してもらいます。量が多くてめんどうな気がしますけど…。
>インデントがおかしいのと
>記述に一貫性がないのが気になるね。
つまり見にくいと…。私の中では今までで1番気をつけた記述だったりしますが…
頑張ります。
サブルーチンがそこそこ見られるのは良いと思う(ただ、もう少しstrictに書こう)
strictってなんだろう、汗。調べてみます。

>これは個人的な趣味だけど、俺はグローバルなオプションはハッシュにする。
>%option =(board_name => "hoge", max_mes => 50 ); みたいに。
そうですか、私はこの記述で
「グローバルな変数の先頭にmain」をつけ、
「ルーチンのみの変数の先頭にルーチン名」を付けたのですが、
名前が長くなりすぎて失敗してしまいました。

>>65
どうもです。

もしかしたら、返事を飛ばしてしまった方が居るかもしれませんがすみません。
明日からでも記述の整理をしたいと思います。

まだまだなにかありましたら、お願いします。ヒマな方は眺めてやって下さい。
当たり前ですが、全部読んで参項にさせてもらってます。
03/04/06 04:43ID:???
>>69
はい、これで行きます、トリップ。

>>68
もし、
#○一度に表示されるレスの件数。
#[3〜6]推奨。多く設定すると端末側で読み込めない場合があります。
$def_mess_page = 5;
とした場合、どこに入力したら良いか目で確認しにくいかと思いまして…。
数字なのでシングルではなく、ダブルで囲んでます。

なんて言うのか、入力する場所を
[ここ];
にしたら始めて設置する人でも分かりやすいと考えた結果こうなりました。
03/04/06 04:47ID:???
>>73
んー基本的なことを言わせてもらうと・・・
コメントでちゃんと書いとけば理解してもらえる範囲じゃないかと思うけどね・・・

それでわからないっていうのは相手する必要が無いような・・・(ぉ
03/04/06 04:48ID:???
>>71
激しく意味不明なやつになっちまったけど

sub saitama{
my ($value,$saitama,$hoge);
 foreach $value (@_){
  ($saitama,$hoge) = split(/,/,$value);
  if($saitama == $hoge){ return 1; }
 }
 return 0;
}

こんなやつもだめ?ってこと
03/04/06 04:53ID:???
って言うか最近多い「4」って香具師は「4番」ではなく、コテハン?
普通に紛らわしい。なんとかしてほしい。
03/04/06 04:55ID:???
このスレタイっておかしくない?

× 自作CGIを評価するスレ
○ 自作CGIを評価してもらえるスレ
○ 自作CGIを評価していただくスレ

じゃない?
7871
垢版 |
03/04/06 04:55ID:???
>>75
sub saitama{
 my $ret = 0;
 foreach my $value (@_){
  my ($saitama,$hoge) = split(/,/,$value);
  if($saitama == $hoge){
    $ret = 1;
    last;
  }
 }
 return $ret;
}
私ならこう書くかな
7975
垢版 |
03/04/06 05:00ID:???
まぁ意識しろって言われたら
漏れならこう書くんだけど

sub saitama{
 foreach my $value (@_){
  my ($saitama,$hoge) = split(/,/,$value);
  if($saitama == $hoge){ return 1; }
 }
 return 0;
}

78のコードと比べるとどっちのほうが
好まれるのかい?まぁ下らんと言えば下らないのだが・・・

>>73
use strict 使ってみたら?
8071
垢版 |
03/04/06 05:03ID:???
まぁ、書き捨てにするか後から見やすく書くかのレベルになる罠(w
03/04/06 05:05ID:???
>>66
普通の変数も無名ハッシュっていう位置づけじゃなかったっけ?
8237 ◆0wPZQfeVoI
垢版 |
03/04/06 05:07ID:t3fZoblF
>>76
非常にすみません。
Perlの極意スレの4番です。
もう沈んでどこかに行ったスレです。
なんとなくそのまま4でした、改名します、37です。
03/04/06 05:09ID:???
>>79
漏れは 何回も使う関数的なやつは結構まともに書いてるけど
本体が長くなるからただ分けただけのサブルーチン的なものだと
かなりだらしないわ。

一応strictなコードでmod_perlで動いてる
03/04/06 05:10ID:???
「出口は一つ」をかたくなに守るのは「gotoを意地でも使わない」と同様に愚行だ。
エラー処理でも
if (真) {
  if (真) {
    if (真) {
      # 何か処理
    } else {
      $ret = 0;
    }
  } else {
    $ret = 0;
  }
} else {
  $ret = 0;
}
より
if (偽) {return 0;}
if (偽) {return 0;}
if (偽) {return 0;}
# 何か処理
の方が圧倒的に見やすいだろう。だから俺は>>79だな。
03/04/06 05:12ID:???
「エラー処理を先にやれ」っていう格言をどっかで見た。

それ以上続けるのが無意味と分かっている場合に
だらだらと引きずるのは良くない。すぱっとreturnすべき。
8671
垢版 |
03/04/06 05:13ID:???
>>84
まぁ、別に好きなように書けばいいんだけど、
グローバル変数の値をサブルーチンから出力することもあるし・・・
それ以前に、どのレベルで言ってるかつーのが気になる所かもなぁ

ちなみにgotoは使わないよ。必要ないから(w
8737 ◆0wPZQfeVoI
垢版 |
03/04/06 05:15ID:t3fZoblF
>>84
なるほど、私は上のほうの書き方しますね..
やはり、コードが見やすいというのもプログラムの重要な要素に
はいるのでしょうか?
8879
垢版 |
03/04/06 05:16ID:???
>>84
それ書くなら
if(真 && 真 && 真){何か}else{return 0;}
だろうなぁ…

まぁ趣味でやってるプログラミングなんで
動いたら嬉しいって程度なんだが(w

>>83
関数だと割ときれいに書くな 漏れも
8971
垢版 |
03/04/06 05:21ID:???
>>87習慣づけしとけばスパゲッティなソースにはなりにくいのが作れると思うけどねん

returnは複数付けるのが一般的らしいな、覚えとこう
9079
垢版 |
03/04/06 05:22ID:???
>>37
貴殿のソースをみたんですが
653-669行・・・ これなんすか?(w
9137 ◆0wPZQfeVoI
垢版 |
03/04/06 05:26ID:t3fZoblF
>>89さん
そのためには1度しか使わない処理でも無駄にサブルーチン作って、
見やすくすることも必要でしょうか?
趣味で作るので、自分以外がソース読むことが無かったため
とりあえず、自分が読めれば気にしなかったのですが。
9237 ◆0wPZQfeVoI
垢版 |
03/04/06 05:29ID:t3fZoblF
>>90
エラー処理ですが、
if () { えらー1}
if () { えらー2}
if () { error }
としたほうがいいですかね?
9371
垢版 |
03/04/06 05:31ID:???
>>91 
慣れてない時は単純な処理にでもサブルーチンは作ってたけど、
今は、機能ごとにサブルーチンを作ってるって感じですね
同じ処理でも規模がおっきくないとそのまま書きなぐりすることがおおいです

9479
垢版 |
03/04/06 05:32ID:???
>>92
エラーで止める優先度あるの?

unless ($a < 100){&error("$aが100以下じゃありません");}
unless ($b eq 'GET'){&error("$bがgetじゃありません");}
〜〜
でいいと思うが・・・
9571
垢版 |
03/04/06 05:35ID:???
>>92
@error =(
 err1,
err2,
);

$error[$code];

みたいなことを最近よくするな(w
03/04/06 05:38ID:???
>>88
あっと、>>84の例ではエラー処理が同一に書いてしまったのでおっしゃるとおりなんですが、
エラー処理が失敗した段階によって異なると考えてくださいませ
03/04/06 05:40ID:???
×エラー処理が同一に
○エラー処理の部分に同一の処理を

プログラム言語の前に日本語勉強してきます。。。
9837 ◆0wPZQfeVoI
垢版 |
03/04/06 05:40ID:t3fZoblF
>>93
なるほどー。
私は2度以上行う処理で引数と返り値が必要なものをサブルーチンに
するようにしていますが、今回少し考え直そうかと。
03/04/06 05:43ID:???
つーか>>41の掲示板でかッ!
携帯用だと処理が細かくなって増えるのか?
10079
垢版 |
03/04/06 05:43ID:???
関係無いが・・・漏れはエラー処理の場合
第一引数は数値だよ第二引数になんかメモ
sub error内でエラーログに記録する内容とかを振り分けることができる
perlだけじゃないが でかいやつになると
エラーメッセージ一覧表だけで数KBになる・・
10137 ◆0wPZQfeVoI
垢版 |
03/04/06 05:43ID:t3fZoblF
>>94さん
確かにその通りです。
優先順位などありません..
10271
垢版 |
03/04/06 05:48ID:???
基本的にエラーメッセージって書かないなぁ(ぉ
規定外の値だとデフォルト値になるようにしてるなぁ
10379
垢版 |
03/04/06 05:49ID:???
人によってコーディングの仕方が
かなり違うことがわかったんで 今日は寝るサラバ

起きたら局所変数を意識したプログラムを書いてみよう。
10437 ◆0wPZQfeVoI
垢版 |
03/04/06 06:08ID:t3fZoblF
ちょっと修正しました。批判していただいた部分は
まだすべて修正できていませんが、一応アド載せときます。
BBS: http://hex51.darktech.org/cgi-bin/the/bbs.pl
SRC: http://hex51.darktech.org/the.txt

余談ですが、部屋がめちゃめちゃ寒いです..
10571
垢版 |
03/04/06 06:17ID:???
my $mini_cgi = './mini.pl';
my $cntfile = './count.dat';
my $log_dir = './logs';
our $lock_name = 'lock';
<中略>
my $t_h_width = 0;
my $t_f_width = 70;
my $name_size = $name_max - 4;
my $title_size = $text_cols;

この部分って全部グローバルだからourになっちゃうよん

my $hoge #グローバルと同意で無意味

{
 my $hoge; #○
 {
  my $hoge; #○
 }
}
みたいにブラケットで括られた中(サブルーチンでもなんでもいいけど・・・)で宣言した部分じゃないと無意味
10637 ◆0wPZQfeVoI
垢版 |
03/04/06 06:29ID:t3fZoblF
はい、実は上のほうですでに言われました。
さっさとourにしておきます。
10737 ◆0wPZQfeVoI
垢版 |
03/04/06 06:33ID:t3fZoblF
修正しますた。
108nobodyさん
垢版 |
03/04/06 06:34ID:???
ま、あせらずゆっくりいけやー。
03/04/06 06:52ID:???
どうもー。
取り合えず今日は寝てません。
110nobodyさん
垢版 |
03/04/06 08:06ID:???
my でスコープはファイル・パッケージ内に限定されるんだから意味はあると思うよ。
our にはならない。
別のパッケージから読みこんだりしてるのでなければ、
わざわざ our にする方が意味ないと思うけど?
111これ自信作だぜ
垢版 |
03/04/06 08:51ID:dTzeXpbT
修正しましたが何か?
112あぼーん
垢版 |
03/04/06 08:52ID:???
          ┌┬┬┬┐
    ―――┴┴┴┴┴―――――、
.  . /  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ ||    __________
  ./    ∧// ∧ ∧| ||      |||   ||  /
 [/____(゚_//[ ].゚Д゚,,) ||___|||   || <  こんなのが有りますた
. ||_. *  _|_| ̄ ̄ ∪|.|.       |ヽ.__||  \__________
. lO|o―o|O゜.|二二 |.|    救済病院 ||
 .| ∈口∋ ̄_l__l⌒l_|___|_l⌒l._||
   ̄ ̄`ー' ̄   `ー'  `ー'   `ー'
http://saitama.gasuki.com/koumuin/
113これ自信作だぜ
垢版 |
03/04/06 08:52ID:dTzeXpbT
↑追加
http://oasis.mininddns.net/
114これ自信作だぜ
垢版 |
03/04/06 08:53ID:dTzeXpbT
スマソ。スッペルミス
http://oasis.minidns.net/
115あぼーん
垢版 |
03/04/06 09:17ID:???
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/shinagawa/
116これ自信作だぜ
垢版 |
03/04/06 10:29ID:dTzeXpbT
http://oasis.minidns.net/
蜜柑性だけどな
117nobodyさん
垢版 |
03/04/06 10:35ID:???
[index.cgi:26:warn] Use of uninitialized value in concatenation (.) or string at /www/oasis/html/index.cgi line 26. [index.cgi:26:warn] Use of uninitialized value in concatenation (.) or string at /www/oasis/html/index.cgi line 26.
ってでてるよ>116
118nobodyさん
垢版 |
03/04/06 10:45ID:???
書き方まずかったかな?
>>71はブロックの外で宣言すると、例えばサブルーチンの中からでも参照できてしまうので
変数宣言する時は、スコープを絞って適切なブロック内で宣言しよう…と言っているのだと思う。
修正というか、むしろ改悪されえてるような・・・。
our にしてしまうと、他のファイルからも値を参照出来る様になってしまうので、

# つっこみたかったのは、
# > この部分って全部グローバルだからourになっちゃうよん
# my で宣言してるのに勝手に our にはならないよー。ってこと。


よくある方法だと、main関数(サブルーチン)を作るか、
単にブロックで囲む。(ラベルは別にいらないけど便宜上)
MAIN:{
my $foo = 'bar';
;
}


ちなみに、定数宣言なら変数にはせずに、
use constant LOG_DIR => './logs';
という風にしておくと、代入できないから
グローバルとか関係なく中の値は保証されるよ。
03/04/06 14:26ID:???
なるほど。
囲ってみます。
12071
垢版 |
03/04/06 15:01ID:???
>>118
>変数宣言する時は、スコープを絞って適切なブロック内で宣言しよう…と言っているのだと思う。

そいう意味.、言い方まずかったですな・・・
121nobodyさん
垢版 |
03/04/06 15:42ID:???
{}って
while{} foreach{} for{} sub{} {}
が?有効なの
if{}はどうなるの?
122nobodyさん
垢版 |
03/04/06 15:46ID:???
漏れはグローバル変数使いまくりだけど だめかい?
12371
垢版 |
03/04/06 15:49ID:???
>>121
基本的に {}で囲ってる部分は全部スコープになりますよん
if{}でも eval{}でも 一緒
ファイルの重複を避ける処理
 {
   my %count;
   @array = grep(!$count{$_}++, @array);
 }
これみたいに、スコープを作るために括る事もありますし
124nobodyさん
垢版 |
03/04/06 15:57ID:???
別に全部$hogehogeみたいなやつでいいじゃん
なんで局所変数とかみんなつかうの????
12571
垢版 |
03/04/06 16:00ID:???
>>124見通しが悪くなるから。
誤動作の元にもなりかねんし
126nobodyさん
垢版 |
03/04/06 16:05ID:???
>>125
でも配ってるやつってほとんどグローバル変数のみじゃん
12771
垢版 |
03/04/06 16:12ID:???
>>126だから自分で組んでるんだが?
グローバルがいいっていうなら、そうすればいいのじゃない?

自分だけでやっとればいいってのなら一向にかまわないけど、
複数の人がからんでくるとなるとそうもいかない
03/04/06 16:44ID:???
取り合えず少し直してみました。
今日はPHPで学校の掲示板を作るので
あまり変更はないかもしれません。

>>71さん
気をつけないと
if ($hoge eq 'hoge') {
 my $foo = 'hoge!';
}
print $foo;
この場合マズイですよね?
チョットmyについていろいろと試してみます。
12971
垢版 |
03/04/06 16:49ID:???
>>128
それはスコープの外に print $fooがあるので動作しない

if ($hoge eq 'hoge') {
 my $foo = 'hoge!';
 print $foo;
}
コレが正解
03/04/06 19:43ID:???
>>129さん
OKっす。
要はCのautoですよね?
131nobodyさん
垢版 |
03/04/06 20:10ID:???
myを使わなきゃダメって訳じゃない。
使った方が良いってだけで。
132nobodyさん
垢版 |
03/04/07 00:03ID:???
グローバルである必要がないならレキシカルを使うほうが
安全だし速度的にも有利だからね。
133nobodyさん
垢版 |
03/04/07 15:58ID:???
use vars使うのは反則?
134nobodyさん
垢版 |
03/04/07 16:14ID:???
ありじゃないの?
じゃなきゃそんなモジュール作らんよ。
135nobodyさん
垢版 |
03/04/07 18:46ID:???
>>133
使い方次第
136nobodyさん
垢版 |
03/04/07 22:42ID:???
localを使おう
03/04/08 16:35ID:???
すみませんがちょっと漏れのスクリプトを見てください。
ソートの練習なんです。
いちおう漏れの思っている動作しているのですが,突っ込むところがあれば,後学のために色々教えてください。

ソースはこちら,
ttp://members.tripod.co.jp/angeldayan/
使ったデータはこちら
ttp://members.tripod.co.jp/angeldayan/data.txt

要 cgi-lib.pl です。

たいしたものじゃなくてごめんなさい。
初心者なんで,これでも1週間かかっちゃったんです。
よろしくお願いします。
138nobodyさん
垢版 |
03/04/08 18:57ID:???
>>137
myとかの使い方覚えたほうがいいかも
まだはじめたばかりなのならPHPもいいかもよ

でスクリプトに関しては
ファイルをアップロードするわけでもないんだし
自前でデコードしよう。
03/04/08 19:02ID:???
>>137
漏れも挑戦してみていいかい?
03/04/08 19:45ID:???
疲れた。。とりあえずこんなん?
http://iwh11.hp.infoseek.co.jp/p/e/r/perldev/cgi-bin/upload/source/039.txt

PerlスクリプトなんでDOSから動かしてね
141nobodyさん
垢版 |
03/04/08 20:25ID:???
my, our でも変数のスコープは同じなんだけどなぁ。
varsプラグマ(v5.6以降だと our)を使うのは、
use strict 'vars'プラグマを有効にした時に、
複数のパッケージである変数を別のパッケージから使いたい場合、等。

no strict は、場合によっては反則 ...
142nobodyさん
垢版 |
03/04/08 23:45ID:???
そういえば、さっきmyとmyなしでベンチマークを行ったら
myの方が3,4倍遅かったのだけど…。メモリ消費は解らない。
14371
垢版 |
03/04/09 03:32ID:???
自分の趣味でリファレンスを使ってソースを書いてみた・・・
cgi-lib使ったことないからあてずっぽうだけど、かなりソース書きなおす事になったねぇ

ttp://iwh15.hp.infoseek.co.jp/p/e/r/perldev/cgi-bin/upload/source/041.txt
14471
垢版 |
03/04/09 03:33ID:???
>>143 8-9行目
if ($in{'rev'}){
my $script = 'http://' . $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'};

ココ逆だな・・・

my $script = 'http://' . $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'};
if ($in{'rev'}){
03/04/09 04:42ID:???
>>138
> myとかの使い方覚えたほうがいいかも
わかりました。勉強します。

> PHPもいいかもよ
perlと心中しまつ。

> ファイルをアップロードするわけでもないんだし
いやいや、今後画像をあぷすて貼り付けるつもりなので。。。
いつになるかわかりませんが。。。。。

>>144
うわぁ、ソースが綺麗でつ。
でも、動きません。。。。。
ローカルでは「ページを表示できません」で動きませんし、
サーバにあげてみた所、最初の画面は表示するものの、
情報のリンクのところが
http://サーバー名/$script?action=1&rev=1&n=0
って、$script そのままでつ。
結果は404でつ。
自分でも調べてみまつ。
14671
垢版 |
03/04/09 04:57ID:???
>>145 動かしてないからねぇ(w
穴ありまくりであろうかと
147nobodyさん
垢版 |
03/04/09 09:53ID:???
> そういえば、さっきmyとmyなしでベンチマークを行ったら
> myの方が3,4倍遅かったのだけど…。メモリ消費は解らない。

根拠を示さずに結果だけ取り出して言われても…。誤解されないかな?
my の何のベンチマークを行なったの?
ループ・ブロック内で変数を宣言して、そのオーバーヘッドを測っていた
なんて事はないよね?それとも、ホントに変数の参照・代入が3〜4倍もかかったりした?
148nobodyさん
垢版 |
03/04/09 10:12ID:???
>>142
myのほうが遅いというのはちょっと信じがたいな。
ブロック外から参照される必要がないからシンボルテーブルにも
登録されないし、むしろ速くなるはずだが・・・
03/04/10 04:22ID:???
>>146
$html =<<'EOT'; を $html =<<"EOT"; でOKでした。

なお、ローカルで動かない件は、cgi-lib.pl へのパスが違っていたというアフォが原因。
15071
垢版 |
03/04/10 05:35ID:???
>>149
シングルクオートよくやっちゃうんですよ〜(w
動いてよかったです
151nobodyさん
垢版 |
03/04/10 06:38ID:???
cgi-bin.pl って
確か、CGI.pmがサポートしてたはず・・・
標準モジュールだよ。

use CGI qw(:cgi-bin);
15271
垢版 |
03/04/10 06:41ID:???
>>151
自分で処理を書くもんでねぇ・・・
153nobodyさん
垢版 |
03/04/10 10:43ID:ljl/7aqx
ベンチマーク取って見たけど…明らかに my を使った方が高速。
-w と use strict 外して my も何も付けない場合とか、
our も試して見たけど。速度的には my < our < local って順番だったよ。

#! perl -w
use strict;
use Benchmark qw(:all);
my $count = 100;
my $code1="my \$code=1;"; map{$code1 .= "\$code++;\n"}(1..$count);
my $code2="local \$code=1;"; map {$code2 .= "\$code++;\n"}(1..$count);

timethese(1000,{
'Lexical' => sub {eval $code1},
'Dinamic' => sub {eval $code2}
});

----
Benchmark: timing 1000 iterations of Dinamic, Lexical...
Dinamic: 11 wallclock secs (10.60 usr + 0.00 sys = 10.60 CPU) @ 94.34/s (n=1000)
Lexical: 2 wallclock secs ( 2.14 usr + 0.00 sys = 2.14 CPU) @ 467.29/s (n=1000)
154nobodyさん
垢版 |
03/04/10 13:31ID:???
>>153
追試。

--- bench ---
use strict; use Benchmark;
my $loop = 5000;
my $code1 = 'my $code = 1;' . '$code++;' x 100;
my $code2 = 'local $code = 1;' . '$code++;' x 100;
timethese($loop, { '1_my' => sub { eval $code1 }, '2_local' => sub { eval $code2 } });
---

● ActivePerl Build 522 on Win98SE
Benchmark: timing 5000 iterations of 1_my, 2_local...
1_my: 4 wallclock secs ( 4.45 usr + 0.00 sys = 4.45 CPU)
Global symbol "$code" requires explicit package name at (eval 5005) line 1.
2_local: 8 wallclock secs ( 7.75 usr + 0.00 sys = 7.75 CPU)

● Perl 5.005_03 on FreeBSD 4.8R
Benchmark: timing 10000 iterations of 1_my, 2_local...
1_my: 6 wallclock secs ( 5.62 usr + 0.01 sys = 5.62 CPU)
Global symbol "$code" requires explicit package name at (eval 10005) line 1.
2_local: 11 wallclock secs (10.92 usr + 0.02 sys = 10.94 CPU)

● Perl 5.8.0 on FreeBSD 4.8R
Benchmark: timing 10000 iterations of 1_my, 2_local...
1_my: 4 wallclock secs ( 4.74 usr + 0.00 sys = 4.74 CPU) @ 2108.73/s (n=10000)
2_local: 18 wallclock secs (17.20 usr + 0.00 sys = 17.20 CPU) @ 581.55/s (n=10000)
155nobodyさん
垢版 |
03/04/10 18:05ID:???
>>121

if ( ( my $aho = $query->param('hogehoge') ) eq 'hoge') {
 $a =~ s/a/b/;
 $nazoflag .= $a;
} else {
# $ahoは見える。
}
# $ahoは見えない。


while ( defined ( my $line = <IN> ) ) {
# $lineは見える
} continue {
# 見える
}
# 見えない

こういう場合のスコープについては、その制御構文の最後までに限定される。←あいまいだな…
156nobodyさん
垢版 |
03/04/10 18:08ID:???
2行目が間違ってた。$aだとuse strictでエラーにならないから$ahoにしたんだけど、
これは、、sort用にこっそり、エラーにしないようになってるのかな。

追加、これはなかなか使える
foreach my $hoge (@list) {
}
157nobodyさん
垢版 |
03/04/10 18:36ID:ljl/7aqx
>>155
質問。continue って何?
158nobodyさん
垢版 |
03/04/10 18:58ID:???
man perlsyn
159nobodyさん
垢版 |
03/04/10 20:47ID:???
”次のループに移る前に実行されるブロック”であってる?
こんな制御構文あったんだ。知らなかった。Thx >> 158
160nobodyさん
垢版 |
03/04/10 20:58ID:???
うん。これは、nextとかを使うとき、行番号が確実に進むようにする、みたいに使う
03/04/11 00:23ID:???
なるほど
162nobodyさん
垢版 |
03/04/11 00:36ID:???
つまりはforの後処理か
03/04/12 20:17ID:???
再び。。。

すみませんがちょっと漏れのスクリプトを見てください。
前回のソートの練習に加え、ページの分割もしてみますた。
いちおう漏れの思っている動作しているのですが,突っ込むところがあれば,後学のために色々教えてください。

なお、前回指摘された “myとかの使い方” は。。。。。(^^A

ソースはこちら,
ttp://members.tripod.co.jp/angeldayan/test.txt
使ったデータはこちら
ttp://members.tripod.co.jp/angeldayan/data.txt

要 cgi-lib.pl です。

たいしたものじゃなくてごめんなさい。
16471
垢版 |
03/04/12 22:26ID:???
>>163
登録データの件数が増えるのならば
sortの cmp と <=>のルーチンを考えたほうがいいかも
foreach(@keys){
if($_->[$n] !~ /^\d*$/){
$num_flug =1;
last;
}
}
データ量増えていくと、cmpを使う場合処理が遅くなる。

if($n= 4){
if($rev){
@keys = @keys[ sort {$keys[$b]->[$n] <=> $keys[$a]->[$n]} 0 .. $#keys ];
}else{
@keys = @keys[ sort {$keys[$a]->[$n] <=> $keys[$b]->[$n]} 0 .. $#keys ];
}
}else{
if($rev){
@keys = @keys[ sort {$keys[$b]->[$n] cmp $keys[$a]->[$n]} 0 .. $#keys ];
}else{
@keys = @keys[ sort {$keys[$a]->[$n] cmp $keys[$b]->[$n]} 0 .. $#keys ];
}
}
みたいな感じかになろうか・・・
16571
垢版 |
03/04/12 22:31ID:???
>>164
if($n= 3){
だな、このデータの場合
166nobodyさん
垢版 |
03/04/12 22:53ID:???
=なんですか?
レスを投稿する


ニューススポーツなんでも実況