トップページ⇒php
668コメント250KB

自作CGIを評価するスレ

■ このスレッドは過去ログ倉庫に格納されています
0001Premature end of script headers : /this/thread03/04/05 12:47ID:tIET0nhf
自分の作ったCGIをみんなに評価してもらうスレだよ。言語は問わないよ。
よほどプログラムが短くないかぎりはアプロダにでもアップしてね。
0448nobodyさん03/08/31 02:27ID:6GeG39LL
ダメ出しきのん。

SAFE_MODEでさっそく引っかかったが
0449nobodyさん03/08/31 02:54ID:???
微妙な物作るな
0450ガイキチ厨房03/08/31 06:44ID:???

PHPでカウンタを作ってみたのですが、どなたかご意見下さい。

http://popup3.tok2.com/home/program/cgi-bin/uploader/source/File:0011.txt
0451nobodyさん03/08/31 11:38ID:???
こちら素人だが、ざっと読んで気づいた点を。
script書き始めなら上々の滑り出しだと思う。

■L38の $ip のダブルクウォートは意図不明。

■” と ’ が混在してるけど、このスクリプトで使われてる ” は上記をのぞいて ’ に統一可能。

■L41は、$newdata = $newcont . '<>' . $_SERVER['REMOTE_ADDR'] ; と書けば十分なのでは。

■関数名とレフトブラケットの間に半角スペースがあったり無かったりする。これは趣味だから
どう書いてもいいと思うが、普通は入れない。制御語(ifとかforとか)の後には入れる。そうすることで
関数と制御構造を見分けやすくする。カラーリング機能のないエディタではこの方が見やすい気もする。
いずれにせよ、どっちかに統一したほうがよいと思われ。

■切り詰めを忘れている。ので、現データが 13<>127.127.127.127 で上書きデータが、14<>25.25.25.25 だった
場合、14<>25.25.25.257.127 に。書き込んだ後で、ftruncate(); を使ってファイルを切り詰める必要あり。
0452nobodyさん03/08/31 11:40ID:???
■L29の rewind(); は意図不明。
ログファイルが壊れる(例えば 8424<>127.0.0.1420<>127.0.0.8420<>127.0.0.842の ように)から
入れたのなら、アイディアとしては◎だが、スマートな処理とはいえないかと。

■あと、排他制御にバグがあるのでは。
ロックがかかっていても、fopen(); も flock(); も、 warning や fatal error (noticeも) を吐かないため、
処理が続行する。排他制御になってもならなくてもこのスクリプトは処理を最後まで実行するので、flock(); は
ちゃんと働いてない。
実際には起こらないかも知れないが、論理上、ロックがかかっているために L32 の fgets(); が失敗して
$buf に false が入ってカウンターが0に戻る可能性がある。L26でロックが取れなかった場合、
つまり前のリクエストを処理中の可能性がある場合、書き込みをスキップするかスクリプトを終了
するかブロックモードで待機させる必要があると思う。http://jp.php.net/flockにあるとおり、flock(); は
失敗すると false を返す。

■同じ理由で、前のロックが邪魔してロックがかかっていないのに書き込みに進行してしまうことがある。
書き込みがいくつも重なると、dat の内容がが妙なことになる予感。ここらあたりを rewind(); が力技で
解消しているように見える。
0453nobodyさん03/08/31 21:50ID:???
本7に対してそこまでしなくていいのに
0454nobodyさん03/08/31 21:56ID:6GeG39LL
ちなみにサンプルページ

http://s2.arigato3.net/~hon7/blog/

ハイブリッドP2Pによるトラックバックを考えてます
0455nobodyさん03/09/01 00:56ID:???
まずsageろ
話はそれからだ
0456nobodyさん03/09/01 01:41ID:???
相変わらず発言が電波過ぎる…
0457ガイキチ厨房03/09/01 16:10ID:???
>>452

詳しく指摘していただきありがとうございます。
とりあえず''に統一し、関数名とレフトブラケットの間のスペースを
制御構造のみ入れるようにしました。

また、書き込み処理を行った後に、

 // ファイルを切り詰める
 ftruncate($fp, ftell($fp));

という処理を加えました。

ロックのバグについてなのですが、Googleで調べたところ、
flockはデフォルトでブロックモードになっているらしいのですが、

http://itbtech.itboost.co.jp/perl/perl_06.php

よろしくお願いします。
0458ガイキチ厨房03/09/01 18:57ID:???

すいませんURL間違えました。正しくはこちらです。

http://itbtech.itboost.co.jp/php/php_04.php
0459nobodyさん03/09/01 23:17ID:???
Perlでも評価してもらえます?
0460nobodyさん03/09/02 01:39ID:???
>>459
>>1
0461nobodyさん03/09/02 16:15ID:???
>457
ああごめん。Manualみたらおもっくそそう書いてあった、、。
flockでとまるから一般の環境なら多分大丈夫だね。
こっちの検証スクリプトの間違いなのでflockとrewindの話しはなかったことに。
秒間50リクエストくらいでは問題なかったです(php4.3.0 apache1.3.27 RHLinux)。
ftruncate ( $fp , ftell ( $fp ) ) ; は ( $fp , strlen ( $newdata ) ) ; なんちゅう書き方もある。
0462ガイキチ厨房03/09/02 19:51ID:???

なるほど、参考になりました。ありがとうございます。
0463nobodyさん03/09/03 02:03ID:6rADPhxn
とある会社の部活動のHPを管理している者です。

Web上で部の共有資産の貸し出し申し込み等の管理を行えるといいなぁ、と思いいろいろとCGIを探してはいるのですがなかなか見つかりません。
探しているのは、次のようなCGIです。

1.画面で借りたい物を選択・自分の名前・貸出期間等の入力、申し込み
2.画面上では「貸し出し中」等に表記が変化(それか削除されるなど、申し込みが行えない状態に変化)
3.sendmailが使えないサーバなので、申し込みがあったことをログに吐き出し、管理人が定期的にそれをチェックし貸し出す

こういうものです。
サーバはinfoseekのiswebでPerl、Python、Ruby、PHPが使えます。

ショッピングカートCGIを活用してもいいなと思ったのですが、sendmailを利用する物がほとんどで、上記のようにログにのみはき出す物はあったことはあったのですがシェアウェア(\15K!)でした。
それほど資産の数が多いわけでもなく、貸し出し回数もそんなに多くないので、15000円もかけるわけにはいきません。
出来れば無料、もしくは1〜2千円程度で利用できるCGIがありましたら、教えてください。

よろしくおねがいします。
0464nobodyさん03/09/03 04:27ID:???
>>463
>>1
0465sage03/09/03 12:28ID:Udj8Y4pI
>464

463です

え〜と。
スレ違いだ、ということですか…?

…すいませんでした。
0466nobodyさん03/09/03 13:26ID:???
sageはmail欄でw。
どっかに「こんなCGI探してます」的なスレあったハズだよ。
0467nobodyさん03/09/03 13:44ID:???
>>465
>スレ違いだ、ということですか…?
スレ違いじゃないと思うんだったら自作CGIへのリンク貼れよ。
自作CGIを評価するスレなんだからさ。
0468nobodyさん03/09/03 18:02ID:???
【CGI】こんなCGI探してますver.10【素材】
http://pc2.2ch.net/test/read.cgi/hp/1059878840/l50
Web製作板でつ。
046946303/09/04 00:28ID:???
>>464
>>467
ご迷惑をおかけしました。

>>466
>>468
そこに行ってみます。ありがとうございます
0470nobodyさん03/10/02 12:00ID:???
y
0471nobodyさん03/10/02 22:11ID:???
perlでRead-Write Lockを実装してみますた。

複数プロセスでの10,000件書き込み耐久試験もクリアしたっぽいです。
ただ、ちょっと遅いように感じるのですがどでしょ?

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
0472nobodyさん03/10/02 22:50ID:???
flockがあるし。
0473nobodyさん03/10/07 02:23ID:86/MwT3y
知識ゼロからがんばってXML化にこぎつけました。
スタイルシートだけでWebデザインが可能です。
PHP4+MySQL

http://arigato3.s36.xrea.com/x/bbs.php
0474nobodyさん03/10/07 03:18ID:???
>>473
すごいね。どのくらいすごいのかいまいちわからんけど。
どのくらい時間かかった?
0475nobodyさん03/10/07 04:42ID:???
>>474
http://pc2.2ch.net/test/read.cgi/hosting/1065223105/

以後放置で。
0476nobodyさん03/10/07 06:12ID:???
>>473
ダメXMLの見本として宣伝してもいいですか?っていうくらいダメなXML。
0477手裏剣03/10/07 06:29ID:???
だめ見本
http://www.muzie.co.jp/cgi-bin/artist.cgi?id=a016219
0478nobodyさん03/10/07 09:34ID:86/MwT3y
>>476=印刷屋をクビになったオヤジ
0479nobodyさん03/10/07 09:34ID:86/MwT3y
>>474
片手間で1週間ぐらい
0480nobodyさん03/10/07 18:52ID:???
> 知識ゼロからがんばって XML化にこぎつけました。
            ___Λ____
           |知識ゼロのまま|
0481nobodyさん03/10/07 21:30ID:???
常識や社会性は?
0482nobodyさん03/10/08 10:35ID:???
よいXMLの見本が見たい。
0483nobodyさん03/10/19 04:34ID:faEGA12Q
●●●マスコミの 「盗聴/盗撮」 は許されるの?その4●●●   http://natto.2ch.net/mass/kako/994/994602694.html
62 名前: 文責:名無しさん 投稿日: 2001/07/10(火) 12:21
小型盗聴器、電話盗聴、web(電子メール)盗聴、郵便物の開封、
集合住宅の隣に引っ越してきて壁に聴診器、または集音マイクを向ける。
関係者からの聞き込み、ごみあさり、ストーキングにより行動パーターンの把握、
行動パターンを調べた上での待ち伏せ。全部、人海戦術を使えば十分可能です。

323 名前: 文責:名無しさん 投稿日: 2001/07/30(月) 20:48
集団で盗聴なり、付きまといなり、身辺調査なりした後で、集めた個人情報を利用して、
メディアを通じて本人にしかわからないように「監視してる」とほのめかしたり。
待ち伏せや尾行などしておいて、本人の前で「監視してるぞお〜」と、嫌がらせをしてみたりする。
これを一定期間継続して繰り返す。
一定期間、上記の嫌がらせを繰り返すと、加害者がすでに嫌がらせをしていなくても、
被害者は、ずう〜っと嫌がらせが続けられてると思い込んでしまう。
(痴漢の被害者が、外であった人が全員痴漢だと思い込むのと同じ)
それと同じように、ここのスレッドに書かれている、盗聴した情報を二次利用する嫌がらせを
やっていないときでも、被害者は自分から自分と関わりがある
情報をメディアから探し出して自分に関係があるのではないかとこじつけてしまう(関係妄想)。
関係妄想を引き起こすように嫌がらせを行うそれ自体がマインドコントロールの一過程である。
被害者が関係妄想を引き起こした時点で今度は精神病にかかったと噂を流して、さらにからかう真似をする。
ノイローゼになるように追い込んで、更に自殺するように持っていこうとする。     
被害者がこういった心理状態になるのを嫌がらせの関係者は経験的に知っているのだろう。
0484nobodyさん03/12/07 15:31ID:ohQC6Gec
>>482
ここ
http://www.google.com/search?q=%E3%83%89%E3%83%A9%E3%82%A4%E3%83%9E%E3%83%86%E3%82%A3%E3%83%BC%E3%83%8B&ie=UTF-8&btnI=I%27m+Feeling+Lucky
0485nobodyさん03/12/09 13:27ID:Dust1o+d
すいません、午前中探したんですけど、見つかりませんでした。

パソコンと携帯3社兼用の掲示板で、スレッドまたはツリー表示でかつ
パスワードで入る人の管理が出来るCGIご存じありませんか?
スレッド、パスワードどちらかだけだとあったんですが・・・。
0486nobodyさん03/12/10 13:25ID:/scbZ0TM
誤爆でしたとさ
0487SERA03/12/10 21:19ID:cJpFW25/
箱庭諸島PHP版の改造版、箱庭諸島S.Eを今日公開配布開始しました。
0488nobodyさん03/12/12 00:32ID:???
で、評価しろと?
0489nobodyさん03/12/19 17:18ID:s0hPhfIy
http://erobon.e-un.jp/
これはどうでしょうか?
デザイン以外は自分で作りました。
0490nobodyさん03/12/19 19:33ID:???
>>489
ここはCGI評価スレです
0491nobodyさん03/12/20 01:11ID:A80S/toC
>>490
CGIです。
サーバーサイドで動いているのでCGIです。
もっと勉強してください。
0492nobodyさん03/12/20 01:18ID:???
>>491
titleタグはmetaの後に書いてくらはい
0493nobodyさん03/12/20 01:26ID:m9BC3a2H
>491-492 ネタは他所でやれよ馬鹿
0494nobodyさん03/12/20 01:27ID:A80S/toC
>>492
いま検索して調べたら
metaタグの後にtitleタグを書いてました。
0495nobodyさん03/12/20 02:56ID:???
>>491
あのね、見た目とかを評価してもらうスレじゃないの
ソースを公開してちょうだい
0496nobodyさん03/12/20 02:58ID:???
> サーバーサイドで動いているのでCGIです。

CGIは動いたりしない。
0497nobodyさん03/12/20 03:19ID:???
>もっと勉強してください。

悪代官が黄門様に無礼者と言ってるのを思い出しちゃったw
0498nobodyさん03/12/20 10:48ID:rKU28so3
>>496
CGIとはWEBサーバーがWEBブラウザからの要求に応じてプログラム
を起動するための仕組みです。

”CGIは動いたりしない。”
馬鹿か?
0499nobodyさん03/12/20 10:49ID:rKU28so3
>>498

俺は悪代官だよ~W~
0500nobodyさん03/12/20 13:51ID:???
>498-499
0501nobodyさん03/12/20 13:55ID:???
ヘタレが。
0502nobodyさん03/12/20 14:07ID:???
CGIはシステムでも仕掛けでもない。
インターフィエスの一仕様。

モジュールからプロセス作ることもできるが、
あれもCGI?
0503nobodyさん03/12/20 18:53ID:FBPjlTLi
>>502
どうせperl=cgiとか
まだ思ってるアフォだろ?
0504HTTP/1.1 200 OK03/12/20 21:23ID:???
unlessはほかの言語と混同するからやめれ
とか書いてある本があった気がする
ほかの言語を使わなければいいだけの話なのに・・・
0505nobodyさん03/12/21 00:57ID:???
>>504
マジ?

それって、if ははほかの言語と混同するからやめれというのと同じことだよね
0506nobodyさん03/12/21 15:53ID:???
汎用的なプログラミングの作法を身につける為なんじゃないかな?if だと他の言語でも大抵応用が効く。
同じような理由でperlの$_(暗黙の代入)はなるべく使うなとか書いてる本もあったよ。

0507nobodyさん03/12/22 08:45ID:???
>>506
なんだそりゃ?(藁
じゃあ混同しやすい elsif は使わないほうがいいってことか?
0508nobodyさん03/12/22 15:58ID:???
頭の弱いのが何人か・・
0509nobodyさん03/12/26 11:25ID:???
>>508
差別はイクナイ!
何国ってのがどこのことだか知らんが,何国の人に失礼だよ(藁
0510nobodyさん03/12/26 20:54ID:???
>>509
ハァ?
あたまのよわいのがなんにんか・・ って書いてあるが、どう読んだら何国の人になるんだ?

502,504,506,508が(ry
0511nobodyさん03/12/26 21:46ID:???
洒落だろ
0512nobodyさん03/12/27 06:08ID:???
>>510
「なにじんか」って読んだんだろ。>>511の言うように洒落だろうがつまらん。
0513nobodyさん03/12/31 15:09ID:OIDb7RDT
表計算ができるランキングCGIを作ってみたので評価お願いします。
http://ssr.xrea.jp

けっこういい出来に仕上がったと思うけど、初めての人は操作にとまどうかも
0514nobodyさん04/01/05 13:20ID:8h9t8BrG
>>513
落としたYo
とりあえず使えそう・面白そうな物だったら、朴らせてもらうわ(w
0515nobodyさん04/01/12 07:57ID:fR13iSUk
age
0516nobodyさん04/01/17 13:56ID:kOvCn6Ho
携帯&PC対応の掲示板作りました。
http://fine.tok2.com/home/moritomo/cgi/career/career_bbs.cgi
です。
0517nobodyさん04/01/17 14:22ID:???
>>516
それで金を取ろうと思う神経を疑うよ
0518nobodyさん04/01/17 18:12ID:???
上と下に出てる「1」って何だ?
0519nobodyさん04/01/17 19:01ID:???
>>516
http://fine.tok2.com/home/moritomo/cgi/accesstakelog.txt
http://fine.tok2.com/home/moritomo/cgi/admin_remote_log.txt
http://fine.tok2.com/home/moritomo/cgi/akusesu.txt
http://fine.tok2.com/home/moritomo/cgi/countlog.txt
http://fine.tok2.com/home/moritomo/cgi/hatugen.txt
http://fine.tok2.com/home/moritomo/cgi/newaccesslog.txt
http://fine.tok2.com/home/moritomo/cgi/newcount.txt
http://fine.tok2.com/home/moritomo/cgi/newdomain.txt

以下略


ヴァカですか?
0520nobodyさん04/01/17 19:15ID:???
>>516
ディレクトリ丸見えだねぇ
0521nobodyさん04/01/18 02:22ID:???
ところで、ちゃんと評価してるのって最初のほうだけだね。
0522nobodyさん04/01/18 03:41ID:???
>>521
・ここは見た目じゃなくコードを評価するスレだ。
・use strict; しろ。
・perlstyle 読め。
・デカいの持ってきても面倒だから読まんぞ。

…のどれかに該当していたら、まともなレスは返ってこない。
0523nobodyさん04/01/18 21:22ID:???
コードの見た目を評価するスレの間違い。
0524>>51604/01/25 15:17ID:yPaa9elS
DirectoryIndexの設定をしているtoktokも問題かと思うが。

Forbiddenにしたみたいだけど、
せめてファイル名変えなよ。
0525nobodyさん04/03/06 14:54ID:???
誰も居ない……ケチつけるなら今のうち。

if-elsifの書き方、
if{
..
}elsif{
..
}
より
if{
..
}
elsif{
..
}
の方が俺にとっては読み易いんだコンチクショー。
0526nobodyさん04/03/19 18:15ID:???
>>522
perlstyleなんて知らなかった…ありがとう、勉強になったよ。
0527nobodyさん04/05/03 22:01ID:???
>>526
> perlstyle
ハァ?
0528nobodyさん04/05/09 20:52ID:???
例えば既成の掲示板のCGIとかから

require 'axlog.pl';
AxLog::getlog('ログファイル名','ログ最大記録数');

の用に呼び出して使うアクセス解析。

何となく作ったんですが評価お願いします。

アクセス解析 http://torihamlog.s55.xrea.com/search/axlog.pl.txt
ログビューワー http://torihamlog.s55.xrea.com/search/axlogv.cgi.txt

ここにログビューワを設置して、それにアクセス解析しこんでます。
リモホとかIPとか晒す事になるので困る人は見ないで下さい。
パスワードは 1234 です。
http://torihamlog.s55.xrea.com/search/axlogv.cgi

念のため…コレ呼び出すとログを削除します。
http://torihamlog.s55.xrea.com/search/dellog.cgi
052952804/05/09 21:13ID:???
すいません、上の奴.txtで終わってるのに何故か実行しようとしてエラーになるので
ファイル名変更しました。

アクセス解析 http://torihamlog.s55.xrea.com/search/axlog_pl.txt
ログビューワー http://torihamlog.s55.xrea.com/search/axlogv_cgi.txt

0530nobodyさん04/05/09 21:49ID:???
>>529
とりあえず axlog.pl をザッと見た感じ。

> 39: my $logfile = ($_[0]) ? $_[0] : "log.dat";
my $logfile = $_[0] || "log.dat";
か
my $logfile = defined $_[0] && length $_[0] ? $_[0] : "log.dat";

> 48: $ENV{'TZ'} = "JST-9";
local するか、呼び出し元と条件を揃える (設定しない) 。

> 58 〜 62
my($path) = $ENV{'SCRIPT_NAME'} =~ m|^(.*/)|;

ログに ASCII 以外の文字を吐くのはあまりお勧めしない。

あと axlog.pl.txt や axlog.cgi.txt でも「.pl」や「.cgi」は含まれて
いるので CGI プログラムとして動く。Apache のマニュアル参照。
0531nobodyさん04/05/09 22:26ID:???
>>529
axlogv.cgi 。

> 6: use vars qw/$pw $logfile $gzip_send $gzip/;
不要。

> 47 〜 53:
my $gzip = $^O =~ /Win/
  ? "gzip.exe -1 -c"
  : "/bin/gzip -1 -c"
;

> 69: if ($mode eq "css") { Style_Sheets(); }
わざわざ CGI で吐かせる理由は?

> 74: else { print "Status: 403 Forbidden\n\n"; exit; }
エラーメッセージを吐いた方が親切。

> 256: Content-type: text/plain; charset=Shift_JIS
text/css
053252804/05/10 19:23ID:???
>>530-531
評価ありがとうございます。
色々参考になります。

cssについてはファイルを一つにまとめたかったからです。
やっぱあんまり良くないですか?

>> 74: else { print "Status: 403 Forbidden\n\n"; exit; }
>エラーメッセージを吐いた方が親切。

if ($mode eq "css") { Style_Sheets(); }
elsif ($pass ne $pw) { Error('パスワードが違います。') }
elsif (($pass eq $pw) && ($mode eq "view") && ($ENV{'REQUEST_METHOD'} eq "POST")) { View(); }
else { Pass_form(); }

こうゆう風にしようと思っています。
0533nobodyさん04/05/11 00:31ID:???
>>532
・CSS を変更する為にスクリプトを編集する危険を冒す必要がある。
・外部に CSS を持つのに対し、常に二倍の回数実行される。
・CSS を使い回す時に悩む事になる。

これらのデメリットを考慮の上で、なお一つにまとめるメリットの方が
勝ると判断したならいいんじゃないか?
053452804/05/14 20:45ID:1r/FkAS3
>>532
自己レス
すげー馬鹿なこと書いていた

if ($mode eq "css") { Style_Sheets(); }
elsif (($pass) && ($pass ne $pw)) { Error('パスワードが違います。') }
elsif (($pass eq $pw) && ($mode eq "view") && ($ENV{'REQUEST_METHOD'} eq "POST")) { View(); }
else { Pass_form(); }

たぶんコレでいいかな…

作った動機はなんとなくなんだけど、実用性とかどうでせう?
一応CGIの設置とかできて、ほんのちょっとだけいじれる程度人向けのつもりです。
0535 ◆u2YjtUz8MU 04/07/02 01:32ID:???
いろいろわからんことだらけで作りましたが
添削して下しさい。
【スクリプト】http://www.tcn.ne.jp/~majima/dog/quiz.txt
【動作例】http://www.tcn.ne.jp/~majima/dog/quiz/quiz.cgi
0536nobodyさん04/07/03 23:32ID:???
>>535
むずい
0537nobodyさん04/07/04 05:07ID:???
>>535
とりあえず画像のファイル名を変えた方が良いよw
20点頂きました
0538nobodyさん04/07/04 05:12ID:???
>>535
もじゅーるは使えない鯖なんでつか?
使えるんなら使ったほうがいいでつよ。
Image::Magick、CGI、Jcode等々
何に使うのかは自分で調べてね。

EUCで書いたり表示したりしたほうがいいと思うけど、Shift_JISでやりたいのなら反対しないさ。

所々myを付けているが、どうせなら全部に付けちゃいな。
strictしろってこった。
ついでにHTML的にも4.01strict すれば?
0539ager04/07/09 18:40ID:???
age
0540nobodyさん04/10/08 20:39:40ID:HUGW4EIR
タイトル::時刻::内容\n

というようなデータが数行あるような場合
それらを読んできて切り分けるって処理を
してます。
これの評価お願いします。

sub split_data{

my @ref,@tmp,%hush;
@tmp = @_;

for (@tmp){
chomp;
($hush{title},$hush{time},$hush{contents}) = split /::/;
push (@ref,{%hush});
}

return(@ref);

}

@tmp = ("a::b::c\n","d::e::f\n","g::h::i\n");

@ref = split_data(@tmp)

for(0..$#ref){
print "title:".$ref[$_]->{title};
print " time:".$ref[$_]->{time};
print " contents:".$ref[$_]->{contents}."\n";
}
0541nobodyさん04/10/09 00:21:55ID:???
>>540
myで複数宣言するときは()がいる
hushじゃなくてたぶんhashね. 連想配列っていみなら

ハッシュのスライスを使うとエレガントかも
@hash{qw/title time contents/} = split /::/;

foreachつかえよ
for(...$#ref)
054254004/10/09 02:08:52ID:???
541>

>ハッシュのスライスを使うとエレガントかも
>@hash{qw/title time contents/} = split /::/;

ありがと、参考になりました。

my は複数でも()いりませんよ。バージョンによるだろうけど
最後に、今更foreach使ってる人いるんですか?w
0543nobodyさん04/10/09 02:43:14ID:???
>>542
#--- test.p ---
use strict;
my $foo, $bar, $baz;
__END__

> /usr/local/bin/perl -v
This is perl, v5.8.5 built for i386-freebsd-64int
<snip>
> /usr/local/bin/perl -wc test.p
Parentheses missing around "my" list at test.p line 2.
Global symbol "$bar" requires explicit package name at test.p line 2.
Global symbol "$baz" requires explicit package name at test.p line 2.
test.p had compilation errors.

> /usr/bin/perl -v
This is perl, version 5.005_03 built for i386-freebsd
<snip>
> /usr/bin/perl -wc test.p
Parens missing around "my" list at test.p line 2.
Global symbol "$bar" requires explicit package name at test.p line 2.
Global symbol "$baz" requires explicit package name at test.p line 2.
test.p had compilation errors.
0544nobodyさん04/10/09 03:20:52ID:???
>>541 >foreachつかえよ
>>542 >今更foreach使ってる人いるんですか?w

for と foreach は単なるシノニムなので、その表現は正しくないな。
foreach (LIST) BLOCK を for (LIST) BLOCK と略せるのと同様に、
for (EXPR; EXPR; EXPR) BLOCK を foreach (EXPR; EXPR; EXPR)
BLOCK と書いてもエラーにならない。

foreach ループを意味するところで foreach と「書け」という >>541 の
アドヴァイスは論拠の確かな正しいものだ。しかし Perl では C 風の
for ループを使う機会が foreach ループに比べて圧倒的に少ない上、
人間の目からも for ループと foreach ループの区別は容易なので、
砕けた流暢な Perl を目指すならこだわる必要のない部分だと思うな。
0545nobodyさん04/10/09 05:06:54ID:???
>>540
%hush(多分hash?)の宣言の位置。
GCのコストを考慮した場合に、変数の再利用をするはあるけど...、
ループないで初期化してないとフィールドの数が少ない時に困るよ。

split/::/の代わりに正規表現を使ってデータを切り出すと、
データのチェックとsplitを同時にできて便利。

chompはデータ格納前に済ませておいた方が良いんじゃないかな。chomp(@tmp)
もしくは、大抵はファイルから読み込むだろうからその時に。

054654004/10/09 05:35:12ID:???
>>544
どうもありがとう。foreachは普通に使えるんだろうけど、
大抵forで済ませてしまうのです。言い方悪かったです、スイマセン。

>>545
ありがとうございます。

>ループないで初期化してないとフィールドの数が少ない時に困るよ。
というのは、forのループ内で undef(%hush); (ほんとはhashでしたw)
でいいですか?
あと、フィールドの数が少ない時というのはどういうことでしょうか?

>split/::/の代わりに正規表現を使ってデータを切り出すと
どう書いたらいいのか思いつきません。宜しかったらご教授下さい。

>chompはデータ格納前に済ませておいた方が良いんじゃないかな。
そうですね。

open(FH,"file_name");
@tmp = <FH>;
chomp(@tmp);
close(FH);

054754104/10/09 11:14:32ID:???
言いたかったのはforeach (@ref)にしろよってことね
別にfor (@ref)でもいいかもしれんが
あと>>543読んだか? myは複数宣言するときは()いる

>>546
>ループ内で初期化
for(hoge){
my %hash;
statement;
}
こういう事だと思う
054854004/10/09 12:28:12ID:???
my () つけなくてもエラー出てないです。 という事は
省略も可って事ではないでしょうか?
■ このスレッドは過去ログ倉庫に格納されています