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

【Perl】初心者コーナー Part19

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん03/02/09 00:24ID:s0tpWWxg
初めに→「perl」その物のスレです。

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

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


CGIだけど、なんか質問ある? Part 9
http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

あとは>>2-10
0002nobodyさん03/02/09 00:25ID:s0tpWWxg
[過去ログ]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html

[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0003nobodyさん03/02/09 00:25ID:BxWrsuOv
4!
0004nobodyさん03/02/09 00:25ID:???
[総合]
 ・Perl Com: http://www.perl.com/pub/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/

[お薦め]
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
 ・Perl Recipes: http://www.effectiveperl.com/recipes/
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
0005nobodyさん03/02/09 00:25ID:???
[Document&Tutorial]
 ・Perl News: http://www.news.perl.org/
 ・Perl Monks: http://www.perlmonks.org/
 ・use Perl; : http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
 ・use Object; : http://perl.infoware.ne.jp/
0006103/02/09 00:26ID:???
うげ part20 だった・・・
0007nobodyさん03/02/09 00:26ID:???
荒らしみたい・・・
0008nobodyさん03/02/09 00:27ID:???
>>6
致命的だな。。。
0009nobodyさん03/02/09 00:29ID:???
Part14のURL見つけてきた。

Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
0010nobodyさん03/02/09 00:29ID:???
>>9
乙。
0011nobodyさん03/02/09 00:40ID:???
前スレの>>992
lynx -sourceとかwget -q0をパイプしてopenして、
目的地までseekして、必要分read。
0012nobodyさん03/02/09 00:41ID:???
スレ建て乙
0013本7 ◆HON7/awDa. 03/02/09 02:17ID:???
またまたお願いします。

http://hon7.hp.infoseek.co.jp/cgi-bin/test/bbs.txt

http://hon7.hp.infoseek.co.jp/cgi-bin/test/trip.txt

を組み合わせて掲示板にトリップ機能を付けたいんですがどこにどう入れたらいいのかわかりません。
またどいう加工とが必要でしょうか?

もし他に2ch仕様のトリップ付く方法があればそちらでも結構です。
よろしくお願いします。
0014nobodyさん03/02/09 02:25ID:???
Perlのプログラムで、何かのデータを書き出したい時に、
テンポラリファイルを作ってそこにデータを書き込んでからrenameして、実際のデータファイルとする、
という作業がありますが、
この作業はSDBMなどのデータベースを扱っている場合でもすべきでしょうか?
0015nobodyさん03/02/09 03:22ID:???
これは間違ってる??

if unless while foreach for は制御構文
my our local return use require sub はキーワード
time localtime substr split join は関数
0016nobodyさん03/02/09 03:23ID:???
あ、よく考えたらuse requireは、普通に関数だな。
0017nobodyさん03/02/09 03:25ID:???
next lastは、キーワード?

困った。わけわからん。
0018nobodyさん03/02/09 03:49ID:???
>>17
名前付き単項演算子(フロー)
0019nobodyさん03/02/09 05:03ID:???
前スレ>>994

それでOKだよ。
my宣言する変数は基本的にすべて () でくくっておけば問題ない。
(ただし初期化したいときだけは注意)
0020nobodyさん03/02/09 08:23ID:???
>>13
改造公房
0021nobodyさん03/02/09 08:28ID:???
<input type="file"> で送ってもらったテキストデータの中身を
変数に代入したいんですがどうすればいいですか?

アップローダーとか参考にしたら、保存してしまうので
あまり参考にはならないのですが…

よろしくお願いします。
0022nobodyさん03/02/09 08:35ID:???
悪いこと言わないからやめときなさい。
0023nobodyさん03/02/09 08:59ID:BDYUFdWT
カート作ってるんですが、
<FORM METHOD="POST" ACTION="./cart.cgi" target="top">
てな感じでフレームで分割してかごの中身を表示したいのですが、
単体だとうまく動くのに、フレーム内だと、データを渡せないのか
確認画面でかごの中身が空になってしまいます。
ttp://openlab.ring.gr.jp/k16/htmllint/htmllintl.html
↑では、
<FORM> の属性 `TARGET` はあまり薦められない属性です。
と言われてしまいました。なんとかフレーム分割したいのですが・・・。
よろしくお願いします。
0024nobodyさん03/02/09 09:37ID:???
>>23
JavaScriptを併用する
と言ってみる
0025本7 ◆HON7/awDa. 03/02/09 13:10ID:???
>>13
>>13
>>13
>>13
>>13
>>13
>>13
>>13
>>13
>>13
>>13
>>13
>>13


何とかしてくれー!
0026nobodyさん03/02/09 13:16ID:???
>>25
【 スクリプト改造工房 PART 5 】
http://pc2.2ch.net/test/read.cgi/php/1028193595/
0027nobodyさん03/02/09 13:52ID:???
>>23
フレームセットのファイルをA、フレーム内のファイルをB,Cとすると、

action="A" target="_top" として、まずAが変数を受け取って
B,Cに変数を渡す下準備をする。もちろんAはCGIでなくてはならない。

Aは、B,Cを frame src="B?変数名=変数" てな感じで呼び出す。
B,Cはそれぞれ渡された変数を元に画面表示する。

>>24がいうようにJavaScriptやcookie使った方がいいだろうなぁ・・・
0028nobodyさん03/02/09 15:15ID:???
>25
トリップ機能のある掲示板のソース研究すれば?
配布してるのでもあるよ。検索してみれ。
00292303/02/09 17:10ID:XYLtLJwJ
ありがとうございます。
cookie使ってるんで、そのへんかなぁ・・・?
0030nobodyさん03/02/09 17:17ID:???
>>23
スレ違いっぽいけど、、
どんな形でデータの受け渡しが行われるかの
情報が無いのでなんとも言えません。

another-htmllintのあまり薦められない属性は、
loose.dtdで書いている限り無視で構いません。

>>25
トリップなんて好きな所に埋め込めばいい。
どうしてもというなら、キャップ処理の前後。
0031本7 ◆HON7/awDa. 03/02/09 17:27ID:???
>>30
トリップ処理の方の$inを$FORMに変えて入れてみたらざなぜかエラーに
ブラウザにエラー行返して見たらトリップ機能の2行目でエラーらしいんですよ。
なぜでしょうか?
0032nobodyさん03/02/09 17:38ID:???
>>31
「エラーになった」だけじゃ分からんよ。
エラーの内容を一字一句もらさず書いてくれ。
0033本7 ◆HON7/awDa. 03/02/09 18:10ID:???
すんませんBBSを開いてレスかき込みを行うと

Software error:
Unrecognized character \x81 at /home/h/o/n/hon7/cgi-bin/test/bbs.cgi line 398.

For help, please send mail to the webmaster (ops@infoseek.co.jp), giving this error message and the time and date of the error.

とでます。ソースは
http://hon7.hp.infoseek.co.jp/cgi-bin/test/bbs3.txt
を更新しました。よろしくです
0034nobodyさん03/02/09 18:18ID:+X3kwgjb
日本語検索は()←半角括弧が使えないのでしょうか?
$TEST = '(テスト)';
これをeucに変換して検索してもうまくいきません。
0035nobodyさん03/02/09 18:32ID:???
>>34
日本語検索って、具体的にどうやったの?
eucへの変換はどうやったの?
どううまくいかないの?エラーが出る?結果が変?
0036nobodyさん03/02/09 18:36ID:???
>>33
それは謎。とりあえず、
397行 my $trip;
406行 foreach my $key ('FROM', 'MESSAGE', 'mail') {
に変更。
0037nobodyさん03/02/09 18:46ID:???
>>33
398行 $FORM{'FROM'} =~ s/\◆/\◇/g;
もしかして、これで回避できるかも。
0038nobodyさん03/02/09 18:57ID:???
>>37
うちでその行だけテストしてみたけど、普通に置換できるんだよね。
なんでだろう。ソースの文字コードが違うのかな。

もしだめなら、これでどうだ。やってることは一緒。

$FORM{'FROM'} =~ s/\x81\x9f/\x81\x9e/g;
0039本7 ◆HON7/awDa. 03/02/09 20:15ID:???
おかげさまでなんとかトリップ機能が動きました。
でもまだ問題があってindexを開いた際にクッキー情報の名前もトリップ変換してしまい名前欄を
はみだしてしまいます。
396行の名無しさん処理のunless()のあとelse{}で398行〜425行のトリップ処理を加えました。
これを何行目あたりに入れることでこのバグを回避できますか?
自分でも悩んでるんですどうも全体の流れがつかめないもので・・


こちらでソースは更新しました。
http://hon7.hp.infoseek.co.jp/cgi-bin/test/bbs3.txt

よろしくお願いします
0040nobodyさん03/02/09 20:26ID:???
>>39
マルチポストすんなぼけ!
0041本7 ◆HON7/awDa. 03/02/09 20:37ID:???
あれ?誤爆ですた。すんません
0042nobodyさん03/02/09 21:07ID:???
2chのようなID制を作成したいんですが、どういった仕組みで動かせばいいんでしょうか?
自分なりに
1、 210.135.129.41 を点ごとに4つに分解
2、分解した後ろ3つと日付を掛ける [135] * [129] * [41] * [day]
3、数字からひたすらアルファベットに置き換える

としているんですが、全くランダム制がなく困っています
0043本7 ◆HON7/awDa. 03/02/09 21:17ID:???
>>42
2chだってランダム性は少なくてクラウンで同一の串なら同じIDだったような
0044nobodyさん03/02/09 21:21ID:???
>>42
IPを8ケタの16進数にして、日付を種(SALT)にしてcrypt、ってのはどうか。
0045nobodyさん03/02/09 21:45ID:???
>>43
あのね、クラウンは日付を種にしてないだけなの。
他の鯖は日付ごとに変わるでしょう?
0046nobodyさん03/02/09 22:04ID:???
crypt試してみました
どうやら先頭2文字がsaltそのままみたいですね
とりあえず、先頭の文字だけ切って表示するようにしときます
0047nobodyさん03/02/10 00:36ID:???
掲示板を作ってるんですが質問があります。
書き込みボタン押して本文が無かったらリロードというのをしたいです。
どうもうまくいかないみたいで・・・
ご教授お願いします。
0048nobodyさん03/02/10 00:46ID:???
>>47
どううまくいかないの?

上のほうにもあるけど、「うまくいかない」だけじゃわかんないよ。
どうなるか必ず書くこと。エラーメッセージもあれば書くこと。
0049nobodyさん03/02/10 00:46ID:???
if ($honbun eq "" ) { print "リロードタグ"}
0050nobodyさん03/02/10 02:56ID:???
>>14
0051nobodyさん03/02/10 04:15ID:???
>>50 >>14
SDBMにはロック機構がないようなので、
独自で排他処理をしないと駄目な感じですね。

ファイルロックで包む例。
ttp://cat.zero.ad.jp/mouse/download/log/dblog2/ezlog_cgi.txt

もしくは、MLDBM::Sync モジュールを使う。
http://www.perldoc.com/cpan/MLDBM-Sync-0.07.tar.gz.html
0052nobodyさん03/02/10 04:20ID:???
しかし、データベースファイルに
テンポラリファイルを使うのはいかがなものかと。
00535003/02/10 04:35ID:lunjJQvX
>>51さんのように
SDBMをファイルロックで包む例はよくあるんだけど、
>>52さんの言うように
テンポラリファイルを使う例があまりないみたいなので質問してみたんですが、
どうなんでしょうかね?

ファイルロックが完璧ならばテンポラリファイルを使う必要もないと思うんですが。
0054実は…51==5203/02/10 05:05ID:???
テンポラリファイル必要なしに同意です。

flockが不安定または使えない場合は、
symlinkとかmkdirの擬似的なロックでもいいと思います。
DBM処理系によっては複数のファイルを作成したりしますので、
テンポラリは結構面倒かもしれません。
0055超初心者03/02/10 11:47ID:MIMhYBnE
カウンターを作っていますがうまく行きません。
トータル・今日・昨日をカウントさせたいのですが、
昨日・今日が上手くカウントしてくれないです。
0056超初心者03/02/10 11:48ID:MIMhYBnE
#!/usr/bin/perl

print "Content-type: text/html\n\n";
$logfile = './1.txt';
$ENV{'TZ'} = "JST-9";
$mday = (localtime(time))[3];
open(IN,"$logfile");
$coall =<IN>;
$cotod =<IN>;
$coyes =<IN>;
$day =<IN>;
close(IN);
chop $coall;
$coall++;
if($mday != $day){
$coyes = $cotod;
$cotod = "0";
$day = $mday;
}
chop $cotod;
$cotod++;
open(OUT,">$logfile");
print OUT "$coall\n";
print OUT "$cotod\n";
print OUT "$coyes\n";
print OUT "$day\n";
close(OUT);
print <<"HTML";
累計$coall人<BR>今日$cotod人<BR>昨日$coyes人
HTML
0057nobodyさん03/02/10 12:33ID:???
>>56
改行の扱い方が悪し。
とりあえず下記の変更でも動くけれど、良くないね。全体的に見直すべし。

close(IN);
chop $coall;
chop $cotod;
chop $coyes;
chop $day;
$coall++;
if($mday != $day){
$coyes = $cotod;
$cotod = "0";
$day = $mday;
}
#chop $cotod;
0058超初心者03/02/10 14:42ID:MIMhYBnE
>>57さん
有難う御座いました。勉強になりました。
0059nobodyさん03/02/10 22:19ID:???
遅レスだしもう解決したみたいだけど、

>>33
Unrecognized character \x81 と来たときには全角スペースがないか疑え。
(全角スペースはシフトJISで\x81\x40)
0060nobodyさん03/02/10 22:57ID:0mJjU+k6
自分のWebフォルダに無いPerlプログラムを別のところから利用するには
どうしたらいいですか?
色々試してみたんですがやりかたがわかりません
例えば↓のチャットを、自分独自の
自動更新チャットに作りかえるにはどうしたらいいですか?
http://www.tcup6.com/cgi-localbin/chat8.cgi

(別のところからログファイルだけ更新できるようなイメージ)
0061↓新語03/02/10 22:59ID:???
”Webフォルダ”
0062nobodyさん03/02/10 23:04ID:???
彼方此方カキコするのはヤメレ
0063nobodyさん03/02/10 23:09ID:???
Webフォルダってのはアレですか?
自分のパソコンの中に作った「Web」っていう名前のフォルダですか?
0064nobodyさん03/02/10 23:15ID:???
わかんなければ、ぐぐる、これキホン(・∀・)!!
http://www.google.co.jp/search?q=+Web%83t%83H%83%8B%83_&ie=Shift_JIS&hl=ja&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0065nobodyさん03/02/10 23:31ID:???
>>64
なるほど。勉強になった。サンクスコ


Perlと何の関係が……
0066nobodyさん03/02/10 23:58ID:???
>>64
トップのページ
http://www16.u-page.so-net.ne.jp/xb4/katsumi/os/windows/webdav/
閲覧するとポートをガンガン叩いてくるんですけど…。
0067 03/02/11 04:31ID:???
0068nobodyさん03/02/11 12:23ID:1RQcCB3w
クッキーについて質問です。
掲示板を作っていて、
名前とメール部分のクッキーの設定は上手く行ったんですけど、
URL欄のクッキー情報が上手く保存されません。
調べてみたら、http:のコロンが原因だとかなんとか・・・?

どう対処したら良いのか教えて下さい。。
0069nobodyさん03/02/11 12:33ID:???
適当にエンコードしてみる。
0070nobodyさん03/02/11 12:48ID:???
>>68
http://www.2ch.netクッキーに
とクッキーに保存するんじゃなくて
www.2ch.net/
とクッキーに保存する
0071nobodyさん03/02/11 12:58ID:???
www.2ch.net/hoge::hoge.html
0072nobodyさん03/02/11 13:25ID:???
ぜんぜんperlと関係ないし。
0073nobodyさん03/02/11 13:37ID:???
テキストファイルに
-------------
aaa,bbb,ccc
ddd,eee,fff
ggg,hhh,iii
-------------
とあったとして、真ん中の行のみ書き換えるにはどうしたらいいんでしょう?
私のIQでは思いつきません
0074nobodyさん03/02/11 14:21ID:???
IQのことを考えるからできないのです。

こころの眼でみるのです。
0075行頭じゃなくてもソートできるの?03/02/11 15:22ID:QuXhKMT3
ふりがな,名前,郵便番号,住所

の列からなるCSVファイルを読み込んで
2番目以降の列(例えば名前の列)でSortしなおすことはできますか?
もしかして順番変えたテンポラリファイルを作らないとダメですか?
0076nobodyさん03/02/11 15:27ID:mp4tOM/v
cgiなどのファイルの記述で自分で初期設定する変数を
$set{top_path} = '../';
のように%setのハッシュにしてるのですが
こういうのって格好悪いですか?
0077 ◆hMJAPH9PWA 03/02/11 16:25ID:???
>>73
一度全て読み込み、書き換えてから書き戻すしかないね。

>>75
テンポラリファイルなんて使わなくてもできるよ。
データが巨大ならデータベースを使った方がいいと思うけどね。

>>76
格好はどうでもいいけど、
要素名のタイプミスをするとすぐ発見できないのが面倒かもね。
あと、若干だけど効率も悪いかな。
0078nobodyさん03/02/11 17:04ID:???
>>75
名前の列でソートするならこんな感じ。
データが多いとちょっと重いかもしれないが。
@hoge = sort { (split(/,/, $a))[1] cmp (split(/,/, $b))[1] } @hoge;

>>76
自分は最近それと似た方法で定数を記述してる。

my %const = {
  HOGE => '../',
  HUGA => 100
};

こんな感じで。
まあ、確かに効率は悪いけど、見た目がきれいだし、定数だというのが
はっきり分かるから。
0079nobodyさん03/02/11 18:28ID:???
>>78
どのバージョンにもつかえるわけないけど、
use constant {
HOGE => ’../’,
HUGA => 100,
};

とか書くのが美しくて速いと思う(インライン化されるから)
0080nobodyたん03/02/11 18:37ID:???
{} ではなくて ()
0081nobodyさん03/02/11 18:43ID:???
>>79
use constant は便利なんだけど、文字列の中では展開されないよね。
これさえなければもっと積極的に使いたいのだけど。
0082nobodyさん03/02/11 19:01ID:???
ファイルを読み書きするときのflockに関する記述として以下は正しいでしょうか?
open(OUT, "+<aaa.txt");
flock(OUT, 2);
print OUT "略";
close(OUT);
0083nobodyさん03/02/11 19:39ID:???
seekでファイルの末尾に移動してから書き込む。
00847503/02/11 20:10ID:???
>>78
激サンクス
0085nobodyさん03/02/11 21:39ID:???
>>81
use constant PI => 4 * atan2 (1, 1);
print "The value of PI is @{[ PI ]}.\n";
0086nobodyさん03/02/11 21:53ID:???
>>85
おお、そんな使い方ができたなんて初めて知ったYO!
今までconstantはコンパイル時に展開されるもんだと思い込んでた。
こんどから積極的に使ってみます。マリガトー
0087nobodyたん03/02/12 00:00ID:???
ちなみに、
use constant NOBODY => 774;

sub NOBODY { 774 }
ってするのと同じ。(constant.pm 参照)

0088nobodyさん03/02/12 00:34ID:9lI7mE1F
質問です。
$a = "aaaaaabababanfjfggkrwaafrwnlwa";
例えば$aの中に「a」と言う文字が何回現れるか数えられる関数はありますか?
0089nobodyさん03/02/12 00:37ID:???
>>88
それくらい自分でつくれば?
0090nobodyさん03/02/12 00:48ID:???
$count = $str =~ tr/a//;
009188 自己解決03/02/12 00:49ID:???
>>89
その回答からすると関数は無さそうですね。
0092nobodyさん03/02/12 01:05ID:???
>>85
print "The value of PI is ${\PI}.\n";
これじゃだめ?
0093nobodyさん03/02/12 03:08ID:???
>>92
いいらしいよ
0094nobodyさん03/02/12 06:41ID:???
>>86
print "The value of PI is @{[ PI ]}.\n";はconstant.pmの
中に書いてあるのをコピペしただけ。まあ、ドキュメントを
読みましょ!って事ッス。何故そうなるか?はperlrefを
見ましょ。これも、constant.pmの中に書いてある(藁
>>92 はその応用形ってことっしょ。
0095nobodyさん03/02/12 14:43ID:???
echo や print で生成したフォームからは値を受け取ることは出来ないですか?
0096nobodyさん03/02/12 14:46ID:???
すまん perlじゃなかった
0097nobodyさん03/02/12 18:49ID:60fo1D0F
($a,$b,$c) = (0,2,0) だとそれぞれの変数に代入できるのに
@{[($a,$b,$c)]}[0..2] = @{[(0,3,0)]}[0..2] だと無理なのはなぜですか?
↓みたいな感じです。

DB<10> ($a,$b,$c) = (0,2,0)

DB<11> print "($a,$b,$c)"
(0,2,0)
DB<12> @{[($a,$b,$c)]}[0..2] = @{[(0,3,0)]}[0..2]

DB<13> print "($a,$b,$c)"
(0,2,0)
DB<14> print @{[(0,3,0)]}[0..2]
030
DB<15> print @{[($a,$b,$c)]}[0..2]
020

0098nobodyさん03/02/12 20:29ID:???
($a,$b,$c) = (1,2,3);
print (@{[($a,$b,$c)]}[0..2] = @{[7,8,9]}[0..2]),"\n";
0099 ◆hMJAPH9PWA 03/02/12 21:33ID:???
>>97
[]演算子は引数のコピーによる配列リファレンスを作るからだよ。
つまり
@{[ $a, $b, $c ]} = (...)

my @tmp = ($a, $b, $c);
@tmp = (...);
と同じことになる。
01009203/02/12 21:34ID:???
>>93-94
ありがとん。perlrefに
>Here's a trick for interpolating a subroutine call into a string:
> print "My sub returned @{[mysub(1,2,3)]} that time.\n";
を見つけました。
constant.pmのコードからすると、>>87さんの言うと通りなので、
配列にするのが礼儀正しい方法みたいですね。
0101nobodyさん03/02/13 02:39ID:???
@{[]}は実行効率悪いよ
普通に、
print "My sub returned" . mysub(1,2,3) . "that time.\n";
の方がいいと思う
0102nobodyさん03/02/13 16:37ID:/En01Oe5
$moji1 = '111';
$moji2 = '110';
〜〜〜〜〜〜〜←ここの部分
$moji1 - $moji2 == 1

という風に文字列を数字に変換するにはどうしたらよいでしょうか?
0103nobodyさん03/02/13 16:47ID:???
質問です。

carrysun という携帯対応の掲示板(現在公開されていません)を使っています。

最近気づいたのですが、analogの結果を見ると 403エラーがたくさんでています。
access_logを見てみると、該当ディレクトリを GETしていてエラーがでています。

"GET /cgi-bin/csun/ HTTP/1.1" 403 xxx

このようなエラーです。
これがちょっとうざったいので、直したいのですが、csun.cgiを見てもどこで
そんなリクエストを出しているのかが掴めませんでした。

画像とかの指定かなと思ったんですが、何か調べる良い方法はありますでしょうか?
#ちなみにlocalのlinuxでテストできます。

何か簡単なアドバイスでも良いのでよろしくお願いします。
0104nobodyさん03/02/13 16:52ID:???
>>402
意味不明

>>403
http://www.google.co.jp/search?q=403+%83G%83%89%81%5B&ie=Shift_JIS&hl=ja&lr=
スレ違い。
0105nobodyさん03/02/13 16:53ID:???
>>104
意味不明なのはお前の方だ
0106nobodyさん03/02/13 16:54ID:???
>>104,105 ワラタ
0107nobodyさん03/02/13 16:58ID:???
>>403
/cgi-bin/csun/を代入している変数を探す。
その変数を探す。
0108nobodyさん03/02/13 16:58ID:???
>>103
ブラウザが勝手にルートたどったりするんじゃねーかな
関係ないかも知れんが、IEとかだとお気に入りアイコン探しまくってうざい
010910703/02/13 16:59ID:???
俺も思わず誤爆してしまった(藁
>>103だ。
011010403/02/13 17:03ID:???
ワリィワリィ
0111nobodyさん03/02/13 17:13ID:???
>>102
何もしなくてよい。
$moji1 = '111';
$moji2 = '110';
printf("\$moji1 - \$moji2 = %d\n", $moji1 - $moji2);
0112nobodyさん03/02/13 17:14ID:???
>>107
設定ファイル csun2.cgi を見るとサーバのディレクトリの設定は、

$server=qq|http://$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}|;

これしかありません。
なので、ディレクトリを見に行くことはないはずなんですが...

画像ファイルの設定も
$pc_title_img='';
になってますが、ちゃんと処理してあって、空の場合はテキストのタイトルを
表示するようになっています。

あとは、どんな理由があるのか???
0113nobodyさん03/02/13 17:15ID:???
>>102
s/〜〜〜〜〜〜〜←ここの部分//;
0114nobodyさん03/02/13 17:16ID:???
>>112
配布元晒せ
0115nobodyさん03/02/13 17:25ID:???
>>114
現在配布していませんが、

http://applejam.cool.ne.jp/

です。
011610403/02/13 17:31ID:???
>>115
そのエラーがさ、cgiに原因があるとする理由は何?
0117nobodyさん03/02/13 17:37ID:???
>>115
# 戻り先URLを設定 --------------------------------------------------------------------- #

$pc_home ='../pc/index.html';# パソコン 用
$ez_home ='../ezweb/index.hdml';# EZweb 用
$i_home ='../imode/index.html';# i-Mode 用
$j_home ='../jsky/index.html';# J-SKY 用
$astel_home='../imode/index.html';# ドットi 用
はどうなってる。
0118nobodyさん03/02/13 17:39ID:???
>>116
サイトアクセス数(200 OK)の1/4が403エラー
access_logを見ると前後に必ずそのスクリプトの名前が出てくる。

/cgi-bin/csun/csun.cgi 200
/cgi-bin/csun/ 403
/cgi-bin/csun/csun.cgi 200

のような感じです。

同じ掲示板を4つ位使ってますが、どの掲示板でもエラーが出ます。


スクリプトの問題以外だとブラウザから直接ディレクトリを指定する
というのが考えられますが、それ以外に403エラーがでる理由はありますか?
0119nobodyさん03/02/13 17:42ID:???
>>118
多分出力されたHTMLを見ればわかる。
0120nobodyさん03/02/13 17:43ID:???
csun/index.htmlでも置いとけば。
0121nobodyさん03/02/13 17:43ID:???
cgi-binはScriptAliasされているんじゃ・・・
0122nobodyさん03/02/13 17:45ID:???
>>119
前に調べたのですが、異常はありませんでした。

>>120
これが一番いいかも知れません。ちょっと試してみます。

>>121
すみません。ちょっと意味がわかりません。
012310403/02/13 17:46ID:???
>>118
なるほど。
そういった根拠があれば何も言うことはないっす。
例えばどっかからリンクミスなURLが貼られてしまったとかだと、
バンバンリクエストが来る可能性があるもんで。
0124nobodyさん03/02/13 17:47ID:???
>>122
ところで、あんたはどうしたいんだ?
403でなくなればそれでいいのか? /cgi-bin/csunへのアクセスがなくなってほしいわけじゃないのか?
0125nobodyさん03/02/13 17:50ID:???
ところでスレ違いだぞ。CGIスレでやれよ
0126nobodyさん03/02/13 17:53ID:???
>>124
すみません、説明不足で。はじめに言うべきだったのかもしれません。

csun.cgiは、掲示板として正常に動いています。

ただ、analogのレポートを見たときに、あまりに403エラーが多いので、
(先ほど書いたようにサイトのアクセスの1/4)なくしたいだけです。
多分、csun.cgiにアクセスするたびにほぼ毎回403エラーが出ていると
思います。

実害が出ているというより、ただうざったいから、というのと色々スクリプト
を見てもわからないので、知的好奇心から原因を知りたくなったから、という
理由からです。
0127nobodyさん03/02/13 17:54ID:???
>>126
どうしてそうなるのか調べたいのなら、>>120はなんの解決にもならないだろう。
0128nobodyさん03/02/13 18:06ID:???
perlと全然関係ないじゃん
0129nobodyさん03/02/13 18:09ID:???
perlでデバッグする方法はないのでしょうか?

どの行がこのGETのリクエストを出しているのかを調べる方法があるのかと思ったの
ですがないですかね?
0130nobodyさん03/02/13 18:12ID:???
ステータスコード403はHTTP_FROBIDDEN。
アクセスログのリファラでも調べろ。
以上終了。
0131 03/02/14 12:58ID:mtrOCq/2
http://www.vclub-4wd.com/letstry/try1.html
これか?
0132nobodyさん03/02/14 13:32ID:???
色々アドバイスありがとうございました。
access_log の リファラをonにして調べていたところやっとわかりました。

csun2.cgi にて $background ='.'; となっており、

csun.cgi にて

<BODY BGCOLOR="$bgcolor" BACKGROUND="$background" TEXT="$text" LINK="$link
" VLINK="$vlink" ALINK="$alink">

となっていたためでした。
こんなことで本当に申し訳ありませんでした。
色々ありがとうございました。
0133nobodyさん03/02/14 15:52ID:???
やっぱり出力されたHTMLを見ればわかる事柄だったんじゃないか・・・人騒がせな。
0134nobodyさん03/02/14 17:09ID:aS0shCzv
ええと、Perlからwindowsのパス付きの共有フォルダにアクセスしたいんですが、、、
パス付きでも、実行マシンから既にアクセスしていたり(パスワードを入力済み)
実行マシンと同じID/PASSだったりすると特別めんどくさいことはないんでsuga
open FILE,"\\IPアドレスとかマシン名\xxxxx";
で開けますよね。
ただ、上記の条件をみたなさな、単純にパスワードが付いてるマシンの共有フォルダに
アクセスする場合、スクリプト側では、ID/PASSはもちろんしってるんですが
どうすれば開けるんでしょうか?
0135nobodyさん03/02/14 17:46ID:???
>>134
WNetAddConnection2を叩く。これ以上は板違いだから適切な板に移ってくれ。
013613403/02/14 19:54ID:aS0shCzv
>>135
そのヒントから
Win32::NetResource
にたどりつきました。。。ありがとうございます。
0137nobodyさん03/02/14 21:52ID:nq8/avY5
ページ内でパスワードを入力して、
正しいパスワードが入力されたら別のURLにジャンプしたいのですが
どうすればよいのでしょうか?
指定のURLにジャンプできるコマンドとかありますか?
0138nobodyさん03/02/14 22:06ID:???
>>137
locationまたはrefresh
0139nobodyさん03/02/14 22:28ID:???
>>137
えーっと、ここPerlスレだよね。

……そんなコマンドはない。
0140nobodyさん03/02/14 22:31ID:???
ムキー!!!
0141nobodyさん03/02/14 22:37ID:???
goto LABEL
014213703/02/14 23:33ID:nq8/avY5
え〜と、locationってJavascriptですよね?
ですが、Perlのなかに具体的にどのようにlocationを組みこむかが分からないです。
ちなみに、下のHTMLから入力されたものをsample.cgiでチェックして、正しい名前とパスワード
だったら別のページ(仮にwww.sample.ne.jp/ok.htm)にジャンプしたいのです。

<HTML>
<HEAD><TITLE>サンプル</TITLE></HEAD>
<FORM ACTION='http://www.sample.ne.jp/test.cgi' METHOD='POST'>
名前<INPUT TYPE='text' NAME='NameBox' VALUE='' SIZE='50' MAXLENGTH='50'><BR>
パスワード<INPUT TYPE='text' NAME='PassWordBox' VALUE='' SIZE='50' MAXLENGTH='50'><BR>
<INPUT TYPE='submit' NAME='write' VALUE='送信'>
<INPUT TYPE='reset' NAME='cls' VALUE='消去'>
</FORM>
</BODY>
</HTML>
0143nobodyさん03/02/14 23:38ID:???
>>142
HTTPを勉強しる
0144nobodyさん03/02/14 23:49ID:???
>>142
HTTPヘッダーを勉強してみてください。
スレ違いなので、これくらいで。
0145nobodyさん03/02/14 23:53ID:???
まぁそう言わずに纏めて置こう。
他スレの皆さんにも迷惑になるので。

HTTP : header location
HTML : meta refresh
JavaScript : location.href

こんなもんでいい?
0146nobodyさん03/02/14 23:54ID:???
>>142
print "Location: http://example.com/hoge.html\n";
print "\n";
これをContent-Typeを出してる所と入れ替えてみよう。
それから、これがスレ違いであることを理解しよう。

>>143
HTTPっていうより、CGIの仕様なんだよぅ。
勝手にヘッダーを作り直してくれるという。。

nphスクリプト用:
print "HTTP/1.0 302 Found\n";
print "Location: http://example.com/\n";
print "\n";
0147nobodyさん03/02/14 23:59ID:???
あぁ。両方かも。HTTPとCGI
014813703/02/15 00:00ID:6NeqGII/
<META Http-Equiv='refresh' Content='0;URL=http://www~'>
で解決できました。
0149nobodyさん03/02/15 00:44ID:???
>>148
人の話聞けよボケ!
こういうのが一番イライラする。
0150nobodyさん03/02/15 00:54ID:???
このスレは以前からCGI質問にもそれなりに回答してきてたもんだから、
いまだにPerlと無関係な質問が絶えないんだよな。
まさに厨が厨を呼ぶ厨スパイラル状態。何とかならんのか。
せめて回答する側は、スレ違い質問への無視&誘導を徹底してほしいよ。
0151nobodyさん03/02/15 01:03ID:???
ここで取り扱う話題
1.perlのコードに関する話題
2.perlのインストールに関する話題
3.モジュール、ライブラリの話題

1はOKとして、2、3は駄目?
0152nobodyさん03/02/15 01:08ID:gnW2vWOc
最近perlを始めた超初心者なので、もしかしたら厨な質問かもしれませんがよろしくお願いします。
現在、へぼいゲームを作成していまして、その際にユーザのパラメータ(例えばHP,MP)を、
すでにあるuser[ユーザのID].datというファイルからget_userdata()で取り出したいと考えています。
その際に引数として($ユーザのID,$ユーザのパス)を渡して、それに応じて各ユーザのdatファイルから
値を取り出そうと考えているのですが、この「$ユーザのID,$ユーザのパス」をクッキーとして保存して
おいて、毎回get_userdata()を使用するときにクッキー情報を読むというのは、ゲームという観点からは
どうなのでしょうか?(セキュリティ面、改造など)

ユーザ登録でidとpassを取得しても、次のCGIに行くとその情報が消えてしまうので
他に方法があればご教授お願いします。
0153nobodyさん03/02/15 01:44ID:???
>>152
hiddenで渡し続けてみる(謎
0154nobodyさん03/02/15 01:44ID:???
っていうかよ。初心者はperlとcgiの区別つかないよ。
0155nobodyさん03/02/15 01:49ID:???
>>152
設計レベルの話はこっちへ。
http://pc2.2ch.net/test/read.cgi/php/1041530204/

>>154
区別の付く人間が積極的に誘導 or 徹底的に無視すればいい。
015615203/02/15 01:59ID:???
>>153-155
すみません…場違いでした。
0157nobodyさん03/02/15 11:09ID:???
>>155 無視すると半端な厨が回答する。
0158nobodyさん03/02/15 11:47ID:???
>>152
セッション管理でぐぐれ
0159nobodyさん03/02/15 12:51ID:FZQxbA/5
joyful.cgiにNGキーワード制限を追加しようと思って改造してみたんだけど、エラーが出ます。

local($flags)=0;# NGキーワード追加
$s_mes = $in{'comment'};
foreach (split(/\s+/, $ng_word)) {
s/\*/\.\*/g;
if ($s_mes =~ /$_/i) { $flags=1; last;}
}
if ($flags) { &error("投稿エラーです。"); }# ここまで

なにか間違ってる記述がありますか?
0160エラーが出ます。03/02/15 13:08ID:???
エラーが出ます。
0161nobodyさん03/02/15 15:21ID:???
>>159
文法的にはその記述は通る。みっともないけれど(w
あと、 >>160 の意味が分かるか?
ようするに何のエラーなんだよ。
で、「500 Internal Server Error と出ます」って応えたらそれ以降は放置だからな。
0162nobodyさん03/02/15 16:59ID:FZQxbA/5
>>161
どのようにエラー出ているか調べるにはどうすればいいのでしょうか。
Web上で実行させると500 ......と出る。これじゃ手かがりにはならないと言うのは分かるんですよ。
で、どのようにやれば詳細なエラーが出るのか分かれば・・・・・
0163nobodyさん03/02/15 17:20ID:???
CGIの話題はこちらへ?
http://pc2.2ch.net/test/read.cgi/php/1041530204/
0164nobodyさん03/02/15 17:36ID:FZQxbA/5
あれこれ悩んだんだけど、どうやら
if ($s_mes =~ /$_/i)
で、 =~ で右の方で変数を使ったらだめっぽいんですが、そうなんでしょうか?
試しに =~ /NGキー/ と文字そのままやったら行けるんですが、
=~ /$ng_word/ だと駄目と言う事はわかりました。
変数を使うにはどうすればいいのでしょうか?
0165nobodyさん03/02/15 18:21ID:???
>>162
http://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html

>>164
$s_mes =~ /$ng_word/i が駄目なのではない。
$ng_word の中身が問題だ。
joyful.cgi とやらがどんなスクリプトか知らんが、
ここに書いてある事が役に立つかも知れない。
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0166nobodyさん03/02/15 18:38ID:nMMOQiZ6
掲示板を作っているのですが、

タグが使える
改行はbrをしなくても自動で認識
携帯対応のほうはすべて無効
同じログを取得

このような掲示板はどのようにすれば作れるのでしょうか?
考え方だけでも良いのでアドバイスお願いします。
0167nobodyさん03/02/15 18:43ID:???
>>166
タグをそのままに
改行コードを<BR>に置換
携帯対応の何を無効にしたいのか書かないとわからない
何と同じログを取得したいのか書かないとわからない
016816703/02/15 18:44ID:???
ちなみにここはPerlそのもののスレッドなんで勘違いしないように
0169nobodyさん03/02/15 20:42ID:FZQxbA/5
>>165
ご丁寧にありがとうございます。
ですが、解決しました・・・

index($in{'comment'},$ng_word).....と書く事で動きました。

0170nobodyさん03/02/15 21:03ID:???
質問です。
1行につき50個の数値が,で区切られてい記録されているファイルが複数あります。
中身を読み込んで100個の数値(array1,array2それぞれ50要素)配列を返すsub read
を利用して数値を読み込みたいのですが、返ってくる数値のスマートな受け取り表記がわかりません。
どなたかご教授下さらないでしょうか。

($data[0],$data[1]....$data[99]) = &read("filename");
↑現状ではこのように書いています。

sub read{
open (IN,"<$_");
my @array1 = split(/,/,<IN>);
my @array2 = split(/,/,<IN>);
close (IN);
return (@array1,@array2)
}

なお、数値はそれぞれ10回程度計算で変更されたあとファイル再び書き込まれます。
0171nobodyさん03/02/15 21:21ID:???
>>170
> &read("filename");
ってエラーにはならないのか。

my @data = &read_file('filename');

sub read_file{
open (IN,'<$_');
my @array = split(/,/,<IN>);
close(IN);
return (@array,@array);
}

・・・参照で返した方がいいかなぁ。
それ以前に日本語が判らんなぁ(w
017216903/02/15 21:27ID:???
>>171
ありがとうございました。

文字数制限に引っかかったので、文削っていくうちに
わかりづらくなってましたね。

すみません。
017317203/02/15 21:28ID:???
名前が169になってた…。
170です。
0174nobodyさん03/02/15 22:31ID:???
>>172
http://pc2.2ch.net/php/SETTING.TXT
長文になるときはこちらを閲覧してみてください。
制限は2048文字になっていますね ニヤリ
0175nobodyさん03/02/15 22:34ID:???
shift-jisだから、1024文字だね。
0176nobodyさん03/02/15 22:36ID:???
>175
それも違う。2048byteだ。
0177nobodyさん03/02/16 01:27ID:IEb+jUgz
もしかしたら言語の問題ではないかもしれないのですが、ここで質問させていただきます。
htmlからフォームの値をpostで送信して表示させたいのですが、
ローカル(ActivePerl、アパッチ使用)でやると対象CGIがテキストで表示され、
実際にサーバーにUPするとInternal Server Errorになります。
対象ソースの該当部分は以下のとおりです。
#!c:/perl/bin/perl

require'./cgi-lib.pl';

&ReadParse(*input_data);

$a = $input_data{'a'};
$b = $input_data{'b'};
$c = $input_data{'c'};

スレ違いでしたらすいません。
0178nobodyさん03/02/16 01:50ID:???
>>177

ローカル環境のActivePerlは使ったことないんで分からんが、
リモートサーバで、そのperlのパスではまず動かないね。
permissionも確認しれ。
あとprint "Content-type: text/html?n?n";などのヘッダの記述がない。

後は他でやれ。
0179nobodyさん03/02/16 01:52ID:???
#! /usr/bin/perl

print "Content-type: text/html\n\n";
require './cgi-lib.pl';
&ReadParse(*input_data);
0180nobodyさん03/02/16 02:04ID:???
すんません、177さんと似てる問題なんで、便乗させて下さい、、、。

外のサーバで動かしてたCGIをローカルにもってきました。
ローカル環境はWin2K+Apache2+ActivePeal5.8です。
Peal自体は実行できているんですが、(カウンターや掲示版の表示)
書き込みをしようとすると、反応しなくなってしまいます。

どうもPOSTのアクションをさせようとするとこうなってしまう
様なのですが、どうにも分からなくて、、、。
考えられる原因などお分かりの方いらっしゃったら
御指導ください。

タスクマネージャーでプロセスの確認をするとperlの占有率が98%
とかになってしまってるし、killしようとすると拒否されてしまいます。

018117703/02/16 02:06ID:IEb+jUgz
>>178
さっきのは一部なので当然下のほうにはヘッダ記述等あります。
もちろんサーバーにあげる際はperlのパスは変えてます。
以下、さっきの残りです。
$c = $input_data{'c'};(ここまでは177の分)

print "Content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";
print "$a&$b&$c<br>\n";
print "</body>\n";
print "</html>\n";
0182nobodyさん03/02/16 02:17ID:???
>>181
小出しすんなや、ヴォケ
じゃーコードには問題無いつーことで、スレ違い。
エラーログでも見るんだな。
0183nobodyさん03/02/16 02:23ID:???
>>177

http://pc2.2ch.net/test/read.cgi/php/1014096840/309/

簡単な掲示板ソースでも見れ
0184nobodyさん03/02/16 02:31ID:0jPHodHR
mailto:のbodyの中で+を書いてもメーラーでは に置き換えられてしまいます。
どうすればよいでつか?
0185nobodyさん03/02/16 02:42ID:???
>>180
取りあえず
sudo kill -9

winで使えない関数とかなかったけ?flockとか...
perl5.8で動くように書かれてるの?

自分で書いたのじゃなければ、作者にフィードバックすれ。
んで、スレ違い。
0186 03/02/16 02:43ID:ah8+t8Vm
>>177
cgi自体ちゃんと動いてるの?
#! /usr/bin/perl
print "Content-type: text/html\n\n";
print "ok \n";
は表示される?

これは
0187nobodyさん03/02/16 02:45ID:???
>>185
少なくともwindows2000ならサポートしている。
Linuxなんかのflockとは挙動が違うみたいだけど
0188nobodyさん03/02/16 02:46ID:???
それにしてもPerlをPealと書くやつが多いな
018918003/02/16 02:59ID:???
早速のレス感謝です。

>Peal
逝ってきます。

>>185
たしかに自分でかいたものではないので(書けません、、、泣)
ひとます、perlのヴァージョンの線で考えてみる事にします。

>>187
他のflock使っているcgiが動いているので、
ご指摘のとおりやはり違う問題のようです。
flockのような関数が他にあるといった事はないでしょうか?
0190nobodyさん03/02/16 03:27ID:???
winNT系はflock大丈夫だけど、symlinkがだめ。
ファイルロックで使われてる。
019118003/02/16 03:30ID:???
今、別のCGIでPOSTするものを実行してみた所
先程質問させてもらったループのような症状にはならないものの
やはり書き込みが出来なかったので、もしかしたら
ApacheやWin2Kの設定の可能性もあると思うので、
そこらへんの板にも逝ってきます。

ありがとうございました。
0192nobodyさん03/02/16 06:25ID:???
>>184
Perlと関係ない質問すんなヴォケ
019317703/02/16 12:34ID:e43KuLNC
>>186
CGI自体は動いてます。
書いていただいたソースも問題なく表示されました。
0194nobodyさん03/02/16 14:46ID:???
ソートについて質問です。

@fname,@scorea,@average@scorej,@scoremにデータを入れた後、averageで
降順にソートしようと考えています。
下のようなソースで、エラーは出ないのですが、ソートしても順番が変わりません。
@fnameは文字列、それ以外は整数です。
Webなどを参考に独学でやっているので、基本的なはずかしいミスなのかも
しれないのですが、よろしくお願いします。forとかもうまく使えないし・・・

@results = (
[$fname[0],$scorea[0],$average[0],$scorej[0],$scorem[0]],
[$fname[1],$scorea[1],$average[1],$scorej[1],$scorem[1]],
[$fname[2],$scorea[2],$average[2],$scorej[2],$scorem[2]],
[$fname[3],$scorea[3],$average[3],$scorej[3],$scorem[3]]
)

@sortresults = map {$_->[0]}
sort {$b->[2] <=> $a->[2]}
map {[$_, split /,/]} @results;

その他、
@sortresults = sort { (split(/\,/,$b))[2] <=> (split(/\,/,$a))[2] } @results;

やreverse sortも試したのですが、結果は同じ(@resultsのまま)でした。
0195nobodyさん03/02/16 15:43ID:???
split が全然必要ない。@results の中身を print してみろ
0196nobodyさん03/02/16 15:49ID:???
print @results;
ってことね
0197nobodyさん03/02/16 16:03ID:???
splitも必要ないけれど、それよりもmapの方から必要ないYO

@sortresults = sort { $a->[2] <=> $b->[2] } @results;
019819403/02/16 16:23ID:???
>>195-197
できました!ありがとうございます。
昨日1日悩み続けて無駄にしてしまったのに、こんなに簡単なこととは・・・
あとは複数キーのソートにするだけなので大丈夫そうです!
本当に助かりました。
0199nobodyさん03/02/16 18:40ID:???
$|=1;
my $pid = fork;
die $@ unless defined $pid;

if($pid){
 print "Content-type: text/html\n\n";
 print "$pid:処理中です<br>";
 local $eop = wait;
 print "$eop:処理が終わりました<br>";
 exit(0);
}
close STDOUT;
while(1){
 last if $tmp > 10;
 sleep(1);
 $tmp++;
}
exit(0);



上記は、forkのテストコードで
ブラウザへの吐き出しを先に行い
後ろで重い処理というものを狙っているのですが
子供の処理が終わるまで、一切の吐き出しが行われません…
コード自体はこれで合っていますでしょうか?

環境はWin32上のApache1.3.27と
ActivePerl5.6.1build633です。
0200nobodyさん03/02/16 19:24ID:???
#close STDOUT;
0201nobodyさん03/02/16 19:36ID:???
>>199
バングパスが無いとか言ってみる。
コマンドラインから実行してみれば分かりますよん。
0202nobodyさん03/02/16 20:05ID:6e2uXHNP
グワバババ
020319903/02/16 21:09ID:???
>>200-201
レスありがとうございます。

コマンドラインから実行してみるとうまくいくのですが、
ブラウザだと10秒後にやはりprintが実行されてしまいます。
close STDOUTをコメントアウトして実行してみたのですが
コマンドライン(成功)、ブラウザ(失敗)で
コメントアウト前と変わらずでした。

ちなみにperlへのパスは下記でしっかり通っております。
上記のソースからは抜いておきました。
#!c:\perl\bin\perl.exe

コードに問題がない場合、mod_perlやサーバの
バッファ関係の扱いの問題というのが想像できるのですが
この可能性はありますでしょうか?
020420003/02/16 22:30ID:???
んと、お役に立てず・・・・・・であります。
おっしゃる通り、バッファ関係と思われますが、サーバではなくクライアントサイドのブラウザの問題でしょう。

蛇足でした。。
020520003/02/16 22:45ID:???
あーうー、上記レスは無視してくださいませ。。sorry
020619903/02/16 22:45ID:???
>>204
細かいヒントが検索の糧にもなりますし
レスありがたい限りです。
環境周りをもう一度見直してみます。
ありがとうございました。
020720103/02/16 23:27ID:???
>>199
いろいろ実験しましたが、windowsのApacheではなぜかバッファされるようです。
SendBufferSizeディレクティブもうまくいきませんでした。

LAN上のFreeBSD 4.6+Apache1.3.27で試してみた結果、
直接出力されました。Unixに移行する事で回避できそうです。
020820103/02/17 00:02ID:???
>>202
頭がぼけて変な言葉つかってたYo!
逝って来る。
0209nobodyさん03/02/17 01:06ID:???
nph-hoge.cgiやtelnetからGETリクエストしてみても反応は同じなの?
021019903/02/17 01:28ID:???
>>207
なにやら手数をおかけしてしまったようで…
やっぱり環境上の問題なのですね。
生憎UNIXへ移行できるだけ環境にないのであきらめます。
でもコーディング自体、簡単なものですが
勉強になったので結果オーライです。

>>209
ためしにtelnetからGETしてみたら
変わらず同じ結果でした。
021120103/02/17 03:26ID:???
http://httpd.apache.org/docs/windows.html#use
>Windows 用の Apache バージョン 1.3 系では同期的な呼び出しが実装されています。
>このことは、バッファされていない結果が直ちにブラウザで見られないという
>CGI 制作者にとっては大きな問題の原因になります。
これっぽい。
0212nobodyさん03/02/17 05:09ID:SDV2BVg0
perlで作ったプログラムをexeで起動したいのですが、
どうやって拡張子を変更すれば良いのでしょうか?
ただリネームするだけでは無理だったのでお願いします。
0213nobodyさん03/02/17 05:35ID:???
無理
0214nobodyさん03/02/17 05:36ID:SDV2BVg0
無理なのですか?
perlで作成したexeを改造したいのですが…。
0215nobodyさん03/02/17 05:58ID:???
>>212で言ってることと>>214で言ってることが違うのだが.....
perlのプログラムをWindowsの実行ファイルにする方法ならある。
シェアウェアだがperl2exeってのがその1つ。検索してみ。
0216nobodyさん03/02/17 06:01ID:???
ttp://www.demobuilder.com/
Perl2Exe
0217nobodyさん03/02/17 06:04ID:SDV2BVg0
見つかりました。
ありがとうございました。
perlで作成されたexeの改造はどのようにして行うのでしょうか?
0218nobodyさん03/02/17 06:07ID:???
>>217
無理
0219nobodyさん03/02/17 06:10ID:???
ショートカット作ってwperlを起動するようにするんじゃダメなのか?
あとリネームして拡張子を変えても、周り(Windowsとか)の挙動が変わるだけで
中身は一緒でしょ。
0220nobodyさん03/02/17 06:15ID:SDV2BVg0
ごめんなさい。
初心者なのでよくわからないです。
.plは.txtにリネームしたら改造できますよね?
perlで作成されたexeをplに戻してtxtで改造、再度txtからpl、exeとするのはできないのでしょうか?
0221nobodyさん03/02/17 06:54ID:SDV2BVg0
ごめんなさい。
exeは改造できないみたいですね。
ありがとうございました。
0222nobodyさん03/02/17 07:49ID:???
( ゚д゚)ポカーン
もう少し勉強してから来て下さい
0223nobodyさん03/02/17 11:56ID:80mgjnJ4
( ゚д゚)ポカーン
0224nobodyさん03/02/17 13:32ID:4sj7P/C2
>>220
exeに書き出す前のPerlスクリプトを改造すればいいじゃない。
0225nobodyさん03/02/17 14:38ID:???
w32 には perlcc はないの?
0226nobodyさん03/02/17 16:00ID:???
PerlでCGI組んでるんですけど、
たくさんのCGIで共通処理があったので、
init.pl っていうライブラリにその処理を格納しました。

そうすると、 times で得られる実行にかかる時間が
少し大きくなってしまう気がするんですが
これは気のせいですか?
require すると、時間がかかるのは仕様なんでしょうか

よろしくお願いします。
0227nobodyさん03/02/17 16:18ID:???
ファイルの読み込みが一つ増えるわけだから、実行時間は増えますね。
共通処理はサブルーチンにして、メインパッケージにのせたらどうでしょうか。
022822603/02/17 16:49ID:???
>>227
やっぱりそうなんですか…
サブルーチンにします
ありがとうございました。
0229nobodyさん03/02/17 17:02ID:???
>>228
でもそれだとメンテナンス大変ですよ。
ちょっとの速度と、保守性と、安定性。
バランスをとった方がいいと思います。
0230nobodyさん03/02/17 18:08ID:???
保守まで考えてるとは、いやはやさん、ご立派
食い逃げの多い世の中、鏡だね
0231nobodyさん03/02/17 18:18ID:???
テレビゲーム以外はきちんと保守のことも考えろよぉ〜
0232 ◆hMJAPH9PWA 03/02/17 18:57ID:???
>>225
配布はされてるけど動かないなぁ。

というか、コードを読んだ限りじゃまだまだAlphaの段階で、
真面目にポータビリティを考える段階じゃないらしい。
VCでのコンパイルコードにperl57.libとかハードコーディングしてあるしね。
0233nobodyさん03/02/17 21:03ID:Fb0RpjXG
質問させてください。

添付ファイル付きメールをフォームから送りたいと思い、
まず、formのENCTYPEを、'multipart/form-data'にしてみました。
こんな感じ
<FORM ENCTYPE='multipart/form-data' action='/cgi-bin/tenpumail.cgi' method='POST'>
すると、その後のINPUTで指定しているパラメータがわたってこないようなのです。
<inpit type=text name="onamae">
というようなパラメータが、いっこも渡って来ないのです。
ENCTYPE='multipart/form-data' をはずすとちゃんと渡ってきますが、
それではファイル添付ができないし…。

こう言ったことって良くあることなのでしょうか?
また、解決方法などありましたら、教えて頂けませんでしょうか。
023420303/02/17 21:10ID:Fb0RpjXG
あっ、
<inpit type=text name="onamae">

<inpit type="text" name="onamae">
の誤りです。すみません。
0235nobodyさん03/02/17 21:10ID:???
>>233
ここはPerlのスレッドです
0236nobodyさん03/02/17 21:20ID:???
>>233
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&c2coff=1&q=multipart%2Fform-data&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
まず検索しようね...
上から6コ目
023723303/02/17 21:24ID:???
>>236
あ、ありがとうございました!
教えて頂いたところは見つけていたのですが、
回答にあるdecode.plを探さずに「だめか…」とへこんでいました。
探してみたらありましたので、もうちょっと調査してみます。
023823603/02/17 21:36ID:???
>>237
じゃーフォーマットは判っていたのだから、
自前でデコードしても良かったのではないかと...
応用力なさすぎでつ。
0239nobodyさん03/02/17 21:44ID:???
ここは初心者スレです。
応用力無くても別にかまわないかと。
0240nobodyさん03/02/17 21:51ID:4gk/zjjH
最新版のActivePerlで DB_File を入れようと PPM で install しようとすると見つかりません。
どうも最新版のモジュールリポジトリに DB_File がないようなのですが、何か理由でもあるのでしょうか。
古い方のActivePerlのリポジトリにはあるようです。
024123603/02/17 21:53ID:???
応用力という言葉のみに反応すんなって。
0242nobodyさん03/02/17 22:33ID:1e74kzGJ
お勧めのエディタとかありますか?
0243nobodyさん03/02/17 22:43ID:???
PerlEditor
0244nobodyさん03/02/17 22:46ID:???
>>243
即レスサンクス!と思ったんだけどそれ以外で何かあります?(^^;

PerlEditorよりも使いやすいやつないかなって…
0245nobodyさん03/02/17 22:47ID:???
Perl書くのにどんなエディタ使ってる?
http://pc2.2ch.net/test/read.cgi/php/1014357485/l50
0246nobodyさん03/02/17 22:53ID:???
>>245
激しくすれ違いでしたね…
スマソ

逝てくる…
0247nobodyさん03/02/17 23:17ID:???
>>246
道中険しいのでお気をつけて。
0248nobodyさん03/02/17 23:37ID:EIQogyxL
CGIに対して、mp3を素で返すプログラムを作ってみたんですが
mp3ファイルをopenしてprintしたら
バイナリがそのまんま文字化けしてブラウザに表示されてしまいました。
一応"Content-Type: audio/mpeg"は送っているのですが
やはり拡張子がmp3でないファイルは音声として扱ってもらえないのでしょうか?

やりたいのは、cgi要求に対してmp3のバイナリを返して
それをブラウザがmp3プレイヤーに渡して音楽を鳴らす。
というのを考えているのですが・・・・
0249nobodyさん03/02/18 00:03ID:EDQzMDCw
ずれてたらすみません。
APACHEのホームディレクトリにてCGIスクリプト置いたのですが、
属性を、711にしています

たとえばWWWダウンローダソフトで根こそぎもってかれると、このCGIも
もってかれるのでしょうか?
(CGIの中身はDBIにてPASSを入れちゃっていて思いました)

0250nobodyさん03/02/18 00:05ID:???
>>249
基礎からやり直せ。
025124903/02/18 00:14ID:EDQzMDCw
>>250
基礎的なものが無知ですいませんでした。。
(;´Д`)もうちょっと勉強して自分で調べてみまつ
0252nobodyさん03/02/18 00:51ID:???
>>248
audio/mp3
ってのはどぉよ?
しれでもダメなら、ちゃんとMP3ファイルを吐き出しているサイトへtelnetで接続してみて、
レスポンスのエンティティヘッダ「Content-type:」を調べてみる。
それでもダメなら、ブラウザが対応していないだけ。ファイルヘルパーの対応を設定してみる。
0253nobodyさん03/02/18 02:31ID:GFaap2mW
>>252
んー、某所でtelnetで試してみたら
apacheがaudio/mpegって吐いたんで
(もちろんCGIじゃなくてMP3直指定ですが)
それを真似してみたんですけどね。
ブラウザはIE6SP1です。
audio/mp3はまた試してみます。
0254nobodyさん03/02/18 03:18ID:???
>>253
IEは基本的に拡張子しか見てない。
0255nobodyさん03/02/18 05:04ID:Dcv1K+PR
ちょっと皆様にお聞きしたい事があります。

if ($count =~ /\n$/) { chop($count); }
$count++;

上のカウントアップ処理は1カウントずつアップしますよね?
これを2カウントずつアップするようにしたいのですがどう書き換えれば
いいでしょうか?
0256nobodyさん03/02/18 05:24ID:???
>>255
$count++;
  ↓
$count += 2;
0257nobodyさん03/02/18 07:09ID:MmRlkG1z
それ、漏れもマジにビビッタよ。
本当に凄い奴だと思った。
http://homepage3.nifty.com/digikei/ten.html
0258nobodyさん03/02/18 07:22ID:Dcv1K+PR
>>256
天才!!!
0259nobodyさん03/02/18 07:26ID:???
>>258
ハァ?
0260nobodyさん03/02/18 07:34ID:???
>>258
プッ
0261マリモーマ ◆r6PDGT6Xd2 03/02/18 08:06ID:2FacSekM
>257
エロサイト
0262nobodyさん03/02/18 08:36ID:???
chomp($count);
++$count;
++$count;
0263nobodyさん03/02/18 15:05ID:???
ちなみに数字として評価してるから chomp も chop もいらん
0264nobodyさん03/02/19 00:14ID:???
グーグルで「(my|ローカル) 速度 Perl」と調べてもわからなかったので質問します。

変数名が重複しない場合でも、サブルーチン内ではmy宣言したほうが
スクリプトの実行速度は速くなるのでしょうか?

換言すると、(1)サブルーチンにグローバル変数を渡し、受け取った変数はmy宣言し、
処理したのちにreturnで返すのと、
(2)サブルーチン内でもグローバル変数のまま扱って処理するのとでは、
どちらが速いのか、ということです。
0265nobodyさん03/02/19 00:15ID:P468uHQ8
sageてしまいました。
0266nobodyさん03/02/19 00:28ID:5breTLee
初心者の非常にDQNな質問ですが、
下記程度のコードがInternal Server Errorになって動きません。
ローカルの環境設定の問題かと思って、パスを変えてサーバーにあげて動かそうとしましたがやはりエラーになります。
何故でしょうか?

#!c:/perl/bin/perl

require 'cgi-lib.pl';
&ReadParse(*input_data);

print "Content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";
print "value1 = $input_data{'value1'}<br>\n";
print "value2 = $input_data{'value2'}<br>\n";
print "</body>\n";
print "</html>\n";
exit;
0267nobodyさん03/02/19 00:42ID:???
>>264
変数自体にかかるコストは、シンボルテーブルに入らない分、myの方が速い。
でも、コピーにはコストがかかる。だから、遅くなる、だと思う。

遅くなる以上にメリットがあると思うんだけど・・・
それに、巨大なものを扱うなら、上手にリファレンスを使ったら、
コピーしなくてもよくなって、速くなるかも。。
0268nobodyさん03/02/19 00:48ID:???
>>266
まず、ローカルでテストされてはどうですか?
0269nobodyさん03/02/19 00:51ID:???
>>268
文盲かい?
0270nobodyさん03/02/19 00:55ID:???
>>269
みたいだな。

あの素人の処理は君に任せるよ。頼んだよ。
0271nobodyさん03/02/19 00:56ID:???
>>269
>>268は、STDERRに答えが出てるから、それをローカルで見ればいい。と言った。
0272nobodyさん03/02/19 00:58ID:???
>>266
パスが通ったところにcgi-lib.plがあるのか?
0273nobodyさん03/02/19 01:01ID:???
>>272
エラーメッセージもソースも聞かずに原因を追及するのはあまりに無謀だと思うぞ。
0274nobodyさん03/02/19 01:03ID:???
>>273
それができるならあんな質問はしないと思う(^_^;)
0275nobodyさん03/02/19 01:03ID:???
>>274
>>272は自問自答ってことか?お前は文盲なのか?
0276nobodyさん03/02/19 01:06ID:???
>>275
ハァ?
ありそうな間違いをあげただけ。
自分で間違いを発見できるのならこんなところで質問しないでしょ。
0277nobodyさん03/02/19 01:08ID:???
なに白熱してんのー?
0278nobodyさん03/02/19 01:16ID:???
>>266へのレスがなぜ自問自答になるのかさっぱりわからん
0279nobodyさん03/02/19 01:18ID:???
オマイラおちけつ。

>>266
273に同意。で、エラーメッセージを書けぃ
0280 03/02/19 01:18ID:???
>>266
PERLがローカルに入っているなら、
それ使った時に出たもっと具体的な
エラーメッセージは?
0281nobodyさん03/02/19 01:26ID:???
次の質問は「エラーメッセージってどうやって見るんですかぁ?」。
0282nobodyさん03/02/19 01:58ID:???
>>264
use Benchmark qw(cmpthese);
$b = '';
cmpthese(-5, {A=>sub{&a(1); sub a{my $a = shift;}}, B=>sub{&b(1); sub b{local $b = shift;}}});
--
ここまでこだわる前にアルゴリズムを見直す方がいいに一票。
0283nobodyさん03/02/19 02:00ID:???
>>282はバージョン5.6以降のコマンドラインで動かしてください。
028426403/02/19 02:47ID:???
>>267さん>>282さん
レスありがとうございます。

>>282を実行したところ、Aのほうが早かったです。
>ここまでこだわる前にアルゴリズムを見直す方がいいに一票。
単なる素朴な疑問だったもので、おっしゃるとおりです。
効率的なアルゴリズムのなんたるかを勉強してきます。
0285nobodyさん03/02/19 03:20ID:IJ5Nv9d6
とりあいずCGIファイル(カウンタ)を作ってみたんですが、
「ファイルを開くアプリケーションを選んでください」
になってしまいます、どのアプリケーションで開けば良いのでしょうか?
0286nobodyさん03/02/19 03:39ID:???
>>285
編集したいならメモ帳あたりで。
テキストが読み書きできればなんでもいいです。
0287nobodyさん03/02/19 03:44ID:IJ5Nv9d6
>>256
編集するんじゃなくて、カウンタとして表示させたいのですが。
0288 03/02/19 04:02ID:???
>>287
cgi設置法の基礎なんて、PERL以前の話。
スレ違いだよ。
0289nobodyさん03/02/19 04:04ID:???
>>287
http://tohoho.wakusei.ne.jp/wwwcgi6.htm
http://homepage1.nifty.com/glass/tom_neko/web/web_cgi_osx.html

(・∀・)カエレ!!!!
0290nobodyさん03/02/19 05:59ID:???
>>285
おまいにひとつ聞きたい
なんでこのスレで聞いた?
CGIスレが他にあるのになんでこのスレで聞いた?
0291マリモーマ ◆r6PDGT6Xd2 03/02/19 06:49ID:tT+FI6u3
>266
これだと思うだけど
#!c:/perl/bin/perl →#!/usr/bin/perl
0292nobodyさん03/02/19 06:55ID:V0z+N0Sl
あゆのパンチラ動画です
http://homepage3.nifty.com/digikei/ten.html
0293nobodyさん03/02/19 15:12ID:CC31r6wC
PHPとPerlだとどっちが偉いんですか?
0294 ◆s/jp/vus/g 03/02/19 15:31ID:???
Assembla>>FORTRAN=LISP>>COBOL>BASIC>(超えられない時代の壁)>>>Perl>>PHP
0295nobodyさん03/02/19 16:14ID:???
高級か低級かの話かね?
0296nobodyさん03/02/19 17:11ID:???
>>295
>Assembla

せっかくボケてんだから突っ込んでやれよ・・・。
0297 ◆s/jp/vus/g 03/02/19 18:31ID:???
(´-`).。oO(sageにassemblerって書けばよかった。)
0298nobodyさん03/02/19 18:47ID:???
$ENV{'TZ'} = "JST-9";
$times = time;
($sec,$min,$hour,$mday,$mon) = localtime($times);
$mon++;
if ($hour < 10) { $hour = "0$hour";}
if ($min < 10) { $min = "0$min"; }
if ($sec < 10) { $sec = "0$sec"; }

英国の鯖に置いているのですが、時差を日本標準時間に修正するには
どのように設定すれば良いでしょうか。
0299nobodyさん03/02/19 19:32ID:???
>>298
$time に 9*60*60 を足すなり引くなりすれば?
030029803/02/19 19:47ID:???
>>299
有難う御座います。
試してみます。
0301 ◆nBdXIOeCFk 03/02/19 22:02ID:qxP6cynE
すいませんたす例ってきます
0302nobodyさん03/02/19 22:05ID:???
TZを直すだけでいいのでは?

もしかしたらそのコードは、悪評高きCGIレ○キューのもののような気が..
配布する方も無責任だよな。少し勉強すればわかるはずなんだから。

0を前に付ける正しい方法は、sprintfで整形する。だ。
0303nobodyさん03/02/19 22:29ID:???
>正しい
0304nobodyさん03/02/19 23:25ID:a2cu6yGF
データの入力フォームからのデータは
 例えば、
read.cgi?key=96477&st=40&keywd=%A5%C6%A5%B9%A5%C8
と言うふうになり、変換する途中、
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg
 を使いますが、
この
~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/egと
全く逆の動作をする式…文字から16進へ変換する式 
を教えて下さい。

 お願いします。m(_ _)m
0305nobodyさん03/02/19 23:26ID:???
>>298のような書き方意外によくみかけるな。
かくいう漏れも昔は>>298のように書いてたし。

そんなわけで
($sec,$min,$hour,$mday,$mon) = gmtime(time+9*60*60);
でどうよ?
0306nobodyさん03/02/19 23:26ID:???
>>304
unpack
0307nobodyさん03/02/19 23:36ID:???
>>304
>>4 のperlメモに書いてある。
0308nobodyさん03/02/19 23:37ID:???
>305
いや、タイムゾーンを直そうよ。。。
030926603/02/19 23:48ID:r5CAiNQE
お返事遅れて申し訳ないです。
>>273,279,280.281
エラーメッセージというのはデバッグで確認できるものとは違うのでしょうか?
ちなみに自分の思っているデバッグとはdosプロンプトでperl -cwでやる文法チェックのことです。
それではエラーもアラートも出ません。
フォームから起動するとプレーンテキストのままcgiファイルが表示されるだけです。
ローカルでもサーバーでも起動しないということはやはりどこか文法がおかしいのでしょうか?
ちなみにパスはローカルとサーバーとで当然変えてテストしています。
0310nobodyさん03/02/19 23:55ID:???
>>308
最初のソース見る限り、一応タイムゾーンはいじってあるみたいなんだけども。
それで変わらないんだから、変わらない理由は他にありそう。

だったら、次善の策でもいいんじゃないか?

本当にタイムゾーンが変わらないんだったら、鯖缶の怠慢かも知れんけど。
0311nobodyさん03/02/19 23:58ID:???
>>266
>>272の質問にこたえろヴォケ!
理解できない or 都合の悪い質問を無視するのは厨房のやることだ。
……あれ? 厨房だったか?
0312 ◆s/jp/vus/g 03/02/20 00:03ID:???
>>309
使ってるのはActiveperlだと思うけど、
完璧なチェックでは無いので過信しないように。
それより、291がいいこと言ってるぞ。
先頭行が違う=>cgiと認識していないのでそのまま吐く。
0313nobodyさん03/02/20 00:14ID:???
$ENV{'TZ'} = "GMT-9";
$ENV{'TZ'} = "Japan";

とかでもやってみるとか。
0314nobodyさん03/02/20 00:16ID:???
>>311
お前も>>273の忠告をことごとく無視してるが。
031526603/02/20 00:21ID:Hhj+m+Kj
>>311
あるよ
0316nobodyさん03/02/20 00:24ID:???
>>309

perl -cでチェックできるのは、コンパイルエラーのみだから、
実行したときに発生するエラー(require失敗、関数が見つからない)は、
存在するかしないかは分からない。
0317nobodyさん03/02/20 00:25ID:???
「は」、と、「が」、を間違えました。
031826603/02/20 00:32ID:Hhj+m+Kj
>>291,312
どうもありがとうございます。
もう一度先頭行を確認してみます。
0319nobodyさん03/02/20 01:06ID:???
>>266
http://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html
0320マリモーマ ◆r6PDGT6Xd2 03/02/20 08:45ID:ZbzyrSlf
ローカルテストで 無限ループになったら
windowsタスクマネージャーで perl.exeを 終了させると
いいらしい
0321nobodyさん03/02/20 09:04ID:hpPhmqwv
>>320
初心者らしい意見を有り難う。
032230403/02/20 09:05ID:Am46dVIU
ありがとうございました。
URLエンコードというのですか。
勉強になりました
0323nobodyさん03/02/20 09:25ID:???
>>309
Syntax checkがOKならperl filenameでコマンドラインから実行しろ。
0324nobodyさん03/02/20 09:50ID:???
perl filename > test.html

って具合のが見易くて良いかもね。
0325nobodyさん03/02/20 09:57ID:???
すいません、正規表現なのですが
一行内に特定文字列(>>\d+)がいくつあるか
数える方法というのはありますでしょうか?

現在、代案として下記のように>>\dで
splitし配列を数えているのですが
いかんせん正攻法じゃないので...


local @tmp = split(/>>\d+/,$_);
print $#tmp;
0326nobodyさん03/02/20 10:15ID:???
>325
適当な配列にコピーしてs//gして帰ってくる数値を見ればいいんでない?
もしくはwhile(/>>\d+/g)ってやってカウンタを増やすとか…
0327nobodyさん03/02/20 10:29ID:???
>>325
print (@tmp =~ s/(>>\d+)/$1/gs);
0328nobodyさん03/02/20 10:51ID:???
>>327
> 一行内に特定文字列(>>\d+)がいくつあるか
これを読んでいなかったスマソ

my $count = 0;
foreach(split(/\n/,$_)){
print sprintf(qq{">>\\d+"の数:%0d 行目 %0d 個},++$count,(s/(>>\d+)/$1/g));
}
0329nobodyさん03/02/20 10:58ID:???
>>326>>327
置換処理をすると処理した数が返ってくるのですね
勉強になりました
これで万事解決です
ありがとうございました!
0330nobodyさん03/02/20 20:18ID:ve8bV8Zf

「このまま一生彼女ができないのでは…」

 私は社会学を専攻している者です。社会学や周辺の学問を利用し、実践的な
恋愛理論を開発しております。机上の空論に終わらず、あくまで実践的。効果
は絶大です。この理論は私自身の苦悩から生まれました。モテないことに深く
悩んでいた私は社会学部に入り、恋愛をはじめとするコミュニケーションにつ
いて考察することを決意。開発期間およそ6年。やっと研究が実を結びました。
ルックスなんて恋愛に関係ないということを自ら証明したのです。今回はその
集大成を公開しようと、メールマガジン発行を決めました。すでに数回発行し
ておりますが、購読者にはバックナンバーが閲覧できますのでご安心を!

 今ならまだ間に合います。春、出会いの季節に幸せが訪れるかどうかは、あな
たの選択次第です。絶対に後悔はさせません。「90日彼女ゲットプログラム」
もちろん購読は無料! → → http://www.h5.dion.ne.jp/~psysys/index.html
0331nobodyさん03/02/21 01:07ID:f3aIdgTv
質問です。
RaQ3で正常に動いていた画像掲示板が、RaQ550にサーバーを変えてから
エラーが出て動かなくなってしまいました。

エラーログを見ると
「Premature end of script hedders : /usr/cgiwrap/cgiwrap」
となっています。
これはどういう意味のエラーなのでしょうか?いろいろ調べたのですが
わからずほとほと困っています。

perlのバージョンが上がったのが原因なのかとも思いましたが、
なにぶん初心者なのでよくわかりません。
もしよろしければ教えていただければありがたいのですが。
よろしくお願いします!
0332nobodyさん03/02/21 01:40ID:???
>>331
・1行目の Shebang が違う。
・require の該当するファイルがパスの通ったところにない。
・適切な Content-type: エンティティを吐き出していない。
・外部ファイルへのアクセス時に、該当ファイルのパーミッションが不適切であった。
・長いので省略。全部見るには >>1
0333nobodyさん03/02/21 01:50ID:???
>>331
umaskかも。
0334nobodyさん03/02/21 02:12ID:???
だからCGIの質問はCGIのスレでしろと(略
0335nobodyさん03/02/21 02:46ID:p5R52YmN
質問させてください。
Perlモジュールを作ってるのですが、
拡張子.pmだと、ブラウザでアクセスされると中が見えてしまいます。
で、拡張子.cgiでモジュール使おうと思ったのですが、
それだと、useで呼び出せません。
拡張子.pm以外は、useで呼び出せないのでしょうか?
また、.pmファイルの中が見えないようにするにはどうすればいいでしょうか?
0336nobodyさん03/02/21 03:13ID:???
>>335
perldoc -f useを参照。.cgiでも使えるかも。
通常は鯖側で見えないように設定かと。

.htaccessの偉い人 Part3
http://pc2.2ch.net/test/read.cgi/php/1019888234/l50
033733503/02/21 03:22ID:???
>>336
ありがとうございます!
htaccessの設定を挑戦してみようと思います。
ありがとうございました!
033833103/02/21 11:42ID:???
>>332
>>333
ありがとうございました!
教えてもらったところをチェックしてみます!

前のサーバーで動いていたのに、新しいサーバーでは動かないのが
わからないんですよね・・パスはチェックしたけど
0339nobodyさん03/02/21 18:57ID:???
ファイルをopenしてランダムに一行のみ読み込みしたいのですが、
確かwhileを使う方法があったのですが思い出せません。
教えて頂けないでしょうか?
0340nobodyさん03/02/21 19:01ID:???
>>339
http://www.din.or.jp/~ohzaki/perl.htm#File_Random
0341nobodyさん03/02/21 21:47ID:???
>>335
use 'Some/Module.cgi';
0342nobodyさん03/02/22 00:49ID:???
>>341
エラー出るけど、それって使える?
0343 ◆hMJAPH9PWA 03/02/22 00:56ID:???
>>342
無理。使えない。require()するしかないね。
0344nobodyさん03/02/22 09:52ID:???
>>340
これでした!
ありがとうございます
0345nobodyさん03/02/22 12:20ID:00dHJZue
質問です
perlから以下のような内容を含むメールを送信したいのですが

&jis("この度は〜頂きありがとうございます。\n今回のオーダーは以下の内容で承りました。\nもしこの内容でよろしければこのままメールをご返信ください。〜

で送信後メールの「今回のオーダーは」
の部分が「今回のお錐桙ンは」
のように文字化けを起こします。他の箇所はよいのですが
この部分だけ文字化けを起こします。
何か対処法はあるのでしょうか?
よろしくですm(__)mペコリ
0346nobodyさん03/02/22 12:30ID:???
>>345
>>4のリンクを熟読してください。
0347あすか03/02/22 17:29ID:9iUywjuX
置換演算子に関する初歩的なことなんですが・・

$value =~ s/藁/笑/g;
で、藁を「笑」に変換するのはわかるんですが
これに「タグ」を利用したい場合どの様にすればよいのでしょうか?
つまり、もしも「藁」という文字列があった場合
「<b>笑</b>」と(←実際にはタグは実行されてしまっている)
したいんですが、</b>としたときの「/」が置換演算子とかぶって
しまいエラーになってしまいます・・・。(泣
0348nobodyさん03/02/22 17:36ID:???
\
0349nobodyさん03/02/22 17:36ID:???
/が解釈されないように\/にする。
世にこれをエスケープという。
/を置換演算子とやらとして解釈されないようにする。
s#藁#笑#g
世にこれを...知らん
0350マリモーマ ◆r6PDGT6Xd2 03/02/22 18:32ID:SFcrKMsp
>>345
今回のオ\ーダー ではどうかな?
0351nobodyさん03/02/22 18:36ID:9Q2QNoLV
constant で配列を宣言してそれをforeachなどで回すには
どうすれば良いのでしょうか?
↓こんな感じでやりたいんですが、、
use constant HOGE => ['hoge','hoge2','hoge3'];
print "$_\n" foreach(HOGE);
0352nobodyさん03/02/22 19:04ID:???
>>345
jcode.pl(.pm)を使う。

>>347
s/<b>笑<\/b>/藁/g; # /をエスケープ
s|<b>笑</b>|藁|g; # 区切り(デミリタ)を変える
s{<b>笑</b>}{藁}g; # 同上

>>351
use constant HOGE => ('hoge', 'hoge2', 'hoge3');
035335103/02/22 19:09ID:???
>>352
できました!どうもありがとうございます。
0354nobodyさん03/02/22 21:55ID:dmtEQjtb
perlでユーザーの大量クリックに耐えれるクリックカウンターcgiを作ろうとしているんですが、
ファイルロックしてもデータが飛んでしまいます。
どうすればデータが飛ばないように出来るんでしょうか?
0355nobodyさん03/02/22 21:55ID:???
どんなロックしてるか見せてみそ
035635403/02/22 22:14ID:dmtEQjtb
http://tohoho.wakusei.ne.jp/wwwperl2.htm#flock を参考に
open(OUT, "+< count.dat");
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT $i++;
close(OUT);
ってやってるんですが・・・。
大量のアクセスに耐え切れませんでした
0357nobodyさん03/02/22 22:28ID:???
>>356
実は書き込み先がローカルじゃなかった。とか。
0358nobodyさん03/02/22 22:28ID:???
それ、これまでのカウントってどこで読み込んでるの?
0359nobodyさん03/02/22 22:29ID:???
>>356
書き込む前にtruncateせず、
書き込み後にtruncate(OUT, tell(OUT));
0360nobodyさん03/02/22 22:31ID:???
あと、エラー処理入れれ。
0361nobodyさん03/02/22 22:35ID:???
要は、小出しにしたソースでは的確なアドバイスはできないってことだ。
0362nobodyさん03/02/22 22:36ID:???
>>356
読み出しと書き込みを一回で処理。
036335403/02/22 22:53ID:dmtEQjtb
if (open(F, "+< count.dat")) {
flock(F, 2);
$count = <F>;
$count++;
seek(F, 0, 0);
print F $count;
close(F);
} else {
&error();
}
いろいろ改良して、こんな感じなったんですけど、やっぱり1000回ぐらい何人かでやるとファイルの中身がおかしくなってしまいます
0364nobodyさん03/02/22 22:56ID:???
openのエラー処理しかしてねーじゃねーか。
0365nobodyさん03/02/22 22:59ID:???
「おかしくなる」って、どうおかしくなるの?
処理の結果ってのはバグの手がかりを知る大事な情報だから省略しないように。
036635403/02/22 23:04ID:dmtEQjtb
ファイルにアクセスが多くなると、ファイルの中身の値が適切じゃないものになってしまいます。
0367nobodyさん03/02/22 23:06ID:???
モロ画像とか?
036835403/02/22 23:07ID:dmtEQjtb
いや。同時に大量実行実験です。
それで、実行された回数を記録したいんです。
0369nobodyさん03/02/22 23:09ID:???
>>363
例えば、先行プロセスでflockが失敗したとする。
しかしエラー処理が無いのでそのまま進む。
ここで後続プロセスがロックがかかってないのでファイルをオープンする。
データが壊れる。
0370nobodyさん03/02/22 23:28ID:???
カウンターとかのファイルロックって、
限界があると思うけど・・・。
絶対壊れないようにするファイルロックはないです。
037135403/02/22 23:30ID:dmtEQjtb
では、MySQLのデータペースとか使えば壊れないでしょうか?
0372nobodyさん03/02/22 23:31ID:???
もし壊れても、可能な限り復旧するっていう形のほうがいいかも。
0373nobodyさん03/02/22 23:42ID:???
>>370
でたらめ抜かすな。ロックは2種類しかない。
正しいロックと駄目ロックだ。絶対に壊れないのが正しいロック、それ以外が駄目ロック。
0374nobodyさん03/02/22 23:59ID:???
>>363
truncateしろ。
0375nobodyさん03/02/23 00:02ID:???
>>374
サイズが増えるだけなら入らないと思われ
037635403/02/23 00:04ID:osZUd/C4
>> 374
truncateって何ですか?
0377nobodyさん03/02/23 00:08ID:???
だからエラー処理をしろって
0378nobodyさん03/02/23 00:18ID:???
>>363
その方法が最良じゃないかと思いますが。
無駄な処理とかないですし。
あとはflockとseekとcloseにエラー処理加えるくらいですね。
037937803/02/23 00:19ID:???
ちなみにtrancateは入れる必要ないですね。
0380nobodyさん03/02/23 00:26ID:???
>>373
そんなことない。
絶対壊れないようにするなんて不可能。
集中同時アクセスがつづけば、どんなロックしてても壊れるだろ。
0381nobodyさん03/02/23 00:29ID:???
ムキー!!!
なんで354は再三にわたってエラー処理をしろというレスを
無視するんだああああr;かえ;gk’えあ;rlf’あうぇr
0382nobodyさん03/02/23 00:50ID:???
>>381
まあおちけつ。
どうせ動かなくて困るのは質問した本人だけだ。
0383nobodyさん03/02/23 01:09ID:???
アクセス数を制限してみる。
flockを使わない。
0384nobodyさん03/02/23 01:10ID:???
>>380
それはチミが駄目ロックしか作れないという事を意味する。
0385nobodyさん03/02/23 01:15ID:PmGQRxss
Socketで?を含むURLをGETしようとしてるんですが、&amp; に展開されてしまってうまくいきません。
何とか回避する方法はありませんでしょうか?
0386nobodyさん03/02/23 01:21ID:???
意味不明。
0387nobodyさん03/02/23 01:26ID:???
(再挑戦)

Socketで&を含むURLをGETしようとしてるんですが、&amp; に展開されてしまってうまくいきません。
何とか回避する方法はありませんでしょうか?
0388nobodyさん03/02/23 01:28ID:???
リクエストはどうやって送ってるの?
038938703/02/23 01:30ID:???
$url = "test/read.cgi/php?1044717887";

my $SOCKET = new IO::Socket::INET -> new(PeerAddr => $hostname,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '5' );
print $SOCKET "GET $url HTTP/1.1\r\n";


ってな感じです。
0390nobodyさん03/02/23 01:39ID:???
&はどこで使っているのでしょうか・・・
039138703/02/23 01:42ID:???
またやっちまった。

$url = "test/read.cgi/php&1044717887";

my $SOCKET = new IO::Socket::INET -> new(PeerAddr => $hostname,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '5' );
print $SOCKET "GET $url HTTP/1.1\r\n";


ってな感じです。
(この$urlは実在しません)
039238703/02/23 01:46ID:???
これで、エラーが
 Invalid URI in request GET test/read.cgi/php&amp;1044717887 HTTP/1.1<P>
と出ます。
0393nobodyさん03/02/23 01:50ID:???
print $SOCKET "GET /$url HTTP/1.1\r\n";
0394nobodyさん03/02/23 01:53ID:???
>>387
$urlが間違っている。httpのRFC読んで出なおしたまへ。
039538703/02/23 01:53ID:???
>>393
あんりがとうございました。

目から鱗でした〜
039638703/02/23 01:55ID:???
>>394
後学のために、どこが間違いなのかヒントだけでも…
0397nobodyさん03/02/23 01:56ID:???
>>354
参考のためにOS教えて。
# truncateまでしたら、まず壊れないと思うけど。

参考のために。
use IO::File;
my $fh = IO::File->new("count.dat", O_EXLOCK|O_RDWR); # $fhがハンドル
で、ファイル開いてみてください(ただしWindows不可)。

>>387
展開されます?
>>392のサーバのエラーはHTML形式で出力されているようですが。
0398nobodyさん03/02/23 01:59ID:???
>>396
ファイル指定は、ドキュメントルートからのパスで指定しなきゃ。
039938703/02/23 02:11ID:???
>>398
だめだ。。。
意味わからん。出直します。。。
0400nobodyさん03/02/23 02:14ID:???
>>396

http://www.ietf.org/rfc/rfc2616.txt
5.1 Request-Line
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
5.1.2 Request-URI
Request-URI = "*" | absoluteURI | abs_path | authority

http://www.ietf.org/rfc/rfc2396.txt
3. URI Syntactic Components
abs_path = "/" path_segments

ここら辺を読んでくれたまへ。
0401nobodyさん03/02/23 12:17ID:???
米鳥で、htmlファイルを読み込んで編集して出力と言うスクリプトを書いたのですが、
ローカルではopenできるのですが、UPするとhtmlファイルがopenできません。

どうしたら良いでしょうか?
0402nobodyさん03/02/23 12:22ID:???
まずは質問の仕方を勉強して、
このスレの>>1-401を音読してください。
0403nobodyさん03/02/23 12:25ID:???
>>401
エラーメッセージを書け
0404nobodyさん03/02/23 12:41ID:???
>>380
まともなOSなら、まともなロックぐらいできるはずだ。

エラー処理とは...
全てのシステムコールに、or die($!);ってつけて、
eval BLOCK の中で実行してみろ。例外が飛んできたら(?)
$@に入るから、それを出せばいい。
0405nobodyさん03/02/23 18:05ID:???
Windowsで、メールを送信するプログラムのローカルテスト環境を作ることってできますか?
0406nobodyさん03/02/23 18:07ID:???
>>405
CGIだけど、なんか質問ある? Part 9
http://pc2.2ch.net/test/read.cgi/php/1041530204/
0407nobodyさん03/02/23 19:06ID:srUBO4KW
きく
0408nobodyさん03/02/23 19:08ID:???
あのう突然すみませんが、
私のプロバがヤフーBBで今書き込めなくて困っています。
どうしたら書き込みできるようになるんでしょうか。教えてください。
040940803/02/23 19:09ID:???
串を使っても書き込めないのですが......
0410nobodyさん03/02/23 19:14ID:???
>>408
プロバイダを変える。
あと、スレ違いの質問はよせ。
0411nobodyさん03/02/23 19:15ID:???
ファイルの中身を逆順に表示する方法はありますでしょうか。
リストに読み込んでリバースするとなると、メモリ容量が心配でして・・・
0412nobodyさん03/02/23 19:16ID:???
>>410
放置に限ります。
0413nobodyさん03/02/23 21:20ID:???
>>402-403
スクリプトは間違ってなかったのですが
鳥の仕様でスタ(cgi-bin以下のファイルは操作できない)

婆茶とかハイマしか触ったこと無かったので分からなかった(;´Д`)
0414nobodyさん03/02/23 21:22ID:???
>>411
whileで回しつつ、unshiftしていけば?
0415nobodyさん03/02/23 21:26ID:???
>>414
それじゃ最終的にファイル全部を配列に入れるわけだから同じだよ。
まあ、100KBぐらいだったら気にせずreverseでいいんでない?
0416nobodyさん03/02/23 21:57ID:???
>>411
ttp://www.din.or.jp/~ohzaki/perl.htm#File_Reverse
これはどうか。
0417nobodyさん03/02/23 22:21ID:???
>>414-416
レスありがとうございます。
平均100KBくらいなんですが、気にしなくてもいいのかもしれませんね・・
ちょっと>>416さんのところ、詳しく見させてもらいます。
ありがとうございました。
0418nobodyさん03/02/23 22:24ID:???
どうせ一気読みするならforで後ろから逆順に読んでいった方がreverseするより軽いと思われ。
0419nobodyさん03/02/23 23:49ID:???
まわす数が分かっている場合。
$n = 10;
for(1..$n){ 処理; }
と、しているのですがもっとベターなやり方はありますでしょうか?
0420nobodyさん03/02/23 23:50ID:???
全部読むなら、foreachの方が速くなるかも。特化しているから。
0421nobodyさん03/02/24 00:00ID:???
>>420さんありがとうです。
昔はforeachを使っていたのですが、何時の間にか短いforを使うようになってしまいました。
0422nobodyさん03/02/24 01:33ID:???
>>420 特化ってどのへんで?
for と foreach って常に置き換え可能じゃない?
0423nobodyさん03/02/24 08:38ID:???
>>422
しかも今回は逆さに参照。
0424nobodyさん03/02/24 08:45ID:cCE/Sh/G
自作のオブジェクト指向なCGIフレームワークを、公開前にmod_perl環境にも対応させたいです。
mod_perlを極めるためのおすすめ本・サイトを教えてください。
お願いします。
0425nobodyさん03/02/24 09:34ID:???
>>424
・・・・気持ち悪いやつ
0426nobodyさん03/02/24 10:50ID:???
cryptで暗号化しておいた文字列を
ユーザに入力して貰ったデータと照合する処理を実現したいのですが
何度試してみても結果がNGで戻ってきてしまいます
尚、照合処理は下記の様なシンプルなものです

if ($savedata[0] eq substr($chkiddata[1], 0, length($savedata[0]))) {
if (crypt($chkpassdata[1], $savedata[1]) eq $savedata[1]) {
print "password check OK...<br><br>\n";
$flg = 1;
}
}

$chkiddata[0] はユーザ入力にてIDが、$chkpassdata[1] はユーザにて入力されたパスワード文字列(平文)が格納されております
$savedata[0] は保存されているIDが、$savedata[1] は保存されている暗号化済みのパスワード文字列が格納されております
また $flg に 1 が格納されている場合は、check OK の HTML を書き出す処理をおこなっています

因みに、パスワード暗号化を行う処理は、別のPerlスクリプトで行っておりますが、これも何か関係がありますでしょうか

宜しくお願い致します

0427nobodyさん03/02/24 12:20ID:???
>>426
> if ($savedata[0] eq substr($chkiddata[1], 0, length($savedata[0]))) {
$chkiddata[1] は、なんなのさ?
if ($savedata[0] =~ /^$chkiddata[0]/) {
ぢゃなぁぃ?
0428nobodyさん03/02/24 12:27ID:???
>>426
変数が間違っている。
042942403/02/24 12:48ID:???
比較的有用と思われるHTML::Template、CGI::Lite、Apache::Sessionなどを
使い易く統合して機能追加したパッケージを作っいるので、
それがmod_perl環境でも動くように改良したいと思ってるんですが…。
気持ち悪いですか。うあああ。
0430nobodyさん03/02/24 12:59ID:???
>>429
気持ち悪い
043142603/02/24 14:55ID:???
申し訳ないです、記述間違ってました
$chkiddata[1] の方にユーザで入力されたアカウント名が入っています、でした

今しがた print をIDチェック部分に噛ませて実行してみた所
ID 部分のチェックは問題なく認識できている様なのですが
どうしても暗号化パスワードとの比較が NG で戻ってきてしまいます...
0432nobodyさん03/02/24 15:01ID:???
URLエンコードとデコードはきちんとしてる?
043342603/02/24 15:09ID:???
>>432
はい、拾ってくれたデータも print で書き出しテストしてみましたが
問題なく元データとして保持されておりました
0434nobodyさん03/02/24 16:41ID:???
改行コードが付いてるとか。
chop $savedata[1];
043543403/02/24 16:42ID:???
chompでした。
0436nobodyさん03/02/24 17:43ID:???
>>431
目玉開いてよーく見てから、直したの貼って見れ。各変数に何が入っているか説明する事。
0437nobodyさん03/02/24 18:02ID:???
先生いいでつか?

windows2000
Active perl 5.6.1 build 633
APACHE 1.3.27
の環境ですが

exec (又はsystem) で外部プログラムを呼び出したとき
コマンドライン上で実行した場合外部プログラムは問題なく起動するのに
ブラウザから呼び出した場合外部プログラムが起動する場合と
起動しない場合があるのは何故なんでしょう??

hoge.cgi
#!/usr/local/bin/perl
print "Content-type: text/html;charset=euc-jp\n\n"; #コマンドラインから呼び出す場合は要らない
system("program.exe");

外部プログラムはどのような物でも問題なく起動 c:>perl hoge.cgi
起動するものと起動しないものがある http://127.0.0.1/cgi-bin/hoge.cgi
0438nobodyさん03/02/24 18:37ID:???
>>437
起動する場合としない場合の違いを説明する事。
まずはpathが通っているかをチェックしる。

> 先生いいでつか?
このスレに代議士はいない。・・・はず?
0439nobodyさん03/02/24 20:28ID:???
path を通しても同じです。フルパスで指定しても一緒。
違いは今のところパターンが把握できては居ませんが
どうやら何かしらのメッセージを標準出力に出力しないものは
起動していないような気がする。

例えば
system("dir");は
perl hoge.cgi
http://127.0.0.1/cgi-bin/hoge.cgi
共に問題なく動く

system("wmplayer");はブラウザから呼び出したときは動かない(起動しない)。
0440nobodyさん03/02/24 21:04ID:???
標準出力先が違うからね。
Apacheに理解できない出力したらいかんよ。
0441nobodyさん03/02/24 21:26ID:38CGzi2z
現在より nヶ月前の年を算出したいのですがどのように書けばいいでしょうか?

$year = $thisyear + int(( $thismon-1 ) /12 );

で nヶ月後は算出できるのですが…。
0442nobodyさん03/02/24 21:38ID:???
>>441
引き算知ってる?
0443nobodyさん03/02/25 00:21ID:???
http://www.mac68k.com/php/pafiledb3/pafiledb.php?action=file&id=33
ここで落としたphpBB2.0.4をXREAに設置したのですが、
書き込み時に「"」が「?」に、「>」や「<:」が「&」になってしまいます。
phpをいじったの自体初めてで、どうすればいいのやらさっぱりです。
既知の不備等、ご存じの方がおりましたらご教授下さい。
0444nobodyさん03/02/25 00:24ID:???
>>443
ここは作る人用の板。消えろ。
044544303/02/25 03:31ID:???
>>444
大変申し訳ありませんでした。
0446nobodyさん03/02/25 06:42ID:???
phpってのがミソですかな
0447nobodyさん03/02/25 07:17ID:???
どこかで「CGIはこのスレ」とでも誘導してるのか?
理解できん。
0448nobodyさん03/02/25 07:56ID:???
>>447
Web制作
http://pc2.2ch.net/hp/

k
0449nobodyさん03/02/25 11:40ID:???
>448
板にはともかくスレに誘導はしてないだろうよ…
045043703/02/25 15:57ID:???
パターンと原因が掴めなかったので
perlからtelnetで接続させて起動させるように書きました。
まあ、目的は達成できたのでヨシとします。
暇なときにでも勉強するでス。
ありがとう。

余談だがwin9x系だとtelnetdにろくな物が無いのに愕然とした(涙
0451nobodyさん03/02/25 17:11ID:wR5lMZNW
WIN2000+anhttpdでCGIとして動かしています。

systemでファイルのコピー等を行った場合に、「○個のファイルをコピーしました」
などのsystemの返り文字が表示されますが、これをスクリプト上で
非表示にする方法はないものでしょうか。
___________
$from="コピー元パス";
$to="コピー先パス";
system("copy $copyfrom/A $copyto");
→1個のファイルをコピーしました。
___________

ご存知の方いましたらお願いします。
045245103/02/25 17:13ID:wR5lMZNW
訂正:
system("copy $copyfrom/A $copyto"); → system("copy $from/A $to");
0453nobodyさん03/02/25 20:06ID:???
>>451
system("copy $from/A $to > nul.txt");
とかでダミーファイルにリダイレクトするってのはどう。
0454nobodyさん03/02/25 20:33ID:???
ダミーじゃなくても、> nul にリダイレクトだけでいいはずだけど、
anhttpdって、クライアント側への表示を勝手にしちゃうの?
って、気づけばここperlスレだった…。
045545303/02/25 20:57ID:???
/dev/nulでだめだったので使えないのかと思った。
/devディレクトリないからあたりまえか。
0456nobodyさん03/02/25 21:47ID:???
>>455
nulはデバイスだよ。ファイルとかディレクトリじゃないからパス名はつけられない。
逆にパス名つけたらただのファイルになっちゃう。

0457nobodyさん03/02/25 23:06ID:???
>>456
rem >null
dir
してみ
0458nobodyさん03/02/25 23:55ID:???
>>456
455はUNIXと間違えたと思われ。
UNIXはデバイスファイルという概念を持っていて、デバイスをファイルのように扱う。
そしてパスが/dev/nul。
0459nobodyさん03/02/26 01:07ID:???
っていうか、copyコマンドなんて使うなよ

use File::Copy;
copy("file1","file2");
046045103/02/26 10:45ID:JNJUfkpu
>459
最終的にはお客さんの環境に入れ込むのですが、
perlのバージョンが5.0な事とモジュールをこちらで入れる権限がないので
こんな遠回りな事になってしまってるんです・・(涙

system("copy $from/A $to > nul.txt");
は構文ミスになってしまいました。
つかDOS勉強しないとよくわからないって事なんですね・・。

とりあえず応急処置として<!-- -->で囲んでおく事にして、
引き続き調べてみます。

#これってperlの質問じゃなかった・・?すみません
0461nobodyさん03/02/26 11:07ID:???
system("$ENV{COMSPEC} /c copy /A /-Y $from $to >nul")
046245103/02/26 13:31ID:???
>461
うはー!!できましたっ!
$ENV{COMSPEC}なんて初めて見ました。これなら違う環境でも安心して動かせますね。
本当にありがとうございました。
今夜は2ちゃんに足を向けて眠れませんです。
0463nobodyさん03/02/26 15:07ID:WD8DDVVN
ある変数の値(例えば$test)で条件文を作りたいのですが
値が一個の場合は(例えば $test=first)
if($first eq ""){
処理;
}
として、
カンマ区切りで複数の場合は(例えば $test=first,second)
if(($first eq "") || ($second eq "")....$testに入ってる値の数だけorで追加..){
処理;
}

という処理をやりたくて

今は$testをカンマで分割して配列にいれて(例えば @x)
$testの値が複数だったばあいは

foreach $i (@x);
if($x[$i] = ""){
処理
}
}
という感じで回して処理してます。動作は問題なくするのですが、
もっとスマートないい方法ないでしょうか?
アドヴァイスをよろしくお願いします
0464nobodyさん03/02/26 15:10ID:???
>>463
正規表現使え。
0465まる03/02/26 17:30ID:T5eWammJ
一部のタグを有効にする掲示板を作っています。
配列で有効にするタグの中身を設定して、それに合致しないものは
gt;などで文字化する、というふうに考えたのですが、これでは
有効になるはずのタグまで文字化されてしまいました。
どう書けば動くようになるでしょうか。
#もっとスマートな書き方もあるような気がするけど・・(^-^;

#設定項目
@tag = "('b'.'/b'.'i'.'/i'.'u'.'/u'.'s'.'/s')";

#タグ無効処理
sub tag {
$value =~ s/</>/g;
$value =~ s/>/</g;
}
0466まる03/02/26 17:31ID:T5eWammJ
#タグ有効処理
sub decode{
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("本文が長すぎます"); }
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

# S-JISコード変換
&jcode'convert(*value,'sjis');

# タグ処理
if ($value ne "<@tag(.*)>") { &tag; }

#改行処理
$value =~ s/\r\n/<br>/g;
$value =~ s/\r/<br>/g;
$value =~ s/\n/<br>/g;

#削除情報
if ($name eq "del") { push(@DEL,$value); }
$FORM{$name} = $value;
}
}
0467まる03/02/26 17:32ID:T5eWammJ
しかもタグ要素の <〜style:="***"> までとおることになる・・
この書き方だと・・(って動かないうちにいっててもしょうがないって)
0468nobodyさん03/02/26 18:43ID:???
すり抜けを防ぐために、禁止するものを書き換えるではなく、全部書き換えて許可するものだけ戻せ。
0469nobodyさん03/02/26 19:14ID:h/xtR2PF
http://www.url-battle.com/cgi/

これを和鳥に設置したいのですがどういじっても表示されません。
設置自体が不可能なら諦めますが、もし方法があるならお教えいただけませんでしょうか。
0470nobodyさん03/02/26 19:20ID:???
perlとなんの関係が?
0471nobodyさん03/02/26 20:23ID:???
>>465
文字修飾タグだけならspanタグだけ通るようにしてみるとか。

$value =~ s/\t//g; # [TAB]が含まれていたら削除する(これを'<','>'の代用にするため)

if (($value =~ s{(<b[^>]*>)}{$1}g) != ($value =~ s{</b>}{$1}g)){
# 開始タグと終了タグの数が一致しないので鰓。
print qq{タグ鰓};
}
else {
# < を \tに、 > を \t\t に。
$value =~ s{<(b[^>]*)>}{\t$1\t\t}g;
$value =~ s{</b>}{\t/b\t\t}g;
}
上記を<i><u><s>分処理する。(ハシュを使ってループするなり・・・)

# 他のタグは無効と言うことで・・・
$value =~ s/</</g;
$value =~ s/>/>/g;

# \t\t,\tを復元。
$value =~ s/\t\t/>/g;
$value =~ s/\t/</g;

あーあほらしくなってきた鬱。
0472nobodyさん03/02/26 20:31ID:???
>>471
&amp;忘れてた鬱。

$value =~ s/</</g;
$value =~ s/>/>/g;

$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
0473nobodyさん03/02/26 20:46ID:???
>>465
タグの無効処理、一部有効処理は正規表現スレにいけ。
最近でも出た話題だからすぐに見つかるはず。

>>463
どうでもいいが、根本的に考え方がずれてるんだと思われ。
その処理で一体何がしたいのか言ってみるのもあり。
別のもっとスマートなやり方がみつかるかも。

>>469
CGIの設置は、
1.そのCGIを配布しているサイト
2.そのCGIを設置したいサイトのサポート
の順で方法を調べて、それでもさらにわからないなら諦めるのが普通。
それでも諦めきれない未練がましい人間なら、そうだな、
CGIスレに行けばもしかしたらいけるかも知れない。
1も2も失敗しているのなら、いける可能性はほとんどないだろうが。
0474nobodyさん03/02/26 21:23ID:???
質問なのですが、
CGIをperlで作成しているのですが
ゲームのロビーサーバーの代わりを ホームページ上で作成しようと考えているのですが、
ホームページを参照している クライアントに
TCP-IP、ポート指定 でデータを直接送ることはできるのでしょうか?
ホームページは、フリーでCGIが使えるます。

流れ的にこんな感じです。

0.各クライアントが ゲームを起動しておく。
1.ホームページでログイン処理.
2.ログインしたクライアントのIPアドレスを取得しておく.
3.ホームページ上でゲームの対戦相手を決める.
4.相手が決まったら CGIから各クライアントに
ログインしたときに取得したIPアドレス、ゲーム専用のポートに
対戦相手のIPアドレス、対戦相手の情報を送信して
ピアツーピア接続で 対戦させる。

どうでしょうか 可能ですか?




0475nobodyさん03/02/26 22:37ID:???
>>474
Perlで作ってればどんなことでもこのスレに書いていいというわけじゃないぞ。
0476nobodyさん03/02/26 23:02ID:???
可能かどうか聞いてるだけだしまぁいいんじゃないの。
可能。詰まったらまたおいで。
0477nobodyさん03/02/26 23:04ID:???
>>474
HTMLとブラウザを使っている限り、サーバー側からの情報の送りつけはまず無理と考えろ。
これはPerlとかに限らない話なので、これ以上はスレ違いになるので詳しい説明はしない。

文意を汲み取るならば、>>474のやりたいことは、
ユーザーがブロードバンドであることを前提にして、
鯖を用意し、ユーザーにJavaサーブレットやHSPで作ったexeなどを使ってもらうのが一番現実的だと思う。個人レベルでは。

なので、本気でやる気ならばそれぞれ専用のスレに移動しろ。
0478nobodyさん03/02/27 11:20ID:SWu201Ch
push(@array,"a");
push(@array,"b");
push(@array,"a");
push(@array,"c");
foreach $value (@array){ print "$value\n"; }
これを実行すると、a b a cとなります。
aは1回目に既に配列の中にあるので2回目のaは入れたくないのですが、
どうすればいいのでしょうか。
0479nobodyさん03/02/27 11:35ID:???
>>478
push(@array,"a");
push(@array,"b");
#push(@array,"a");
push(@array,"c");
0480nobodyさん03/02/27 11:42ID:???
入れる前に処理するのと入れた後に処理するのが有りそうな予感
0481nobodyさん03/02/27 12:02ID:???
>>479
ワロタ
0482nobodyさん03/02/27 12:33ID:???
>>478
入れるデータを変数で渡して正規表現で分岐ってのが一番分り易いんでない?
0483nobodyさん03/02/27 12:38ID:???
>>478
# 先に重複をチェックする方法
$append = sub { push(@array, $_[0]) if index("@array", $_[0]) == -1 };
$append->("a");
$append->("b");
$append->("a");
$append->("c");

# ハッシュを使って後からキーを取り出す方法
$hash{"a"} = "";
$hash{"b"} = "";
$hash{"a"} = "";
$hash{"c"} = "";
map { print "$_\n" } sort keys %hash;
0484nobodyさん03/02/27 14:19ID:???
>>473

> >>463
> どうでもいいが、根本的に考え方がずれてるんだと思われ。
> その処理で一体何がしたいのか言ってみるのもあり。
> 別のもっとスマートなやり方がみつかるかも。

テキストボックスの名前を羅列したファイルを参照して
フォームメール中の対応するテキストボックスを未入力不可にするスクリプトで

氏名とか住所とかはテキストボックスが複数にわかれてるので
firstNAME,familyNAMEと設定ファイルに書くと
orで条件わけしようと思ったんですが
よく考えたらorにする必要なかったです
氏名の場合なら単純に
firstName
familyName
と設定ファイルに書いて
一個ずつ条件分岐させればよかった話でした。

そもそも未入力不可のテキストボックスを指定する方法があまりよくない気がしてきだした…
0485nobodyさん03/02/27 16:01ID:???
>483
下のやり方でうまくいきました
有難うございます
0486nobodyさん03/02/27 18:06ID:???
西暦→和暦の関数白根?ぎぼんぬ
0487nobodyさん03/02/27 19:13ID:???
<?php
#IN:$seireki 西暦
#OUT:$val[0] 元号 $val[1] 年
function wareki($seireki) {
$gengo=array(
'1989'=>'平成',
'1926'=>'昭和',
'1912'=>'大正',
'1868'=>'明治'
#後は自分で
);
while(list($nen, $gen) = each($gengo)) {
if($seireki >= $nen) {
$val[0] = $gen;
$val[1] = $seireki - $nen + 1;
return($val);
}
}
exit;
}
?>
048848703/02/27 19:18ID:???
Perlスレでした
すまん
0489nobodyさん03/02/27 19:31ID:???
>>486
ここにあった
ttp://cgikon.com/
049048603/02/27 21:39ID:???
>487-489
さんこす
0491nobodyさん03/02/28 08:20ID:nTu2mU2W
すいません。
キー1=値1
キー2=値2
みたいなフォーマットのファイルを扱うクラスがどこかにあったと思うのですが、
名前を教えて下さい。
0492nobodyさん03/02/28 08:24ID:???
初心者は暮らすなんか使ってはいけません。
0493nobodyさん03/02/28 08:37ID:0F+7IAI5
そんなこと言わずに教えてください。
use Class;
my $class = new Class();
$class->method();
$class = undef;
クラスの使い方なんか、たったこれだけじゃなかとですか。
0494nobodyさん03/02/28 11:28ID:???
>>493
んぢゃ自分で作れば?
0495nobodyさん03/02/28 13:08ID:???
もっともやね >494
0496nobodyさん03/02/28 14:41ID:6S1ggN3l
自分で書いたクラスはあります。
ただ、標準モジュールにそういうクラスがあるなら、配布しなくていいからそっちのほうがいいです。
0497nobodyさん03/02/28 18:05ID:???
>>496
こんなところでレス書いていないでCPANで探すのが吉。
無駄な労力はストレスの要因ですよ(^o^)
0498nobodyさん03/02/28 19:27ID:???
>>493
new Class()で返ってきたのは、おそらく、オブジェクトなので$classという変数名は不適切。
変数を破棄する場合は、undefを代入するよりも、undef $hoge;の方が意味がわかりやすい。
0499nobodyさん03/02/28 19:49ID:???
>>496
AnyDBM
0500nobodyさん03/02/28 20:15ID:???
標準では無いと思う。
0501nobodyさん03/03/01 12:50ID:???
>>496
SGBMでもGDBMでもDBでもNDBMでもなんでもいいじゃん。
0502nobodyさん03/03/01 21:02ID:???
質問です。
ファイルのリスト @files を、更新が古い順に並べ替えたいんですが…
一応自分でも考えてみました。

@new = ();

foreach (@files){
push @new, (stat $_)[9] . "<>" . $_;
}

@files = ();

foreach (reverse(sort @new)){
my(undef, $x) = split /<>/;
push @files, $x;
}

これでできそうなんですが、もっといい方法があるような気がします。
もっといい方法があれば教えて下さい
お願いします。
050350203/03/01 21:25ID:???
ageさせてもらいますね
0504nobodyさん03/03/01 21:49ID:???
my @file;
my %hash;
foreach(@new){
$hash{(-M $_)} = $_;
}
foreach(sort{$b <=> $a} keys %hash){
push(@file, $hash{$_});
}

うーん…。
0505nobodyさん03/03/01 21:58ID:???
sort {(stat $a)[9] <=> (stat $b)[9]} @files;
でいけるかな
0506nobodyさん03/03/02 02:50ID:???
>>504
同時刻のファイルが消される。

>>505
比較の度に stat を呼ぶのはマズい。

手っ取り早くやるならこう。
@files =
 map $_->[0],
 sort { $b->[1] <=> $a->[1] || $a->[0] cmp $b->[0] }
 map [ $_, -M ],
 @files;
0507nobodyさん03/03/02 11:30ID:???
エレガントだ。
0508nobodyさん03/03/02 12:17ID:???
>>507
何でもかんでも1行にまとめるのがエレガント?
じゃあ俺ほとんどのCコードを10行以内にまとめられるけど。
050950403/03/02 12:33ID:???
>>506
確かに同時刻のファイルが消されます。
忘れてました。

シュワルツ変換(Schwartzian Transform)ですね。
やっぱり覚えた方がいいかな。。
0510nobodyさん03/03/02 13:14ID:???
tr/\n//d;
0511nobodyさん03/03/02 15:00ID:???
>>509
Schwartzian Transform はデリファレンスのオーバーヘッドがあるんで、
同じ事をより効率良くやるには地道に作業変数を作ってソートした方が
いいらしい。

{
 my @time;
 push @time, -M for @file;
 @file = @file[
  sort {
   $time[$b] <=> $time[$a] || $file[$a] cmp $file[$b]
  } 0..$#file
 ];
}

>>508
1行(と言うか1文)に詰め込む云々より、この作業変数の為にブロックが
増える所がエレガントでないとは思うがな。
0512初心者03/03/02 17:23ID:EYbp7ypM
windowsではexec関数は使えないの?
perl内で、EXEファイルを実行したいのですが。
0513nobodyさん03/03/02 17:51ID:???
>>512
死ねクソマルチ。 
051450203/03/02 17:57ID:???
みなさん回答していただいてありがとうございます!
おかげでできそうです
初めてなんですけどここの板の人って親切ですね
また何か困ったことがあったらよろしくお願いします。
0515nobodyさん03/03/02 18:29ID:???
なんだマルチか。
0516nobodyさん03/03/02 18:44ID:???
>>514
自分で勉強する意志のある人には協力するさ(うわっ、なんか俺かっけー
0517nobodyさん03/03/02 18:46ID:???
>>516
同意。
0518nobodyさん03/03/03 00:20ID:???
こんな事をできる定義の方法ってあります?

$b="b";
@a[0]="a";
printf("[%s]",$b);
### [a]と表示
0519nobodyさん03/03/03 00:36ID:???
>>518
$bにbを代入してる以上、お前は天才かアホかのどっちかだ。
0520nobodyさん03/03/03 00:58ID:???
>>519
@a[0]と$bを同じ変数として扱う方法はありますか?
という質問です。
@a[0]="a";によって$b="b";が上書きされるという事を表現したかったんです。
説明不足で申し訳ありません。
0521nobodyさん03/03/03 00:59ID:???
>>519
いや待て、ちょっと待て。
何かがあるかも知れぬぞ。

では518さんのご登場です↓
0522nobodyさん03/03/03 01:04ID:pK+Ijnrw
バカばっか
0523nobodyさん03/03/03 01:26ID:???
>>520
参照・・・Perlではリファレンスか。それについて調べてみ。
0524nobodyさん03/03/03 01:30ID:???
my @a;
local *b; # 動的スコープに注意
*b = \$a[0];

$b = 'b';
$a[0] = 'a';
print "[$b]";
0525nobodyさん03/03/03 01:34ID:???
Cで言うところのポインタ
0526nobodyさん03/03/03 01:36ID:???
>>519>>521がめちゃ格好悪いってのだけは理解した
0527nobodyさん03/03/03 01:36ID:???
my @a;
local *b; # 動的スコープに注意
*b = \$a[0];

$b = 'b';
$a[0] = 'a';
print "[$b]";
my @a;
local *b; # 動的スコープに注意
*b = \$a[0];

$b = 'b';
$a[0] = 'a';
print "[$b]";
my @a;
local *b; # 動的スコープに注意
*b = \$a[0];

$b = 'b';
$a[0] = 'a';
print "[$b]";
my @a;
local *b; # 動的スコープに注意
052852403/03/03 01:47ID:???
>>527
# 動的スコープに注意
は癖なんですが…。

他に問題あります?
052951803/03/03 01:49ID:???
>>524
ありがとうございました。
0530nobodyさん03/03/03 03:24ID:MIMHRhQC
簡単な掲示板を作れるようになったんですが・・
記事削除のやり方がワカランチンです。
投稿に記事ナンバーをつけ、削除のフォームに記事ナンバーを入力して
削除って形をやりたいんですが・・・

よかったら上記の簡単なコードの流れを教えて下さい。お願いします。
0531nobodyさん03/03/03 03:27ID:???
>>530
kentさんとかのソースをぱくるよろし
あとすれ違いっぽい
0532nobodyさん03/03/03 04:11ID:???
投稿時に削除Passを指定しといてそれと照合しればいい
管理人削除とか既にできてるならそれの応用で。
0533nobodyさん03/03/03 04:18ID:???
             ∩
        ∧_∧   | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (  ´Д`)//  < 先生!こんなのを発見シマスタ!
      /       /    |
     / /|    /      \  http://saitama.gasuki.com/hiroyuki/
  __| | .|    |         \
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\     \_____________
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
0534nobodyさん03/03/03 14:30ID:yTVIkXIk
メインルーチンにあるハッシュの値の一つだけをサブルーチンで
使いたい場合、(例1)引数としてハッシュ丸ごと渡してサブルーチンで
取り出すのと、(例2)呼び出し前に取り出して一つだけを引数として
渡すのでは、呼び出し以降の効率の違いはあるのでしょうか?

例1
&shori (%DATA);

sub shori {
my %DATA = @_;
$DATA{'name'} を処理
}

例2
$name = $DATA{'name'}; ← これは既に得られているものとする
&shori ($name);

sub shori {
my $name = @_;
$name を処理
}
0535nobodyさん03/03/03 16:30ID:???
>>534
引数にハッシュを指定すると、ハッシュの各要素がすべて展開されて渡されるから
効率は悪いかもしれない。特にサブルーチン側で別のハッシュにコピーするのは
ちょっと良くないんじゃないかな。
&shori(%DATA) → &shori('key1','value1','key2','value2', ... )

使う値が1つだけであれば、例2のように1つだけ渡すのがいいと思う。
またはリファレンスを使うとか。

&shori(\%DATA);

sub shori {
my $hashref = shift;
# $hashref->{name} または $$hashref{name} のように参照する
}
053653403/03/03 18:45ID:???
>>535
値渡しとリファレンスをうまく使い分けながらやってみることにします。
ありがとうございました。
0537nobodyさん03/03/03 20:33ID:F3LmFaEY
アクセスカウンターを作りたいのですが、
htmlからcgiを呼び出すときに、IMGタグを使って呼び出すには
どうすればいいのでしょうか?
イメージタグを出力するだけでは駄目なんですね。
ご存知の方いらっしゃいましたら、お願いします。
0538nobodyさん03/03/03 20:35ID:???
スレ違い
0539nobodyさん03/03/04 00:02ID:???
>>537
フリーのアクセスカウンター使ってろ。
それの仕組みが理解できるようになってから自作とかほざけ。
それに、ここはPerlのスレであってCGIのスレじゃねえ。
0540nobodyさん03/03/04 00:43ID:???
>>539
>それに、ここはPerlのスレであってCGIのスレじゃねえ。

はプログラム板のこっちだと思われ。

Perlについての質問箱 3箱目
http://pc2.2ch.net/test/read.cgi/tech/1041205885/l50


晒しageとくな。
0541nobodyさん03/03/04 02:26ID:???
1嫁
0542nobodyさん03/03/04 09:56ID:???
厨房初心者な質問はここでよいのでしょうか?(すみません)


ええと、時間なのですが、昨日の時間などとか、イロイロ出したいのですが一番手っ取り早い方法はなんでしょう。

今考えた方法は、現在時刻
2003/03/04/01:01.00
(年/月/日/時:分.秒)
から引いたり足したり、繰り上げたりするのを考えたんですが、非常に効率悪くて作りにくいです。
特に、繰り上がったり繰り下がったりするのが大変です。
しかもうるう年とかよく分からないし。汗

超初心者な事やってますか?俺
どうやれば手っ取り早く出来るのでしょうか?
0543nobodyさん03/03/04 10:27ID:???
localtime(time() + $hoge)
で増減分を$hogeにつっこむ。
054454203/03/04 10:47ID:???
な、なるほど!

ありがとうございます。
あまりに俺が房だったようですね…。

単位は秒ですよね?秒でやってみます。

m(_ _)m
0545nobodyさん03/03/04 16:01ID:gscrXgmO
#! /usr/local/bin/perl

mkdir('./testing',705);
open (NTT,'./vcount/vcount.cgi')|| die "ファイルを開けません :$!\n";
@nt = <NTT>;
close (NTT);
open (VVT,'./testing/vcount.cgi');
print VVT "@nt";
close (VVT);
exit();

"./vcount/vcount.cgi"の内容を"tester"ディレクトリの作りその下に"vcount.cgi"で作りたいのですが
上の記述ではフォルダが作られても中にファイルが生成されません。
どうしてでしょうか。要はあるディレクトリ内のファイルを全て別のディレクトリに自動コピーさせたくて
とりあえず1ファイルに絞って書いてみました。どうすれば内容を自動コピーできるんでしょう。
環境はWin98とActive Perl、An HttpdをオンラインでダイナミックDNS経由で自分のPCのC
GIを実行しています。
0546nobodyさん03/03/04 16:06ID:???
>>545
open (VVT,'>./testing/vcount.cgi');

それから print VVT "@nt"; だと期待と違った結果になるので注意。
print VVT @nt; のように汁。

054753403/03/04 16:19ID:???
バイナリモードで扱ったほうが後で文字化け防止になるだろう
0548nobadyさん03/03/04 16:44ID:???
checkboxで一旦チェックを入れたら、それ以降再びチェックして外すまで
チェックが入ったままにするにはどうしたらよいでしょうか?
個人データを扱う物で、複数回内容を書き換える事を前提にしています。
ご存知の方いらっしゃいましたら宜しくお願いします。
0549nobodyさん03/03/04 16:49ID:gscrXgmO
>>546
ありがとうございます!!きっちり生成されました!!
助かりました!
0550nobodyさん03/03/04 17:46ID:???
>>548
Perlと何の関係が?
0551nobadyさん03/03/04 18:05ID:???
>>550
そうか、関係ないのか・・・
逝ってきます。
0552nobodyさん03/03/04 18:19ID:???
>>548
クッキーに保存かiniファイルの保存
055355203/03/04 18:20ID:???
ファイルのじゃなくてファイルにね。
で、checked属性にブール値を設定する
0554nobadyさん03/03/04 18:44ID:???
>>552
ありがとうございます。早速検索してやってみますね。
0555nobodyさん03/03/04 20:24ID:???
ネット上のデータ(例えばヤフーのトップページのソースとか)
をPerlで読み込む場合はopen関数ではないんでしょうか?
ペーペーにはまだまだ手の出ないコードでしょうか?

同ディレクトリとかつながっているディレクトリのデータを読み込む事を
やっていて、ふと思ったので。
0556T女の竹田03/03/04 20:27ID:???
>>555
もうその質問何十回目だろう(笑
FAQでも作るべきかな?

LWP::Simpleってので調べてみるといいよ。
WinのActivePerlなら最初から入ってるはず。
0557nobodyさん03/03/04 20:37ID:???
HTMLで開始タグと終了タグが一致しているかどうか調べたい

例えば、<em>mona>/strong>や
終了タグの閉じ忘れでエラーがでる

のですが、具体的にどうすればよいのかさっぱりです。
何がいい方法があれば教えて頂けないでしょうか。
0558nobodyさん03/03/04 20:40ID:???
>>557
validatorにかけてみる。
http://validator.w3.org/
055955703/03/04 20:44ID:???
<em>mona>/strong>でしたね。大して変わらないけど。

>>558
例えば掲示板の投稿時なんかに最低限のチェックをしたいだけなのでvalidatorはちょっとです。
0560T女の竹田03/03/04 20:49ID:???
>>559
タグは全部許可なの?
056157703/03/04 20:58ID:???
また間違えてるし。

>>560さん
タグは属性をもつものや空要素も含めて全て許可しています。
最低限属性を持たないタグの整合性だけでもチェックしたいのですが。
0562nobodyさん03/03/04 21:58ID:???
>>556
ありがとうございました。
方法はわかりましたが、導入難し・・・まだまだ先は遠いようで、いろいろ調べてみます。
0563nobodyさん03/03/04 22:07ID:???
>>561
がんばってスタックでも書いてみたら?
でも、< />な要素が入ると崩壊するか。難しいな。
0564T女の竹田03/03/04 22:13ID:???
>>561
難しいね。
その場しのぎの方法ならそれなりにありそうだけど、それでも
それなりにめんどくさそうだなぁ。
0565validator厨03/03/04 22:15ID:???
投稿時に http://validator.w3.org/ でチェックしろと促す(w
0566nobodyさん03/03/04 22:35ID:???
http://www.din.or.jp/~ohzaki/regex.htm#NoEndTag
0567T女の竹田03/03/04 22:50ID:???
適当に書いてみた(超いいかげん)。
タグの中で'<'や'>'が書けないのは仕様です。

my $temp = $to_check;
$temp =~ s|<!--.+?(-->)||sg;
$temp =~ s{<(script|style).*?(</\1>)}{}sgi;
$temp =~ s{</?(br|p|li|hr|meta|input|img|base)[^>]*>}{}sgi; # 閉じないことを許可するタグ
while ($temp =~ s|<(\w+)[^>]*>[^<>]*(</\1>)||si){}
error() if $temp =~ /[<>]/s;

>>566 気づかなかった。
056856103/03/04 22:53ID:???
>>563さん
取りあえずこんなの書いてみますたが
$data = "<a><b>a</b></a><c /><d></f>";

my(@stack) = ();

while($data =~ /<\/?(\w+)\s*.*?>/){
if($data =~ /<(\w+)>/){
push(@stack,$1);
}elsif($data =~ /<(\w+)\s*\.*?\/>/){
;
}elsif($data =~ /<\/(\w+)>/){
$tmp = pop(@stack);
if($1 ne $tmp){die "不整合";}
}
$data =~ s/<\/?(\w+)\s*.*?>//;
}

print "end\n";

なんかスマートじゃないですね。というかそれ以前に正規表現が怪しい。
属性がつくともうだめぽ

>>565
きっと誰も従いませんよ(w
0569nobodyさん03/03/04 22:55ID:???
>>566,>>567さん
ありがとうございます。これから解読します。
0570T女の竹田03/03/04 23:03ID:???
ちょっと修正。
どっちにしても役に立たなさそうだけど。

$temp =~ s|<!--.+?(-->)||sg;
$temp =~ s{<(script|style|pre|textarea)(\s[^>]*)?>.*?(</\1>)}{}sgi;
$temp =~ s{</?(br|p|li|hr|meta|input|img|base)(\s[^>]*)?>}{}sgi; # 閉じないことを許可するタグ
while ($temp =~ s|<(\w+)(\s[^>]*)?>[^<>]*(</\1>)||si){}
0571nobodyさん03/03/04 23:22ID:TX/Dujet
$str1="20030304" を使って
$str2="2003年03月04日" を生成したいのですが
どうすればよいですか?
0572nobodyさん03/03/04 23:24ID:???
>>571
$date =~ s/^(\d\d\d\d)(\d\d)(\d\d)$/$1\/$2\/$3/;

057356103/03/04 23:24ID:???
初めて見た特殊文字が多かったので解読に手間取りました。
正規表現雑技の方は$(の辺りが今一解読できてませんが。

>>570さん
役に立たないなんてそんな。
\数字は目からウロコでした。さっき書いたコードが恥ずかしいです。
当面の間このコードを借用させて頂きます。ありがとうございました。
0574nobodyさん03/03/04 23:32ID:???
>>571
$str1 =~ s/(\d{4})(\d{2})(\d{2})/$str2 = qq{$1年$2月$3日}/e;
0575nobodyさん03/03/05 01:23ID:???
>>574
それは $str1 の内容も書き換えるので

($str2 = $str1) =~ s/(\d{4})(\d{2})(\d{2})/$1年$2月$3日/;
0576nobodyさん03/03/05 23:48ID:LLn1UqDh
何となく DB というものを使ってみたくなり、Perl で PostgreSQL を扱いたい訳なんですが・・・

ぜんぜん勉強法が見えてきません。“ Perl で”っていう時点で、もう駄目なのかなあ・・・やっぱ PHP なんですかね?

もし宜しければ、オススメのサイトや参考書を教えて頂きたいのですが。
0577nobodyさん03/03/05 23:57ID:???
>>576
DBIとか。
0578nobodyさん03/03/06 00:04ID:/oqmBN82
なるほど。DBI を勉強しろと言うことなのか・・・なるほど。
0579nobodyさん03/03/06 00:09ID:???
自分で作ったモジュールの中からさらにモジュールオブジェクトを作成すると
newでの変数初期化がされない現象が起こるのですが、これはperlの仕様ですか?

↓-------------------- a.pl
package a;
sub new{
my $this=shift;
my $a=0;
my $obj{'obj'=>$a};
bless $obj,$this;
return $obj;}1;
↓--------------------- b.pl
package b;
require('./a.pl');
sub new{
my $this=shift;
my $b=0;
my $obj{'obj'=>$b};
bless $obj,$this;
return $obj;}
sub test{
my $a = new a;
print "a=$$a{'obj'}";}1;
↓--------------------- main.cgi
require('./b.pl');
sub test
{my $b = new b;
$b->test();}
-------------------------------------
結果:a=
(何も表示されない)
0580nobodyさん03/03/06 00:13ID:???
>>576
まずは道具をインストールする。
で、SQLを適当に理解する。
あとは、
connect prepare execute fetch finish disconnect
0581nobodyさん03/03/06 00:13ID:???
仕様=バグとか言うふざけた前提でほざいてると解釈して良いのか?
0582nobodyさん03/03/06 00:14ID:???
>>579
newは「変数初期化」なんて機能じゃないけれど。
0583nobodyさん03/03/06 00:18ID:???
>>579
前置(?)のnewは、コンパイルするときに、それが関数か、
メソッドかを決定しないといけない。
で、newっていうサブルーチンがある(ように見える)から、関数になった。と。

a->new()でどうだ。
058457903/03/06 00:22ID:???
>newは「変数初期化」なんて機能じゃないけれど。
あい、それは承知してます。
newでオブジェクトのメンバを初期化したいという意味でした。
>>579の場合だと、a.plで
$a=0;
・・・
$obj={'obj'=>$a};
としているのに、bから作成したときは$a->{'obj'}に0が入っていないのです。
(0以外でも同様。main.cgiから直接作成した場合は初期化される)
これがバグなのか、仕様なのかどこにも説明してないので設計に困ってます。
058557903/03/06 00:24ID:???
>>583
ありがdございます。試してみます。
0586nobodyさん03/03/06 00:26ID:???
>>579
http://www.geocities.co.jp/SiliconValley/5634/t82E2_0001.html#1941
http://www.geocities.co.jp/SiliconValley/5634/t82A2_0003.html#2203
0587nobodyさん03/03/06 00:28ID:???
perlobjにWARNINGって大きく書いてあるんだけどなぁ〜
0588nobodyさん03/03/06 00:30ID:???
>>580
どうもです!いろいろやってみるしかないですね・・・
0589nobodyさん03/03/06 01:02ID:???























0590nobodyさん03/03/06 11:24ID:rJoYB8KP
ActivePerlの5.6と5.8って共存できますか?
0591nobodyさん03/03/06 11:26ID:???
>>590
できる。
0592nobodyさん03/03/06 12:35ID:nlUIeg7X
あの…

日本語を交えて変数を作りたいのですが、
「全部」ハッシュにしたらアホでしょうか?

$file{'ログファイル'}
$file{'登録ファイル'}

やっぱ重くなりますか?
アホ丸出しのような気がしますが、この方が作りやすいんです。
0593nobodyさん03/03/06 12:55ID:???
>>592
そういう質問をするレベルならどうせ動かないから好きに作っていいよ。
ただしサーバには上げないでローカルでやってくれな。
0594nobodyさん03/03/06 13:21ID:???
>>592
日本語を使いたいのはわからんでもないですが、
はっきりいってアホです。
0595nobodyさん03/03/06 13:28ID:???
VB使え。
0596nobodyさん03/03/06 14:17ID:???
>>595
VakaBasicでつか?
0597nobodyさん03/03/06 15:09ID:???
>596
そでつ
0598nobodyさん03/03/06 16:25ID:???
$変数 = 1;

Unicodeでなんとかならんか?
0599nobodyさん03/03/06 16:42ID:???
>>592
別にいいんじゃない?
ハッシュの構造上、考えてるほど重くはならないよ。

ただ、他人がそのソースを見たら( ´,_ゝ`)プッ とは思うかも。
0600nobodyさん03/03/06 18:20ID:mX/0qgeV
>>592
そんなあなたにPerlのオブジェクト指向文法!

$this->{field} = 'test';
$this->{公安二課課長補佐} = undef;

主な利点:日本語がちょっとだけ目立たない。
0601nobodyさん03/03/06 18:25ID:???
BSD magazine No.12 P127〜P128 より
> use encoding "euc-jp"; # スクリプトと同じ文字コードを指定
> use utf8;
> my $人 = 1;
> $人++; # 私たちは繁殖している!
060260103/03/06 18:26ID:???
要 Perl 5.8.0 な。
0603nobodyさん03/03/06 19:30ID:???
>>600
それができるのは、キーが\wのとき。日本語の場合は何かでくくらないとだめ
0604nobodyさん03/03/06 20:58ID:+0RpBVtX
すいません、ActivePerl-5.8.0.805-MSWin32-x86にwin32-apiをppmを起動してインストールしようとすると
ppm> install win32-api
Error: no suitable installation target found for package win32-api.
と表示されインストールできませんでした。
ppm>sarch win32-api
ppm> search win32-api
Searching in Active Repositories
1. Win32-API-OutputDebugString [0.03] OutputDebugString Win32 API support
ppm> install 1
Package 1:
Error: no suitable installation target found for package
Win32-API-OutputDebugString.
サーチをかけてインストールしてもパッケージがないと言われます。
また、
no suitable installation target found for package
の一文で検索をかけても英語圏HPしかでてこず、多分どこかにパッケージを
ぶち込んだらOKだと言う解釈なのですがどうにもヘタレ読解力ではキビシイです。
アドバイスお願いできないでしょうか?
0605nobodyさん03/03/06 21:09ID:???
>>604
ありゃ、インストールされた。
日を改めてインストールしてみたら?
0606nobodyさん03/03/06 21:13ID:+0RpBVtX
粘って粘って3日目です(;´д⊂)
0607nobodyさん03/03/06 21:46ID:+0RpBVtX
しまった・・。
環境はXPproでc¥perlにperlをインストールしています。
0608nobodyさん03/03/06 22:41ID:???
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/shinagawa/
060959203/03/07 12:00ID:???
>>593-600

分かりました。ありがとうございます。
別に
アホ丸出しだろうが
( ´,_ゝ`)プッと思われても構わないので
今後は全部ハッシュで作ろうと思います。
0610nobodyさん03/03/07 16:16ID:o/kX6MY9
特定のホストからのアクセスのみ通すアクセス制限をしたくて探したのですが、
逆の「特定のホストからのアクセスをはじく」アクセス制限のCGIしか見つけられず
そこで、これを改造したら使えないかなあと考えました。
が、どこをどういじって良いのか見当がつきません。どなたかお知恵を貸してください・・。
@deny = ("*.co.jp","*.hoge.net");

sub get_host {
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
# gethostbyaddr関数を使用する場合は1
$gethostbyaddr = 1;
if ($gethostbyaddr) {
if ($host eq "" || $host eq "$addr") {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
}
if ($host eq "") { $host = $addr; }
}
sub axs {
# ホスト名を取得
&get_host;
if ($deny[0]) {
local($flag)=0;
foreach (@deny) {
if ($_ eq '') { last; }
$_ =~ s/\*/\.\*/g;
if ($host =~ /$_/) { $flag=1; last; }
}
if ($flag) { &error("許可されていないアクセスです") }
}
}
0611nobodyさん03/03/07 16:20ID:???
>>610
.htaccess じゃダメなの?
061261003/03/07 16:20ID:o/kX6MY9
いっそシンプルにこうしたら・・・??
sub axs {
&get_host;
if ($_ ne "@deny"){ &error("許可されていないアクセスです")}
}
061361003/03/07 16:21ID:o/kX6MY9
.htaccessもSSIも使えないです(^^;
0614nobodyさん03/03/07 16:24ID:???
以下のような過去10回のゲームの結果があります。
名前<->点数<->偏差値<-> の様になってます。
これを名前でuniqしたいのですが、賢い方法はあるでしょうか?
一応自分で作ったのですが、マヌケな感じで最後の人が表示されないようです。
識者の方、よろしくお願いします。

--(生データ)---
a<->17<->100<->
a<->20<->68.97<->
a<->20<->68.97<->
a<->27<->87.1<->
b<->27<->87.1<->
c<->13<->41.94<->
c<->14<->87.5<->
c<->22<->75.86<->
c<->22<->75.86<->
c<->8<->47.06<->
d<->14<->82.35<->
d<->14<->87.5<->
d<->25<->86.21<->
d<->25<->86.21<->
d<->31<->100<->
e<->16<->100<->
e<->17<->100<->
e<->27<->93.1<->
--(生データ)---
0615nobodyさん03/03/07 16:26ID:???
>>614 です。
自分で作ったマヌケなプログラムです。

@sortedに生データが入っているとして、

foreach (@sorted){
($s_name,$s_point,$s_rate) = (split(/<->/))[0,1,2];

if($s_name eq $old_name){
$total_p = $s_point + $old_point;
$total_rate = $s_rate + $old_rate;

$old_name = $s_name;
$old_point = $total_p;
$old_rate = $total_rate;
$howmany ++;

}elsif ($s_name ne $old_name){
$average=sprintf('%4.2f', $old_point / $howmany); $average+=0;
$rate_avg=sprintf('%4.2f', $old_rate / $howmany); $rate_avg+=0;
push(@uniq, "$old_name<->$old_point<->$howmany<->$average<->$rate_avg\n");

$old_name = $s_name;
$old_point = $s_point;
$old_rate = $s_rate;
$howmany = 1;
}else{ print "Error!! does not match!!\n";}
}
shift @uniq;
@uniq = reverse sort { (split(/<->/,$a))[3] <=> (split(/<->/,$b))[3] } @uniq;
061661003/03/07 16:33ID:o/kX6MY9
>>612
待った・・・根本的なところが、、、

ごめん、超厨房な質問。
$_ の意味はなんでしょう。$名前 (変数)とは違いますよね。
#手元の入門書には$hogehogeと@hogehogeの説明はあるんだけど$_がない
0617nobodyさん03/03/07 16:36ID:???
>>616
デフォルトで入る変数だよ。
@deny で foreach してるなら、その中の各行が$_に入ってる
061861003/03/07 16:37ID:o/kX6MY9
>>617
そういうことなんですね・・。
ということは>>612はダメじゃん(死)
061961003/03/07 16:39ID:???
あげてしまった・・・。
062061403/03/07 16:43ID:???
これでどう?試してないけど。

それよりおらの質問にも答えてけれ

foreach (@deny) {
$_ =~ s/\*/\.\*/g;
if ($host =~ /$_/) { last; }
}
if ($_ eq '') { $flag=1; last; }
if ($flag) { &error("許可されていないアクセスです") }
}
}
062161403/03/07 16:47ID:???
上のダメだわ。これは?

foreach (@deny) {

$_ =~ s/\*/\.\*/g;
if ($host =~ /$_/) { last; }
}else{ &error("許可されていないアクセスです") }


}
062261003/03/07 16:50ID:???
>>620
おあ、ありがとう。
今思いついて書き込もうとしたんだけど、おもっきし間違ってたよーです(冷汗)

>それよりおらの質問にも答えてけれ
ごめん・・・わっちには手に余るんだ・・初心者すぎて(苦)
#掲示板カスタマイズくらいしか経験ない。
062361003/03/07 17:03ID:o/kX6MY9
これで大丈夫みたい・・・(エラーは出なかった)
sub axs {
&get_host;
foreach (@deny){
if ($_ eq '') { last; }
$_ =~ s/\*/\.\*/g;
if ($host =~ /$_/) { last; }

if ($_ ne "@deny"){ &error("許可されていないアクセスです")}
}
}

アクセスをはじけてるかどうかはまだチェックしてないけどね。
>>614さん、ありがとう(*^^*) 感謝です。
0624nobodyさん03/03/07 19:23ID:???
ある文字列を16進で縦に出力する方法を教えてください

例"5aB0"

0x35
0x61
0x42
0x30

0625nobodyさん03/03/07 19:38ID:UTyY6aWY
>>624
$str = "ある文字列";
chomp $str; # 必要なら
foreach( split //, $str ){
printf "0x%x\n", ord;
}
0626nobodyさん03/03/07 19:42ID:???
>>625
ありがとうございました
0627nobodyさん03/03/07 19:58ID:UTyY6aWY
>>614-615
エラーチェックはしてないでつ
あと@uniqの内容がこれで良いのか自信なし

@sorted = でーた;
@uniq = ();

my %count = ();
my %sum_point = ();
my %sum_rate = ();
foreach(@sorted){
my($name, $point, $rate) = (split /<->/)[0..2];
$count{$name}++;
$sum_point{$name} += $point;
$sum_rate{$name} += $rate;
}
foreach(sort keys %count){
my $ave_point = sprintf "%4.2f", $sum_point{$_} / $count{$_};
my $ave_rate = sprintf "%4.2f", $sum_rate{$_} / $count{$_};
push @uniq, join("<->", $_, $sum_point{$_}, $count{$_}, $ave_point, $ave_rate);
}
0628nobodyさん03/03/07 20:48ID:???
今変数内に、HTMLタグを含む文字列が入ってます。
質問1.この中の<br>タグ(大文字のタグも含む)の数を数えたい場合どうすればいいでつか?
質問2.この中の後から数えてn番目の<br>タグ(大文字のタグも含む)以降の文字列を別変数に入れたい場合どうすればいいでつか?
お頼み申し上げ候
0629nobodyさん03/03/07 21:29ID:???
>>628
#三回マッチ
$val = "1<br>2<br>3<br>4<br>5<br>6<br>7<br>";
$val =~ /((.*?<br>){3})/;
print "$'\n";
063062903/03/07 21:32ID:???
括弧が一つ多かった。
大文字も含むなら
$val =~ /(.*?<br>){3}/i;
0631nobodyさん03/03/07 22:16ID:???
>>628
2.の良い方法が思いつかないけどとりあえずこんなんで
index使ったほうがいいのかな

1. count_br(文字列)
2. separate_br(文字列,n番目)

sub count_br{
  my $str = shift;
  return ($str =~ s/<br>//ig);
}

sub separate_br{
  my($str, $cnt) = @_;
  $cnt = count_br($str) - $cnt;
  my $pre = join "<br>", (split /<br>/i, $str." ")[0 .. $cnt];
  return substr($_[0], length $pre );
}
0632nobodyさん03/03/07 23:00ID:???
my @line = $str =~ /[^<]*<br>/ig;
my $new = join('', @line[ $n .. $#line ]);
0633nobodyさん03/03/07 23:06ID:???
$'を使うものの方が速そうだな。あぁ
063463103/03/07 23:12ID:???
>>632
漏れもそれを最初は考えたんだが、<BR>以外のタグが
あったときなんかはどうすれば良いのでしょう?
回避方法が思いつかずあんな恥ずかしいソースに…
063561403/03/07 23:20ID:???
>>627
ありがとう。
ちょっと手直ししたらうまくできましたーー。
きれいなコードで早そうですね。
まじさんくす。

0636nobodyさん03/03/07 23:28ID:???
>>634
はぅー考えてなかった。

そこは否定先読みで何とかできるかな。
0637nobodyさん03/03/07 23:29ID:???
$val = "1<br>2<br>3<br>4<br>5<br>6<br>7<br>";

my $want = 3; # 3以降
my $count = 0;
my $after = '';
while($val =~ /<br>/ig){
if (++$count == $want){
$after = substr($val, pos($val));
}
}

print "count=$count after=$after\n";

出遅れた…。
063863103/03/07 23:33ID:???
>>636
n番目の<BR>以降がn番目の<BR>を含まないならこうでいいのかな?
ベンチマークしたらほとんど変わらなかったけどソースすっきりです。

sub separate_br{
my($str, $cnt) = @_;
my @line = $str =~ /.*?<br>/ig;
return join('', @line[ ($#line-$cnt+2) .. $#line ]);
}
0639nobodyさん03/03/08 00:35ID:???
なるほど。最短一致ですか。先読みとか言ってた自分はアホですな。
0640 03/03/08 01:05ID:???
スクリプトがかけるCPU負荷というのは、どうすれば
調べる事ができるのでしょうか? PERLだと、どのような
処理を用いると負荷を上げてしまうのでしょうか?

Admin設置禁止CGIスクリプト情報
http://chat-jp.com/announce/denycgi/index.html
0641nobodyさん03/03/08 01:11ID:???
timesで何かそれらしき物(CPU時間)が出てくるから、少しは参考になるかも。
064262803/03/08 03:36ID:???
>>629-634,636-639
うまくいきました。
ありがとうございます。

今回は漏れの厨な脳に一番マッチした637さんのを使わせていただきました。
ただ、後から数えてn番目の<br>タグ以降の条件が前から数えてになってまつた。
0643nobodyさん03/03/08 04:20ID:???
CJ ClubのCGIってそんな負担だったのか…。
私も詳しく負荷率調べる方法教えて欲しいのです。
0644 03/03/08 06:43ID:???
ローカルでHTML表示部分をループさせて
process viewer見てたら、perlだけで30%近く
いきますね。
0645nobodyさん03/03/08 08:09ID:ijgyFeL7
45
0646nobodyさん03/03/08 09:22ID:2Y4AuOip
それここに書いてある
http://homepage3.nifty.com/digikei/
http://homepage3.nifty.com/digikei/sample/sample.html
              ,、-―-、
             丿   <`)       __
        ,、- ''' "二ヽ_(ヽ'`(二ニ・    |   \_
        /  、     !__'、_┌´     │   / `' ー┐
     /     ヽ   |   `         |   |     |
   ___ |    ヾ__|   |   _,、r‐'',ニ=-  |  /  _,、-‐'゙
 _| '、|    ミ/ ゙、  |_,∠-''´ ̄`'ー、   ̄|-''" |
 \|.  |     l___l     / ̄ヾ`´`   | ̄ ̄ ̄`'''iー、
.  |/゙|    ̄   ヽ_,、-''´`ヽ _,、,、,、,、_|______|_
  |  ( ´         ,、- ''゙  丿 ヾ二二二二二二二二二|ニ!
  ヽ<二二二二二>~/ / /   └‐┬─‐────┬┘
0647nobodyさん03/03/08 11:09ID:???
>>644
負荷かけてんだから当たり前なわけだが。
0648nobodyさん03/03/08 11:48ID:???
>>647
スクリプティングによる差は出ませんか?
0649nobodyさん03/03/08 12:10ID:???
>>648
そりゃ場合によっては差も出るだろうが
「HTML表示部分をループ」
だけならそんなに変わんないんじゃ?
0650nobodyさん03/03/08 12:23ID:???
>>649
掲示板の、
ログデータ読み込んで整形してHTMLで出力させる
みたいな感じです。
他で差が出るとすると連続書き込みさせた場合ですかね。
0651nobodyさん03/03/08 12:52ID:???
child tree のソースをちと読んでみた。
これは… 激しく読むのが苦痛。
CPU負荷は環境によるので一概には言えないが、
メモリにはかなり厳しそうなスクリプトですな。

で、>>640を読む限りだと
・禁止してないスクリプトなら設置していいよ
・でも負荷が高いときは勝手に止めることがあるからね
ということなので、CPU負荷は調べる必要ないかと。
0652世直し一揆(コピペ推奨)03/03/08 13:01ID:lDVM7LmW
<血液型A型の一般的な特徴>(見せかけのもっともらしさ(偽善)に騙されるな!!)
●とにかく気が小さい(神経質、臆病、二言目には「世間」(「世間」と言っても、同じA型を中心とした一部の人間の動向に過ぎないのだが・・・)、了見が狭い)
●他人に異常に干渉し、しかも好戦的でファイト満々(キモイ、自己中心、硬直的でデリカシーがない)
●妙に気位が高く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする
(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはた
いてい、内面的・実質的に負けている)
●本音は、ものすごく幼稚で倫理意識が異常に低い(人にばれさえしなければOK!)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者にはへつらい、弱い者に対してはいじめる)
●あら探しだけは名人級でウザイ(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため性格がうっとうしい(根暗)
●単独では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、人の目を異常に気にする(「〜みたい」とよく言う、
世間体命)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度
も言ってキモイ)
●表面上協調・意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をしストレスを溜めておきながら、他人に猛烈に嫉妬
する(不合理な馬鹿)  
●後で自分の誤りに気づいても、強引に筋を通し素直に謝れない(切腹するしかない!)●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。包容力がなく冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(例:「俺のほうが男
前やのに、なんでや!(あの野郎の足を引っ張ってやる!!)」)
0653nobodyさん03/03/08 14:48ID:GxFJGMsn
すいません、デコード処理のルーチンの一部なんですが
$in{$key} .= "\0" if (defined($in{$key}));
の「.」ってなんでそう?探してもみつからず、気になって気になって
夜も寝ずに昼寝してしまいます。
0654nobodyさん03/03/08 14:51ID:???
>>653
文字列の連結。 +=とかと同じシリーズ。って言うか基礎。本読め。
0655nobodyさん03/03/08 14:52ID:???
>>653
$a = $a . $b;
$a .= $b;

上を短縮した書き方が下。
他に += とか、ほとんどの演算子でこのような記法ができる。
0656nobodyさん03/03/08 14:57ID:???
あぁなるほど、いやね、妙に半角一マス空いてたんで違う意味なのかなって思ってマスタ。
ありがとうございました。これでぐっすりできます。多謝。
0657nobodyさん03/03/08 18:26ID:6Zv33rxC
以前定数は
use constantがイイ!
という意見が出てるのを見てから見栄えも上級者っぽい
という事もあって使いまくってたんですけど
何故配布CGIとかだとさっぱり使ってないんでしょう?
そんなの配布サイトに聞けッ!て感じですけど
ご意見聞かせて下さい。
0658nobodyさん03/03/08 18:30ID:???
constとenumで
0659nobodyさん03/03/08 18:33ID:???
配布CGIの作者は必ずしもPerlの達人ってわけじゃないからね。
糞みたいなスクリプトでもそこそこ動けばいいんだよ。

あと、Perl4でも動くようにっていう配慮もあるかも。
(でも実際は新しい記法についていけてないだけの人のほうが多そうだ)
066065703/03/08 18:46ID:6Zv33rxC
>>658-659
ありがとうございます。
配布CGIのほとんどが使って無いので
何か自分の知らない落とし穴でもあるんじゃ?と思ってました。
ほんのわずかでも早くなってデメリットが無いのなら
使わない手は無いという感じで、これからもビシバシ使おうと思います。
0661nobodyさん03/03/08 19:05ID:???
http://www30.cds.ne.jp/~yukinaka/eureka/notes/perl_memo.html#const

Perlではこんな面倒なことをしないと定数すら使えないのか。
0662nobodyさん03/03/08 19:15ID:???
上から順に読むんだからインライン展開とかできないだろが
0663nobodyさん03/03/08 19:32ID:???
配列@_内の重複した要素をまとめてユニークにするロジックなんですが・・
@a=grep(!$b{$_}++,@_);
foreach (@a){
print "$_\n";
}

grepの第一引数の意味がよくわかりません。({$_}とか++の意味)
重複したものを探して真の場合は取り除いている
ようなきはするのですが・・

どなたか教えてください。
0664nobodyさん03/03/08 19:49ID:g3+hGhZv
現在KENT WEBのSunbbsを改造しています。
それで新着情報ボードモードにしてあるので
$comと比較して「二重投稿禁止」のエラーを出させないようにしたいんですが

# 二重投稿の禁止
($num,$name,$com) = (split(/<>/, $lines[0]))[0,2,5];
&error("二重投稿は禁止です") if ($in{'name'} eq $name && $in{'comment'} eq $com);

↑この部分を全部消したら$numに干渉せず
記事全て[1]になってしまいます。
$in{'comment'} eq $comだけを消してもエラーが出てしまいます。
どなたか教えてください。
0665nobodyさん03/03/08 20:09ID:???
>>663
まず初期状態では %b は未定義なので、評価するとすべて偽。
grepの第1引数は、真で返すとその要素が戻り値のリストに入る。ここまでOK?

要素をキーとして $b{} を評価する。これが偽なら、はじめて出てくる要素なので
この要素をgrepの戻り値として返す。そのとき、第1引数は真にしないといけないので
!で反転させている。で、++して「その要素はすでに返した」というフラグを立てる。
これを繰り返す。

同じ要素が出てくると、$b{} は++されているので「真」になる。!で反転させると偽になり、
grepの戻り値としては返されない。結果、同じ要素は複数返されないことになる。

説明下手でスマソ

>>664
2行目だけ消せばいいと思われ。
0666nobodyさん03/03/08 20:15ID:???
>>663
$b{} はハッシュの要素を指す
! は論理否定
$_ はデフォルトの対象となる変数
(この場合はgrepによって第二引数=リストの一部が設定される)
++ はオートインクリメント(この場合は後置:式の評価後、インクリメントが発生)
066766403/03/08 20:19ID:???
>>665
OKでした。
2行目にも$comの記述があるから、と消そうとしなかった僕はアホですね。
ありがとうございました。
066866303/03/08 20:43ID:???
>>665
>>666
ありがとうございました
0669名無しのmakoto君(名前あるじゃん03/03/08 21:23ID:???
質問てか教えてなんだけど、簡単なアクセスカウンターの作り方
教えてください<(_ _)><(_ _)>ペコペコ
検索してもよく出てきませんでした(恥
お願いします(たたかれてもメゲマセン←ハァ?
0670nobodyさん03/03/08 21:32ID:???
>>669
あっちで答えてやったのでは不満か?傷ついた。
0671nobodyさん03/03/08 21:49ID:???
>>669
はいよ〜
http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=UTF-8&as_qdr=all&q=perl+%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%AB%E3%82%A6%E3%83%B3%E3%82%BF%E3%83%BC%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9&lr=
0672nobodyさん03/03/08 21:57ID:???
windows環境でperl勉強しています。
フルパスからファイル名を取得したいので
以下のように作りました。
一応機能的にはokなんですが、もう少し格好良くperlっぽいやり方があれば教えてください。
なんか無駄が多いような・・

$_=$0;
$_=~ s/^(.*)\\(.*)$/\2/;
print "$_\n";

0673nobodyさん03/03/08 22:03ID:???
>>671
ワラタ
0674名無し.net03/03/08 22:05ID:HY3rXLfE
はじめまして。
連想配列(?)についての質問なんですが、
$temp->{'001'} = "1";
$temp->{'002'} = "2";
$temp->{'003'} = "3";
という配列があり、これを通常の連想配列(ハッシュ)で
while (($name, $value) = each(%temp)) {
print "$name = $value<br>\n";
}
とやるのと同じ事をしたいのですが、可能なのでしょうか?
ご存知の方がいらしたら是非教えてくださいm(__)m
%tempを$tempにしたら、500 Internet Server Errorになってしまいました。
0675nobodyさん03/03/08 22:08ID:???
>>672
十分Perl臭い。
0676nobodyさん03/03/08 22:12ID:???
%{$temp}
だっけ…、ちと動作させてないから動くかわからん。
0677名無し.net03/03/08 22:14ID:HY3rXLfE
>> 676
おお。
出来ました。
ありがとうございましたm(__)m
0678 ◆hMJAPH9PWA 03/03/08 22:19ID:???
>>672
use File::Basename qw(basename);
print basename($0);

>>674
普通にハッシュを使うのではいけないのかな?
$temp{'001'} = '1';
# ...

まぁ、普通にデリファレンスすればいいんだけどさ。
while(my($name, $value) = each %$temp){
# ...
}
でも、サーバーで実験するのはやめたほうがいいよ。
ローカルマシンにperlを入れなさい。
0679nobodyさん03/03/08 22:21ID:???
>>672
$_=$0;
($_)= /.*\\(.*)$/;
print "$_\n";

んーいまいち
0680nobodyさん03/03/08 22:25ID:???
ローカルサーバでテストしてるのかも。
CGIとして実行するとエラーは全部500になっちゃうから、ちゃんと
エラーメッセージの見られる環境を用意したほうがいいよ。
(コマンドラインで実行させるとか、CGI::Carpモジュールを使うとか)
0681nobodyさん03/03/08 22:35ID:???
来訪者のホストを表示させるスクリプトを教えて下さい。
0682名無し.net03/03/08 22:36ID:HY3rXLfE
>> 678
Subroutineを梯子して使っているので変数形式のほうがいいかなぁと思いまして・・・。
っていうか、連想配列でのやり方知らないので(苦笑。

すいません。
一応、perlはインストールしてありますが、アップロードして実行して動くか調べてます(ぉぃ
やっぱサーバーに悪影響ですよね・・・。
0683nobodyさん03/03/08 22:56ID:???
>>681
表示させるって、「どういう環境で?」「どこに?」「どういうとき?」

質問するほうが省略してどうする!
0684nobodyさん03/03/08 23:02ID:???
>>683
それくらい自分で考えろ低脳。
0685nobodyさん03/03/08 23:06ID:???
>>683
すいません。
トップページを開いた時画面内どこでもいいですので表示させたいのです。
0686nobodyさん03/03/08 23:11ID:???
>>684は自分ではないです。
0687nobodyさん03/03/08 23:16ID:???
>>685
SSIは使えるの?
0688nobodyさん03/03/08 23:25ID:???
Perlと関係ない質問には答えんなってば。
>>681みたいなのはどうせクレクレ厨なんだから、技術的なアドバイスしても
徒労に終わるぞ。
068968703/03/08 23:29ID:???
そういえばここはPerlスレか。
0690nobodyさん03/03/08 23:42ID:???
>>687
つかえます
0691nobodyさん03/03/09 00:42ID:???
来訪者のホストを表示させるスクリプトを教えて下さい。

なにこの質問
このスレを舐めてるの?
0692nobodyさん03/03/09 01:39ID:???
書き込まれた内容を逆から表示したいのですが(例えば「あいうえお」を「おえういあ」)
reverseで反転すると日本語が化けてしまいます。
1バイト文字、2バイト文字が混在していても上手く反転して表示するには、どうすればいいのでしょうか?
また、改行(<br>)とかあっても正常に改行されて、且つ文字化けしない・・・。

よろしくお願いします。
技術的に難しいですか?
0693nobodyさん03/03/09 01:39ID:???
print $ENV{REMOTE_HOST};
0694nobodyさん03/03/09 01:41ID:???
>>692
文字コードは何なのか?
モジュールは使っていいのか?
perlのバージョンはいくつか?
0695nobodyさん03/03/09 02:36ID:teyBWd6E
use Benchmark;
timethese(10000,{
'ex1'=>sub {
print "テスト\n";
},
'ex2'=>sub {
print << "EOM";
テスト
EOM
}
});

をDOSプロンプトで実行すると

テスト
テスト
テスト
テスト
・・・・
テスト
ex2: 0 wallclock secs ( 0.60 usr + 0.00 sys = 0.60 CPU)

となります。
ex1: の結果をex2:のすぐ下にでも表示させたいのですが、
どうすればよいのでしょうか。
この結果(ex1: ex2:)はどこかの変数に入っているんですか?
アホな質問ほんとスミマセン・・・・。
0696nobodyさん03/03/09 02:42ID:???
>>692

print &jreverse('一応作ってみた。Shift-JIS限定。<BR>とか改行は考慮してないんでそのへんはうまく修正してちょ。');

sub jreverse {
my $str = shift;
my ($i, $f, @jchar) = (0, 0, () );
foreach (unpack('C*', $str)) {
$jchar[$i] .= chr($_);
if (!$f && (($_ > 0x80 && $_ < 0xa0) || ($_ > 0xdf && $_ < 0xfd))) {
$f++;
} else {
$f = 0;
$i++;
}
}
join("", reverse @jchar);
}
0697nobodyさん03/03/09 03:26ID:???
>>695
my $r = timethese( 略 );
foreach(keys %{$r}){
  my($sec, $usr, $sys, $cnt) = @{$r->{$_}}[0,1,2,5];
  printf "%10s: %2d wallclock secs (%5.2f usr + %5.2f sys = %5.2f CPU) @ %.2f/s (n=%d)\n",
  $_, $sec, $usr, $sys, $usr+$sys, $cnt/($usr+$sys), $cnt;
}
069869703/03/09 03:33ID:???
書き忘れ
どんなモジュールでも質問する前にドキュメント読むように。
perldoc モジュール名

で、usr+sys = 0 のとき上のルーチンではエラーになるので
適当に直して使ってください。
069969503/03/09 04:53ID:xiqLThI6
>>698
ありがとうございます。
perldoc も読み、更にその日本語訳もネットで読みましたが
まったくわかりませんでした。

そして usr+sys=0 のとき というのがどんな時なのかも
わかりません。よって直し方もわかりません。逝って来ます。
0700nobodyさん03/03/09 08:51ID:???
>>692
# shift-JIS 限定
$s = "こんにちは、世界!";

$s =~ s/([\x81-\x9f\xe0-\xfc])([\x40-\x7e\x80-\xfc])/$2$1/g;
$s = reverse($s);

print $s;
070170003/03/09 08:58ID:???
しまった、またしても…。
<br>は適当に処置をよろ。s/>rb</<br>/g;とか。
0702nobodyさん03/03/09 09:14ID:???
もしかしたらperl云々の問題かもしれませんが、
unlink ファイルを削除
rmdir ディレクトリを削除
のディレクトリってのは要するにフォルダのことでしょうか?
今まで同義のような曖昧な解釈でしたので一度ビシっと言ってやってください。
0703nobodyさん03/03/09 09:25ID:???
ディレクトリのことをウイソ厨はフォルダと呼ぶらしい
0704nobodyさん03/03/09 09:29ID:???
そのウイソ房に気が向いたら説教してくだせぇ
0705nobodyさん03/03/09 09:36ID:???
>>704
ERROR:長すぎる行があります!って怒られたから、URLをうまく貼れないかもしれん
URLを改行して途中で改行した

http://www.google.com/search?as_q=%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A8%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%AE%E9%81%95%E3%81%84
&num=10&hl=ja&ie=UTF-8&oe=UTF-8&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=&as_oq=&as_eq=&lr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=

070670403/03/09 09:37ID:???
URLは前半だけでもうまく貼れるんだなぁ ぉぃ
070770403/03/09 09:45ID:???
って擦れ違いじゃねーか!
こんな香具師にレスつけるなんて…
ダメボ…。
0708真性70403/03/09 09:48ID:???
>>706-707
暇だね・・

>>705
アリガトウございました。よくわかったようなわからないような。
これからチャント理解できるように詰めていきます。
0709nobodyさん03/03/09 10:45ID:???
use constantを使う場合と変数を使う場合では速度に差が出たりするのでしょうか。
また、ourなるものがありますが、皆さんどういう場面で使われるのですか?
0710名無し.net03/03/09 10:58ID:???
>> 705
※ディレクトリとフォルダの違い
ありません。ローカル側で「フォルダ」と言っているのをサーバ上で「ディレクトリ」と言っているだけです。それだけの違いです。
http://www.ayavv.net/d/beginner_hp/022.htm より
↑こんなこといっているサイトがありますけど(−−
0711nobodyさん 03/03/09 11:01ID:???
>>710
初心者にはそう説明したくなる気もわからんではないがな。
0712nobodyさん03/03/09 12:21ID:???
>>710
取りあえず掲示板に数人がかりで理路整然と論理を突きつけてみるのはどうか?
0713nobodyさん03/03/09 13:10ID:???
>>710
http://hp-design.net/beginning/lecture/html.08.html

こいつと同じこと言っているな(笑)
0714nobodyさん03/03/09 15:30ID:???
print "abc","def";

print "abc";
print "def";
と同義ですか?それとも
print <<EOM
abc
def
EOMと同義ですか?

鯖負荷を軽減させようとEOM使うのはやめたんですがカンマ区切りだと意味がないような気がしてきたので
書籍を見てもPerlだとメモリーの使い方は書いてなかったりする(欝
0715nobodyさん03/03/09 15:46ID:???
>>714
Perlがどうメモリ管理をしているのか知りたかったら、Perlのソースを読め。と言ってみる(藁
0716nobodyさん03/03/09 15:51ID:???
>>714
どちらかというと前者。
しかし、メモリの使用量云々を気にするなら、
print文の使い方より変数の使い方を気にすべき。
0717nobodyさん03/03/09 16:01ID:???
>>714
処理時間的には前者の方が早いね
0718nobodyさん03/03/09 16:13ID:???
>>716
いやむしろPerlを使うな(ry
0719nobodyさん03/03/09 16:24ID:???
>>718
そういうツッコミは無知を露呈するだけだと思うがどうか
perlスレだし
0720nobodyさん03/03/09 16:26ID:???
>>719
Perlで実行速度や消費メモリを気にしすぎる方がどうかしていると思うが。
0721nobodyさん03/03/09 16:30ID:???
どんな言語でもコーディングで効率化は図れると思うが。
インタプリタやスクリプトなら最適化が難しい分余計に。

他の言語を使えというのはひとつのソリューションだろうが、
このスレの趣旨ではなかろう。
0722nobodyさん03/03/09 16:49ID:???
だから(ryってしてるんだと思うよ。多分。
0723nobodyさん03/03/09 17:04ID:???
>>714
深読みしすぎかもしれんが、

<<EOM;
EOM

この記法は「EOM」じゃないからね。
ソース出さずに「EOM云々〜」って質問すると恥かくから気をつけよう。
0724nobodyさん03/03/09 17:05ID:???
>>723
End Of M?
0725nobodyさん03/03/09 17:17ID:???
>鯖負荷を軽減させようとEOM使うのはやめたんですが
これどういう意味なんだ?
0726nobodyさん03/03/09 17:24ID:???
>>724
End Of Message かなあ。
>>725
ヒアドキュメントのほうが負荷が大きいと判断したのかと。
0727nobodyさん03/03/09 17:40ID:???
>>726
思いこみというやつ?
0728nobodyさん03/03/09 17:54ID:???
どっち使ったところで殆ど変わらんのじゃ?
0729nobodyさん03/03/09 18:06ID:???
>>695 = >>714 じゃないかな。
ヒアドキュメントのほうがオーバーヘッドが大きいのは確かだが。。。

>>728 に一票。
0730nobodyさん03/03/09 18:06ID:2bzPHLiw
便乗質問なんですが、HTML出力をprint文で書く時
print <<"HTML";
<html>
ほげほげ
</html>
HTML
と書いているのですが、どこかで「HTML」と書くのは"格好悪い"
と書かれていた気がします。。
慣例的にはなんと書けば良いのでしょう?
EOFとかになるんでしょうか?
0731nobodyさん03/03/09 18:12ID:???
>>730
print <<"NULLPO";
<html>
ぬるぽ
</html>
NULLPO
0732nobodyさん03/03/09 18:18ID:???
  ∧_∧
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/     
 (_フ彡        / ←>>731
0733nobodyさん03/03/09 18:19ID:???
>>730
別にいいんでないの?
asm{}みたいなもんだし。
0734nobodyさん03/03/09 18:26ID:2bzPHLiw
asm{}???
「HTML」格好悪くないですか??
できれば慣例とか知りたいです。
そういう慣例ページみたいのあればうれしいんですが。。
0735nobodyさん03/03/09 18:31ID:???
>>734
それは公開されている数々のスクリプトを見ればいいと思うけど。
0736nobodyさん03/03/09 18:41ID:???
慣習というか、一般的には結局終わりを示すわけで
END_OF_???
EO?
こんなのが多いと思うけどさ。

ラベルと一緒でそれとわかれば何でもいいんじゃないの?
0737nobodyさん03/03/09 19:27ID:vWAYxQig
>>735
ごもっともです。けど見てみたら同じHTML出力でも
統一されてないようだったのでいったい何の略だ?
と思いまして。。
>>736
なるほど。勉強になりました。EO?をよく見ると思ったら
そういう理由だったのですか。こういうのはEOM、こういう場合は
EOFとか暗黙の常識?みたいのがあると思ってました。
(ある程度はそういうのがあるのでしょうけど)
ありがとうございました。
0738nobodyさん03/03/09 20:20ID:???
print <<"おわり";
日本人なら日本語で。
おわり

# ネタだからね、多分!
0739nobodyさん03/03/10 00:09ID:???
慣習的にEOFをずっと使ってた……。
このスレ読むまで意味を考えたこともないことに気付いた。

HTMLはダサくないと思う。
むしろ、そこはHTMLの出力部分であることを明示する意味で、
ソースの可読性に貢献してると思う。

俺も少し考えてみるか……
074071403/03/10 01:07ID:???
実行共用サーバーを使っているので消費メモリは気にしたいんです
実行速度は確認画面などで時間稼ぎをすればある程度はごまかせますが
機械は誤魔化せないのが辛いです

ちなみに漏れはEOM=End of Messageだと思ってます
EOFは本来ファイルの終わりをさす言葉なので途中で書くことはためわれます

ヒアドキュメントを使うというのは@array=<FH>同様に一気にメモリーを使って実行してしまう書法
対してprint "abc"; print "cde";はwhile()同様にメモリーの消費を抑えて実行する書法だと思っているのですが
だと思っていましたが間違いでしょうか?
074171403/03/10 01:11ID:???
あ、意味不明なたとえにしてました
@array=<FH>;
print @array;
がメモリーの無駄遣い
print <FH> while(<FH>);
ということで、考えてみてください

ついでに695ではありません
0742nobodyさん03/03/10 02:21ID:???
別になんだっていいんじゃないの、自分の好きなので。<HTMLでもEOMでも
そんな些細な事にいちいちカコイイ!!とかカコワルイ!!とか言ってる方が何か変よ。
0743nobodyさん03/03/10 02:59ID:???
>>740
メモリの消費と言うが、ヒアドキュメント程度でperlがシステムから確保する
メモリを使い切るようなコードを書いてるならそっちが問題だろう。
特にサイズを指定しない場合のメモリサイズ知ってるか?

そうそう、答え

>間違いでしょうか?
間違いです。メモリに格納はされません。

>>741
考えるまでもない例えだろ。
074471403/03/10 04:24ID:???
>>743
メモリを確保しないでどうやって書き込むんですか?
0745nobodyさん03/03/10 04:51ID:???
>>744
リダイレクト
0746nobodyさん03/03/10 08:12ID:???
まぁ、結局View記述言語はPHPとかJSPな感じの記述法が最適な訳だが。
0747nobodyさん03/03/10 09:44ID:???
>>746
IIS+ActivePerl で PerlScript 使えばよろし
0748nobodyさん03/03/10 13:37ID:???
こんばんは。
PerlにはPHPのstaticに相当する関数ってありますか?
それなりにPerlを扱ってきたにもかかわらず、今まで知り得なかったので
もしあったら便利だなーと。
0749 ◆hMJAPH9PWA 03/03/10 14:08ID:???
>>748
perlfaqにあるね。staticキーワードは無いが、実現は出来る。
perldoc -q static
...
BEGIN { # BEGINが不要なケースもある。が、あったほうが安全
my $counter = 42;
sub prev_counter { return --$counter }
sub next_counter { return $counter++ }
}
...
0750nobodyさん03/03/10 14:21ID:???
>>748
13:37にこんばんわって日本に住んでないのか?(w
0751名無し.net03/03/10 19:23ID:???
こんばんは。
Perlで半角カタカナを文字化けさせないように利用するにはどうすれば良いでしょうか?
jcode.plを使うと文字化けが発生するのですが・・・。
全角カタカナに直す以外の方法で教えてください
0752nobodyさん03/03/10 19:27ID:???
>>751
無い。
0753名無し.net03/03/10 19:58ID:???
>> 752
そんなぁ〜(><)
0754nobodyさん03/03/10 20:30ID:???
>>751
全部SHIFT-JISで処理を行う
0755名無し.net03/03/10 21:03ID:???
Shift-JISならjcode.pl使っても文字化けしない?
0756T女の竹田03/03/10 21:22ID:???
>>755
Shift-JISで通すならjcode.plはいらない。
もちろんEUCでデータを送られたら化ける。

ところで、ページをSJISで表示してるのに、フォームからEUCで送られてくるってこと
あるのかな?前から疑問なんだけど。
0757名無し.net03/03/10 21:32ID:???
>> 756さん
出力はJhift-JISにしてますけど、コードやDBはEUCを使ってます。
あと、メールを使うときはjisに変換したり・・・。
なのでjcode.plをどうしても使ってしまいます。
0758nobodyさん03/03/11 09:23ID:???
100行くらいのテキストファイルがあったとして、
そのファイルの50行目の値が欲しい時、直接50行目の値を取得することできるんでしょうか。
49回スルーさせるんじゃなくて。
0759名無しさん@Meadow03/03/11 09:24ID:i+lsKHdV
>>757
Jcode.pmにしれ。
0760nobodyさん03/03/11 09:33ID:???
当然シフトJISで通したら正規表現は転ける。encodeプラグマ使えば別なんだろが。
そもそもネットで半角(ry
>758
固定長ならseekで。可変長なら無理ぽ
0761Fox03/03/11 10:58ID:eJEHBp/l
たしか、、半角カナは日本特有のコードだから化けるんじゃなかったカナ〜
0762nobodyさん03/03/11 11:02ID:???
>>761
漢字だって日本特有のコードですが。
0763nobodyさん03/03/11 11:33ID:???
>>756
ブラウザの実装次第になってしまうのでありうる。

>>757
EUCで半角カナをどう扱うか考えてみましょう。
無理ぽ

>>758
head -50 text.txt | tail -1
0764nobodyさん03/03/11 11:43ID:???
前にもここにかいたのですが、
掲示板にはいる前のページとかに
最後に書いた人の名前と時間が表示されてるのがつくりたいです。
ちなみにiモードでやりたいです。
0765nobodyさん03/03/11 11:44ID:???
>>764
だからどうぞ作ってくださいな。と。
0766nobodyさん03/03/11 12:05ID:???
>>764
ひとつ質問していい?

何でこのスレで聞くの?
0767nobodyさん03/03/11 13:09ID:???
>>757
なんで出力をEUC-JPにしないの?Shift JISにしないとなにか問題あるの?
0768nobodyさん03/03/11 13:47ID:???
>>765
>>766
すいません。間違えました。
076903/03/11 13:56ID:2/UrfMw3
>>760
インデックス持ってれば、可変長でも seek で可能だな。
0770nobodyさん03/03/11 14:06ID:???
ファイルポインタを末尾から数えて3行目に移動なんてできますか?
0771nobodyさん03/03/11 14:29ID:???
>>770
できません
0772nobodyさん03/03/11 15:32ID:???
>>770
seekでファイルサイズ-3すれば?
0773nobodyさん03/03/11 15:37ID:???
>>772
わけわからん。
0774nobodyさん03/03/11 15:45ID:???
>>773
わかるよ。3行目と3文字目を間違えてるんだろ、要するに。
0775nobodyさん03/03/11 15:46ID:???
>>774
>3文字目

間違ってるぞ。
0776nobodyさん03/03/11 15:47ID:???

exitってさ、ライブラリから使ってもOKだよね?
完全にプロセス死んでくれるよね?
まさかライブラリのみ終了してますた。なんてオチはないよね?

内部処理とかはどーなってるのか全然知らないんで…。
m(__)m
0777nobodyさん03/03/11 15:51ID:???
>>776
もちろん大丈夫
077877603/03/11 15:56ID:???
どーもありがとうでした。
0779nobodyさん03/03/11 15:59ID:???
>>770
ファイル内部に行なんていう概念はない。
\n毎に行と考えたいのだろうが、ファイルにとってはただの1文字。

どうしてもやるなら読み込んでから改行の数と位置を調べて
計算して3行目に相当する位置へseek。
0780nobodyさん03/03/11 16:48ID:4+uSO65s
ルーチンaaaで使う変数は全てレキシカル変数(my)とする。
って言う便利な記述はないですか?

ないですよね?
078177003/03/11 16:56ID:???
上手い方法はないのですね。ありがとうございました。
0782nobodyさん03/03/11 17:47ID:???
>>780
ダサい構造化言語だな。
0783nobodyさん03/03/11 18:05ID:???
>>780
php使え
0784nobodyさん03/03/11 19:16ID:8fW/w1hx
ウェブメールのパスワード(半角数字4文字)が分からなくなってしまい、
数字を1万通り入れればいいんですけど、さすがに時間の都合で難しい
登録した時のアドレスが違うのかパスワード再発行が処理されない。

以上の状態

他の板で
テキストエリアに入力するよりPerlでも使ってガーっとpostし
たほうが簡単。

といわれましたが、perlは使った事がないんで何とも。
その板の住人に聞くのも板違いかと思って、こちらに移りました。

自分で検索した所、イメージ的に

1,自分のPCをperlが使えるようにする。(できた)
2,perlにてパスワードのエリアにpostするためのファイルを作成
3,自分のPCから実行し、パスワードテキストエリアに挿入

という事で、だいたい合ってますか?
0785nobodyさん03/03/11 19:18ID:???
>>784
犯罪に結びつく可能性があるので教えない。

同情誘っても無駄。お帰り下さい。
0786nobodyさん03/03/11 19:21ID:???
>>785
一応、同情を誘うつもりはありません。
質問スレなので、詳しく書こうかと思って。

その辺伏せれば、まともな答えが返ってこないですよね?
0787nobodyさん03/03/11 19:26ID:???
>>786
書いたところで帰ってこないと思うよ。総当たりのパスワードクラッキングの方法なんて。
0788nobodyさん03/03/11 19:29ID:???
>>787
お説教でしょうか?

まあ、だいたい合っているというのであれば、それはそれで
いいです。

後は自己責任でやります。
どうもありがとうございました。
0789nobodyさん03/03/11 19:30ID:???
>>788
>まあ、だいたい合っているというのであれば

すまん、上2行くらいしか読んでない。
0790nobodyさん03/03/11 19:30ID:???
Brute Force Attackというやつだね。
0791nobodyさん03/03/11 19:35ID:???
>>789
どうせわかんないんですよね。
0792nobodyさん03/03/11 19:40ID:???
>>791
既にフローチャートじみた物は頭にあるがその使い古された挑発には乗る気にならない。
0793nobodyさん03/03/11 19:41ID:???
パスワードが通ったか通らなかったかの判断分岐が
ちょっと面倒そうだなあと言ってみるテスト。
0794nobodyさん03/03/11 19:42ID:???
>>793
ダメだったときの結果はわかるのだからそのelseで良いんではないかと考えた。

と、誘導尋問ならおもしろいなと思ったテスト。
0795nobodyさん03/03/11 19:44ID:???
>>792
質問に関しては解決したと見ていいです。
挑発してません。
0796nobodyさん03/03/11 19:46ID:???
>>795
冷静かつ必死ですね。
0797nobodyさん03/03/11 19:47ID:???
スクリプト荒らしですか?
0798nobodyさん03/03/11 19:50ID:???
>>796
必至でした
が正解です。
0799nobodyさん03/03/11 19:50ID:???
>>784
perlでpostが1〜3にないんだが、
フォームには手でコピペするのかなあ?
0800nobodyさん03/03/11 19:52ID:???
>>799
やめとけ。
0801nobodyさん03/03/11 20:12ID:???
(σ´∀`)σゲッツ!?
0802nobodyさん03/03/11 20:26ID:???
最近放置できない熱いハートの持ち主が多いなぁ・・・
0803nobodyさん03/03/11 21:12ID:???
逆に自作自演かも。(笑

その前に釣られたあなたもはーとびーと
0804nobodyさん03/03/11 22:51ID:???
私はまるでCGIのことがわからんのですが、
多人数同時参加型のネットゲームが作りたいです。
 どうすればよかとですか?
0805nobodyさん03/03/11 22:54ID:???
>>804
取りあえず基礎を勉強してくれ。

レーサー志望にアクセルの踏み方から教えていたら日が暮れる。
0806nobodyさん03/03/12 13:12ID:???
変な質問なんですが・・・
perl本体とlib(*.pm)のそれぞれをBuildするコンパイラが違ったりすると
マズい事になりますか?

具体的にはSolaris。perlがSUNのccでBuildされ、lib類(CPAN等)はgcc
でBuildされた場合・・・って感じです。
Shared library 周りで不整合が起きる様な気もするんですが、手元にSUNの
ccが無いので試す事が出来ません。
0807nobodyさん03/03/12 13:15ID:???
>>806
どっちもありえる
0808nobodyさん03/03/12 13:55ID:???
ActivePerl-5.8.0.805-MSWin32-x86.msi をインストールし、さらにImage::Magickを
インストールしようと思ったのですが、ppm で検索をかけても見付かりません。

http://ppm.activestate.com/PPMPackages/zips/
で 8xxを見たら確かに無いので 6xxにある Image::Magick.zip を使って
ppm install Image-Magick.ppd
したのですが以下のようなエラーが出てきてしまいます。
Error: no suitable installation target found for package Image-Magick.

これはどのように対処したらいいのでしょうか。
0809nobodyさん03/03/12 14:13ID:???
>>808
ActivePerl-5.6.1.635 を使って下さい
0810nobodyさん03/03/12 15:54ID:eDO5fFOY
$n の値が $i の倍数だったら真。
という正規表現を書こうとしたんですが
どうも書き方が解らず for 文になってしまいます。

どなたかお手本を見せてもらえないでしょうか。
お願いします。
0811nobodyさん03/03/12 15:57ID:NGPUyx9R
>>810
数値だよね?
($n % $i == 0)
081281003/03/12 16:16ID:???
>>811
数値です。
なるほど、割り切れるかどうかを見ればよかったんですか。
有難う御座いました。

頭悪くてスミマセンです。
0813nobodyさん03/03/12 17:56ID:bplOKqH9
ぐちゃぐちゃと書き込んだコメントをすべて取ってしまおうと
思い立ち、エイヤっと全部まるまる取ってしまったら、なんか
すごくスクリプトがスッキリ見えて、前よりも理解しやすくなっ
た。。。。という経験ないすか?
0814nobodyさん03/03/12 18:05ID:???
>>813
俺のプログラムのコメントを書く人は寡黙な方なので数日後に開いてパニックになったりします。
0815nobodyさん03/03/12 21:54ID:???
現在自動メール返信のルーチンを考えています。
スクリプト内で取得したメールアドレスを$mailという変数に
格納し、メールのテンプレートを外部ファイルから読み込んで
送信したいのですが、ヘッダ部分にTo: "$mail"と記述していても
変数展開が行われません。
外部ファイル内にある変数は展開できないのでしょうか?
0816nobodyさん03/03/12 22:03ID:???
>>815
evalれ。
0817nobodyさん03/03/12 22:11ID:???
>>815
$mailがどんな形で宣言されているのか不明なんで、わかりません。
081881503/03/12 22:32ID:???
>>817
メインルーチンの中で、$mail="mailaddr@example.com";
となっています。で、外部ファイルでは
To: $mail
From: hoge@hoge.net
Subject: hoge
<以下メール本文>

という構造です。このテンプレートファイル名が$fileに格納されているとき、
open (BODY,"$file");
@mail_body=<BODY>;
close (BODY);
としています。
0819nobodyさん03/03/12 22:44ID:???
>>818
@mail_body =~ s/\$mail/$mail/gs;
0820nobodyさん03/03/12 23:09ID:???
@mail_body = map{ s/\$mail/$mail/g; $_; } <BODY>;
s///はスカラのみが対象になるかと。

スマートにやるなら、HTML::Templateをお勧め。
0821815=81803/03/12 23:27ID:???
>>819-820
返答ありがとうございます。
最初、s///で自力でやってみたのですが、$をエスケープするのを
忘れていたり、818さんのように配列ごとs///を作用させてしまい
エラーが出っ放しだとか、いろいろありましたが、現在は以下のように
しました。
$body="@mail_body";
$body=~ s/\$mail/$mail/gs;
スマートな方法ではないですが、一応動きました。
Perlは自由度が高くてうれしいのですが、反面そのおかげで、
結構悩んでしまいますね。。。
0822nobodyさん03/03/13 00:54ID:???
>>821
もうちょっと基礎(コンテキスト、リテラル)から勉強せい
$body="@mail_body";とかかなりむちゃくちゃ(わかってあえてやってるならいいけど)
0823nobodyさん03/03/13 12:33ID:Am3iEG5g
>>815

open FI, 外部ファイル;
foreach(<FI>) {
s/%_(\w+)_%/${$1}/eg;
$mail_txt .= $_;
}
close FI;

で、どだろう。
0824nobodyさん03/03/13 15:56ID:???
KENTのsunbbsを改造しているんですが
タイトル($sub)をhtmlに書き出す時だけ
**文字以上だったら2バイト切って、"…"を付ける
ってことをやりたいんですが
どこにどう付け加えればいいでしょうか?
ご教授お願いします。
0825nobodyさん03/03/13 16:23ID:???
>>824
if ( length ( $sub ) >= ** ) {
 $sub = substr ( $sub, 0, length ( $sub ) - 2 ) . '…';
}

** は文字数ではなくバイトで指定
0826nobodyさん03/03/13 16:33ID:???
>>825
2バイト文字が化けないことを祈る。
0827nobodyさん03/03/13 16:34ID:???
2「バイト」切るって言ってるんだからいいでしょ
0828nobodyさん03/03/13 16:37ID:???
>>827
あほか?

の後ろ2byteを切ってみて下さい。
0829山崎渉03/03/13 16:55ID:???
(^^)
083082403/03/13 17:07ID:???
>>826
タイトルは半角で書く予定なので文字化けは大丈夫です。

>>825
どこに記述すればいいんでしょうか?
投稿処理の時点で$subではなくsubに置き換えて…無理ですね。
0831nobodyさん03/03/13 17:27ID:???
>>830
HTMLを吐き出す前あたりでいいんじゃない?
0832nobodyさん03/03/13 21:45ID:PyTQVFy/
$aaa = $FORM{'mode'};
$bbb = '123';
$ccc = '456';
   ・
   ・
   ・
$datafile = "ddd.txt";
open (dataf,">>$datafile");
flock(dataf,2);
   ・
   ・
   ・
print dataf "〜$aaa,$bbb,$ccc〜\n";
   ・
   ・
   ・
close (dataf);

というスクリプトを作りました。(abc.cgiとします)
このスクリプトを実行させる際に、modeにabcdeを与え、
テキストファイルに「abcde,123,456」と書かせたいのですが、
http://www.hogehoge.com/abc.cgi?mode=abcde
という呼び出し方じゃダメなのでしょうか?
どうしても「,123,456」と書かれてしまうんです。
どこがいけないのでしょう?
0833nobodyさん03/03/13 21:54ID:???
>>832
フォームのデータをエンコして%FORMに入れる処理(またはそれに相当する
サブルーチン等の呼び出し)はもちろんやってるよね?
083483303/03/13 21:55ID:???
エンコじゃなかった、デコードだ。
逝け>俺
0835nobodyさん03/03/13 21:56ID:???
>>832
$FORM{'mode'}の中身を調べる。
# ちゃんとどっかで$form{'mode'}に代入してる?
0836nobodyさん03/03/13 22:05ID:???
HTML::TemplateってHTMLっぽい文法でなんかどんくさい感じがするんだけど、
みんなはこれで満足してますか?

特に、何かの要素の値(?) <a href="(ここ)"></a>に何かを入れるとき、テンプレート
が、ちゃんとしたHTMLじゃなくなるのが痛い。

で、CGI::FastTemplateっていうかっこいいやつを発見したんだけど、使ってる人はいますか?
0837nobodyさん03/03/13 22:48ID:???
>>832
もう少し解りやすく説明できる?
083883203/03/13 22:57ID:???
すみません。解決しました。
デコードもやってないし、$FORM{'mode'}にも値を代入してないという、
初歩的な問題でした。
お騒がせしました。
0839nobodyさん03/03/13 23:48ID:???
>>818
亀ですが漏れはこうやってます
最後の出力のときに使って
open TMPL, "<$file";
while(<TMPL>){
  s/\$([_\w]+)/${$1}/eg;
  (HTMLエンコード処理)
  print;
}
close TMPL;
0840nobodyさん03/03/14 01:12ID:???
>>836
使ってみたけど、ちょっと扱いづらいね。
単機能化されているみたいだから、
HTML::Templateより速くなるみたいだけど。
0841nobodyさん03/03/14 02:29ID:???
見た通りのサブルーチンなのですが、ローカルで使用しても
かなりの時間がかかってしまいます。
通常、実装するとしたらこれで大丈夫なのでしょうか?

my @port = ( 80, 8000, 8080, 8888 );

my $remote = $ENV{"REMOTE_ADDR"};
my $iaddr = inet_aton($remote)or die "Unknown host : $remote";
my $proto = getprotobyname('tcp');

socket (SOCK, AF_INET, SOCK_STREAM, $proto) or return 0;

foreach my $port ( @port )
{
my $paddr = sockaddr_in($port, $iaddr) or return 0;

if (connect(SOCK, $paddr))
{
return 1;
}
}

return 0;
0842nobodyさん03/03/14 04:09ID:???
>>841
これ動かないだろ
0843nobodyさん03/03/14 12:10ID:???
コマンド(引数は外部からの値)の実行結果を@_に格納したいのですが、

バッククウォートで
`コマンド $xxx`
↑このようにやると危険なので

system "コマンド","引数"
↑こんな感じでやりたいのですが
systemを使ってリスト@_に格納する事はできないんでしょうか。
できないのであればどういう方法が一番bestでしょう?

汚染チェックはやりますが、少しでも危険な要素を取り除きたいので・・。
0844nobodyさん03/03/14 12:27ID:???
>>843
system関数だけでは無理だと思う。

俺ならシェルスクリプトを作るかな。
で、必要な引数のほかにファイル名を引数にとって
そのファイルに全てを出力させる。
perl側からは、systemで呼んだ後にそのファイルを
読みに行けばいい。

windows環境ならバッチファイルでもいいかと。
0845nobodyさん03/03/14 15:26ID:???
>>843
汚染チェックをしっかりやっていれば
open FOO, join(' ', $cmd, @arg, '|') or error;
@_ = <FOO>;
でいい気がする。
0846nobodyさん03/03/14 15:48ID:???
それならバッククォートでも変わらないような
0847nobodyさん03/03/14 17:19ID:???
すみません。
厨房質問なのですが、

main.cgiがあり、使用するライブラリが複数ある。
とうぜん「require」を書いてあるのはmain.cgi。

この時、ライブラリAから直接ライブラリBに含まれるサブルーチンに飛ばしてなんら問題ないんでしょうか?
なんか作ってて微妙に怖くなってきました。

とある解説サイトでライブラリとはCGIにサブルーチンが埋め込まれたのと全く同じ動きをするって書いてあったけど本当でしょうか?
メインファイルを直接経由しないライブラリ間でのやり取りって支障ないですよね?

084884303/03/14 20:31ID:???
>>844>>845
ありがとうございます。
ファイルに吐くのも考えましたがいちいちやっていたら大変なので・・。
汚染チェックだけに頼るのが一般的なんですかね?
perl始めて数週間なのでいまいち常識がわからなくて・・
0849nobodyさん03/03/14 20:57ID:???
>>843
open(FOO, "-|") or exec 'command', $param;
print <FOO>; # 何か処理
close(FOO);

perldoc perlsec参照。
Perlクックブックレシピ19.6に詳しい方法が載ってます。
0850nobodyさん03/03/14 21:00ID:???
>>848
これが常識

$pid = open(PIPE, '-|');
die unless(defined($pid));
if ($pid) {
local $/ = '';
@_=<PIPE>;
} elsif ($pid) {
exec 'command', 'arg';
}
0851nobodyさん03/03/14 21:14ID:???
>>847
requireは実行時に評価される点に注意して、
(requireを書く場所を間違えなければ)
可能です。
085285003/03/14 21:47ID:???
切り貼り失敗

>>848
これが常識

$pid = open(PIPE, '-|');
die unless(defined($pid));
if ($pid) {
local $/ = '';
@_=<PIPE>;
} else {
exec 'command', 'arg';
}
0853nobodyさん03/03/14 22:21ID:???
[cXYZ]
# X,Y,Zは数字。Xには0〜3、Yには0〜4、Zには0〜3が入ります。
という文字列を
S● B●●●● O●●
# ●の数はそれぞれX,Y,Zの数値。0の場合は●はなし。
に変換したいのですが

$test = "[c222]";
if ( $test =~ m/\[c([0-3])([0-4])([0-3])\]/i ){
$count ="S"."●" x $1." B"."●" x $2." O"."●" x $3;
$test =~ s/\[c([0-3])([0-4])([0-3])\]/$count/i;
}

ない知恵絞って上記のようなものを書いて見ました。
もっとよい方法がありましたら教えてください。

あと $test に [cXYZ] が複数あった場合、すべて変換にするには
if の代わりに while を使う方法になりますか?
0854nobodyさん03/03/14 22:34ID:???
$test =~ s/\[c([0-3])([0-4])([0-3])\]/'S' . '●' x $1 . ' B' . '●' x $2 . ' O' . '●' x $3/ge;
085585303/03/14 22:46ID:???
( ゚д゚)ポカーン
漏れは何をまわりくどいことをやってたんだ。

s/\[c([0-3])([0-4])([0-3])\]/S●x$1 B●x$2 O●x$3/
最初こんな感じでやってみて無理だったので、上のになりました(^^;
勉強になりました。ありがとうございます。
085684103/03/15 00:24ID:???
>>841のサブルーチンは動かないでしょうか?
こちらのスクリプトを改造したのですが、一応
オープンとクローズは遅いながらも判別できました。

#!/usr/local/bin/perl -w

use strict;
use sigtrap;
use Socket;

my ($remote, $port, $iaddr, $paddr, $proto);
$remote = $ARGV[0] || "127.0.0.1";
$port = $ARGV[1] || 0;
print "REMOTE : $remote\n";
print "PORT : $port\n";
$iaddr = inet_aton($remote)or die "Unknown host : $remote";
$proto = getprotobyname('tcp');
socket (SOCK, AF_INET, SOCK_STREAM, $proto) or die "socket : $!";
while ($port < 65536) {
$paddr = sockaddr_in($port, $iaddr) or die "$!";
if (connect(SOCK, $paddr)) {
print "PORT : $port OPEN\n";
socket (SOCK, AF_INET, SOCK_STREAM, $proto)or die "socket: $!";
}
else {
print "PORT : $port CLOSE\n";
}
$port++;
}
0857nobodyさん03/03/15 00:57ID:???
>>841

>my $remote = $ENV{"REMOTE_ADDR"};
>my $iaddr = inet_aton($remote)or die "Unknown host : $remote";

inet_atonはホスト名をIPアドレスに変換でしょ。
無意味な正引きするより$ENV{"REMOTE_ADDR"}をpackしたほうが
早いんじゃないの?
0858nobodyさん03/03/15 01:04ID:???
教えようと思ったけど、ポートスキャナじゃん。。
しかも65536って、あーた。
0859nobodyさん03/03/15 01:34ID:???
iswebのモバイル用フォルダにお絵描き掲示板を設置したところ
pooアプレットの方は問題なく動いたのですが、しぃアプレットの方は
画像が2重に投稿され投稿失敗のメッセージが表示されてしまいました。

それまで普通のcgi-binフォルダではどちらも正常に動作していたので
多分ページに挿入される広告が悪さをしてるんじゃないかとは思うんですが
どう直せばいいのか私にはサッパリわかりません。
どなたかわかる人がいたら教えてください。お願いします。

ちなみに今まではこのスクリプトを使わせてもらってました。
ttp://mrdc.hp.infoseek.co.jp/compati.zip
086085903/03/15 01:40ID:3fqyLgHG
一応、BBSNoteではしぃアプレットも正常に動作したのですが
今ダウンロードできるバージョンはもうpooをサポートしてないので、、
0861841,85603/03/15 01:41ID:???
>>857
確かにその通りでした。削っているうちにちんぷんかんぷんになっていたようです。
有難うございました。

>>858
アホな目的に使うつもりはないので65536はさすがにやっていません(^^;
0862nobodyさん03/03/15 02:22ID:???
このような感じでやってみました。突っ込み所がありましたらよろしくお願いします。
依然として非常に遅いのですが、2chなどのプロキシ弾きはCでこのようにやっているものなのでしょうか?

my @port = ( 8000, 8080, 8888 );

$ENV{"REMOTE_ADDR"} =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
my $iaddr = pack("C4", $1, $2, $3, $4);
my $proto = getprotobyname('tcp');

socket(SOCK, AF_INET, SOCK_STREAM, $proto) or return 0;

foreach my $port ( @port )
{
my $paddr = sockaddr_in($port, $iaddr) or return 0;
return 1 if(connect(SOCK, $paddr));
}

return 0;
0863nobodyさん03/03/15 02:28ID:???
my $iaddr = pack('C*', split(/\./, $ip));
0864nobodyさん03/03/15 02:29ID:???
$iaddr = pack('C*', split(/\./, $ENV{"REMOTE_ADDR"}));
0865Name_Not_Found03/03/15 04:55ID:???
KENTさんの掲示板
http://www.kent-web.com/bbs/fantasy.html?
に、”タイトル”を入力する項目を追加したいのですが
いざやってみたら、上手くいきませんでした。
この場合、どこをどういじればいいのでしょうか?
0866nobodyさん03/03/15 06:05ID:???
>>865
スレ違い。
0867nobodyさん03/03/15 09:19ID:Uli+0qKe
/cgi-binでしかperlを実行できず、
/cgi-binではhtml、jpgを閲覧できません。

現在のフォルダ
/www/
  html/
  cgi-bin/

これを/www/html/ 配下すべてでperlもhtmlも動作できるようにしたいのですが、
どうすればいいんでしょうか?
0868nobodyさん03/03/15 10:23ID:???
>>867
apacheの設定を弄るか.htaccessで設定を変更する必要があるのだが権限あるの?
キーワードはScriptAlias,ExecCGI。
スレ違いになるので後は自分で調べてください
0869nobodyさん03/03/15 10:27ID:???
>>862
close(SOCK);
0870nobodyさん03/03/15 10:27ID:Uli+0qKe
>>868
スレ違いですか。
http://x68000.startshop.co.jp/~68user/webcgi/server-config.html
の通り、
httpd.confを弄ってみたんですが、うまくいかなかったんで。

当然root権限はあります

0871nobodyさん03/03/15 10:36ID:???
# AddHandler cgi-script .cgi
のコメントは外した?
ドキュメントルートを移動させてれば、そっちもOptionsの設定がいるよ。
つか、サーバルートの設定を変えるってのはヤバイ。
これ以上はすれ(略。
087286703/03/15 10:55ID:???
ごめんサパーリ。
もっと勉強が必要か。

CGI設置フォルダの下にhtmlを置くやつが使いたかったから・・・。
0873nobodyさん03/03/15 12:12ID:???
>870
>当然root権限はあります

こんなやつがroot権限を持つなんて・・・、しかも当然だって・・・(w
087486703/03/15 12:35ID:???
>>873
となりのPC(ry

root権限なかったら、こういう質問しませんよ。
共用なら、たいていどこの階層でもperl使えるし、
cgi-bin限定でもhtmlや画像、映像も置ける。
ISPのサーバーなら、できないならできないと初めから書いてるしね。

ま、踏み台にされないように頑張りますw
087586703/03/15 12:37ID:???
というか、板違いですかねぇ。
0876nobodyさん03/03/15 12:40ID:???
この程度のことを質問しているようじゃ、踏み台にされないように頑張ります
っていっても期待はできないな。気持ちで防げるものではないから。あはは・・
087786703/03/15 13:55ID:???
出来た・・・。
そんなに難しいことじゃなかったらしい。
876にバカにされるのもいさ仕方ないのかも。
サーバーの電源落として寝ますわ。
0878nobodyさん03/03/15 14:07ID:???
二度と電源を入れないのを切に願う
0879nobodyさん03/03/15 17:45ID:5hlN9xGB
$tmp = `/usr/bin/whois -h $server $name.$domain |grep -i '$msg'`;
このような処理で万が一タイムアウトになった場合、次の処理に移り
たいのですが、実行しっぱなしになってしまいます。
通常どういった処理を行うのが良いのでしょうか。
0880nobodyさん03/03/15 17:51ID:???
>>849>>850
ありがとうございました。
ただ私の環境はActivePerl-5.6.1.635なので
どうもできないようです。(forkできないから?)

execも引数を2個使うとなぜか機能しません。
○exec "コマンド 引数"
×exec "コマンド","引数"
もうさっぱりわかりません。

open FOO,"コマンド 引数|"
これだとFOOに結果が格納されたんですが
引数が外部の場合危ないですよね。
0881nobodyさん03/03/15 18:45ID:???
恥ずかしい話だが。。。
漏れって「引数」をずっと「いんすう」って読んでたよ。
088284503/03/15 19:28ID:???
>>879
alarmでどうよ。

>>880
> 引数が外部の場合危ないですよね。

だから「チェックをしっかり」と書いてるんだけど…。
"$cmd $arg"と書かずに$cmd,@argと書いた意図を汲んでほしいな。
そもそも使いたいコマンドは何?引数はそんなに複雑なの?

引数が2つ以上のexecは引数が1つの時と挙動が変わるし、
第一システムコール使う関数は9x系とNT系で実装具合が違う。
駱駝本なりperldoc -f execなり読んでね。
0883nobodyさん03/03/15 20:20ID:???
>881
私も昔そう呼んでたよ。気にするな。
0884nobodyさん03/03/15 20:52ID:???
>>881
98SEが出るあたりまでずっとそう呼んでたよ。
0885nobodyさん03/03/15 21:18ID:???
>>880
汚染チェックだけしっかりやっとけ
>>882
$cmd,@argでも' 'でjoinしている時点で
意図を汲みようがないと思われ
0886nobodyさん03/03/15 21:42ID:???
>>879
$SIG{'ALRM'} = sub{ die 'timeout' };

eval{
alarm($timeout); # $timeout秒
$tmp = `/usr/bin/whois -h $server $name.$domain |grep -i '$msg'`;
alarm(0);
};
if ($@){
alarm(0);
($@ =~ /timeout/) or die;
# timeout!
}
# windowsではalarmが使えません。

>>880
windowsでは "-|"が使えません。
0887nobodyさん03/03/15 22:26ID:5hlN9xGB
>>882,886

どうもありがとうございます。
うまくいきました!
0888nobodyさん03/03/16 04:48ID:???
cgiからcgiを呼び出すとき、GETなら$ENV{'QUERY_STRING'}に
文字列いれてやればいいんだけどPOSTはどうやればいいですか?
途中まで書いて調べてみたんだけど。


$ENV{'SCRIPT_NAME'}="/cgi-bin/test.cgi";
$ENV{'REQUEST_METHOD'}="POST";
$ENV{'CONTENT_LENGTH'}="24";
open FH,"-l", or exec "perl","test2.cgi";
0889Name_Not_Found03/03/16 05:06ID:???
>>888
LWP(libwww)使うと幸せになれるかと。
0890nobodyさん03/03/16 08:50ID:???
>>889
thx
調べてないけどモジュールですね?
やてみます
089189003/03/16 11:19ID:???
>>889
できました。ありがとうございます。
一応こんな風になりました。ってコピペですが。

use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my $req = POST 'http://www.xxx/yyy.cgi',
[ namae => "bbb",
name2 => "aaaa" ];
@aaa= split ( /<BR>/,$ua->request($req)->as_string);
0892nobodyさん03/03/16 13:18ID:???
標準入力で渡せばいい。つまり、、FHに書き込む。
0893nobodyさん03/03/16 20:10ID:HMSF0mo0
#トリップ使用/非使用(0=非使用 1=使用)
$trip = 1;

#トリップ変換文字列
$tripsalt = XX;

#---------------------#
# トリップ #
#---------------------#
sub tripping {

if ($trip == 0) {
}

if ($trip == 1) {
# トリップ機能有効なら◆は◇に置き換える
$name =~ s/◆/◇/;

if ($name =~ /(#|#)(.*)$/) {
$string = crypt("$2", $tripsalt);
$tripstr = substr($string,2,8);
$name =~ s/(#|#)(.*)$/◆$tripstr/;
}

}


掲示板にトリップ機能を付けようと思っています。
上の設定でon/offを切り替えれるように設定しようと思っているのですが、
これでいいのでしょうか?
0894nobodyさん03/03/16 20:13ID:???
>>893
実験の結果はどうでした?
089589303/03/16 20:15ID:HMSF0mo0
これを掲示板CGIの書き込み処理の前にサブルーチンで呼び出しても、
動いてくれませんでした。
有効にしたはずだけど無効でした。
0896nobodyさん03/03/16 20:15ID:MtdvS7v9
Perlでフォームの内容を判断させるにはどういう命令を使ったらいいんでしょうか。
「あほ」 が含まれてるだとか、判断したいんです。
0897nobodyさん03/03/16 20:18ID:???
>>893
どう動かなかったのか?



$tripsalt = XX;

一応クオートで囲って下さいな。

if ($trip == 0) {
}

いらないです。

後、スコープという物をもうちょっと意識した方が良いかと思います。
089889303/03/16 20:28ID:HMSF0mo0
>>897
レスありがとうございます。
動かなかったというのは無効設定というか、
加える前と何も変わりませんでした。

on off機能を無くしてスクリプトに直接埋め込んだ(こういう表現で良いのでしょうか?)
場合、有効になりました。

>>$tripsalt = XX;
>>一応クオートで囲って下さいな。
これですが直接埋め込んだときは囲わなくて動いたので大丈夫だったのですが、
やはり囲った方がいいのでしょうか?

直接埋め込んだときは書き込み処理の前に
$name =~ s/◆/◇/;
if ($name =~ /(#|#)(.*)$/) {
$string = crypt("$2", $tripsalt);
$tripstr = substr($string,2,8);
$name =~ s/(#|#)(.*)$/◆$tripstr/;
}
を埋め込みました。

まだクッキー部分の始末もしないといけないし、まだまだ時間がかかりそうです。
0899nobodyさん03/03/16 21:48ID:???
>>898
HTMLじゃないんだから、文字列のクオートは省略しちゃいかんよ。
「文字列ではない何か」とみなされることがある。

プログラムの別の場所で$tripという変数を使ってたりしない?
>>897の言う「スコープ」を意識しないと、こういう単純ミスをしがちなので。
0900nobodyさん03/03/16 21:52ID:???
>>901
正規表現を勉強して、パターンマッチで対応する。
090189303/03/16 22:10ID:HMSF0mo0
>>899
レスありがとうございます。
試行錯誤でなんとか出来ました。
あとはクッキーにトリップ変換後の物が記録されるのを修正です。

Perlは最近自分で勉強しだしたので、スコープが何か全く分かりません。
勉強してきます。

レス付けてくださった方ありがとうございました。
0902nobodyさん03/03/16 22:18ID:???
?
0903nobodyさん03/03/16 22:24ID:04Nbdlpl
1 名前:未来人 投稿日:03/03/16 22:05 ID:6xjzUOeH
今、試験的に2008年、2ちゃんねるUNIX板で開発された『タイムアクセス』を使って
2003年3月16日の「2ちゃんねる」に書き込んでいます。


2008年から(´∀` )オマエモナー
http://comic2.2ch.net/test/read.cgi/ymag/1047479574/
0904nobodyさん03/03/16 22:40ID:WBb98oow
★男はココを見るべし★女と金と???★
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
0905nobodyさん03/03/16 22:57ID:???
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/shinagawa/
0906nobodyさん03/03/17 06:24ID:???
おはようございます。
while (<FH>) {
だと 内容が $_ に格納されますが
}
foreach my $x (@x) {
のように、初期で変数に格納する方法はないでしょうか?
}
説明がへたくそですみません・・。
while (<FH>) {
$x=$_;
とするしかないのでしょうか・・
}
0907nobodyさん03/03/17 07:04ID:???
>>906
while (my $x = <FH>) {
  ...
}
0908nobodyさん03/03/17 07:35ID:???
>907
有難うございますー
一度、($x = <FH>) でやったところエラーが出たので
出来ないのかと思い込んでいたら、 myが抜けていたのですね・・。Strictで書いていたもので;
これで次に進めそうです(^^
090989603/03/17 08:08ID:???
なんでおれの質問だけスルーしてるの?
わかる人おしえてください

Perlでフォームの内容を判断させるにはどういう命令を使ったらいいんでしょうか。
「あほ」 が含まれてるだとか、判断したいんです。
0910nobodyさん03/03/17 08:26ID:???
>>909
$hoge =~ /あほ/;
0911nobodyさん03/03/17 09:49ID:???
910を優しく書くと
if ($hoge =~ /あほ/) {print "含まれている";}
0912nobodyさん03/03/17 10:10ID:???
>>909
マルチだから
0913nobodyさん03/03/17 12:18ID:???
$hs=gethostbyaddr(pack('C4',split(/\./,$addr)),2)||$addr if!($hs=$ENV{'REMOTE_HOST'})||$hs eq$addr;
↑訳して下さい。

というか自分で書いといて
どういう順番で読むか忘れた…(久々ゆえ
0914真の89603/03/17 16:35ID:3tcTX76s
909は俺じゃない訳ですが。。。まぁ、ありがとう。
>>911
ご教授ありがとうございました。

>>912
質問したらココに誘導されたので、もう一度書きました。
0915nobodyさん03/03/17 16:43ID:???
>>913
逆引きしたいのなら
$addr = $ENV{'REMOTE_ADDR'};
$host = gethostbyaddr(pack('c4',split(/\./, $addr)), 2) || $addr;
これでいいんじゃないの?
逆引きできたら$hostにはその結果||出来なかったら$addrを挿入;
0916nobodyさん03/03/17 19:26ID:???
>>914
誘導されたのなら、その旨をちゃんと書くこと。
でないとマルチ扱いされても仕方がない。
0917nobodyさん03/03/17 20:00ID:???
>>913
$hs = gethostbyaddr(pack('C4',split(/\./,$addr)),2);
$hs ||= $addr if (!($hs=$ENV{'REMOTE_HOST'}) || ($hs eq $addr));

$hs = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $ENV{'REMOTE_HOST'} || $addr;
と等価…のはず。
091891303/03/17 20:27ID:???
>>915,917
レスthx。
gethostbyaddrは負荷になるとか聞いた覚えがあったんで、
$ENV{'REMOTE_HOST'}が空だった時のみにgethostbyaddr、とかいうのを
一行で書きたかった…んだと思ふ。
091991503/03/17 20:47ID:???
>>918
ぉぃぉぃなんか勘違いしてるぞ
092091503/03/17 20:58ID:???
>918
まぁApacheだとすると

HostnameLookups off
 アクセスは逆引きしない
 apacheのログはIP(***.***.***.***)
 $ENV{'REMOTE_HOST'}は存在しない

HostnameLookups on
 アクセスは逆引きする
 apacheのログはHOST形式(****.***.ne.jp)
$ENV{'REMOTE_HOST'}は逆引きした結果

HostnameLookups double
 on の結果を更に正引きして一致するか確かめる
 一致しなければIP形式になる。いわゆるDNS二度引き
 $ENV{'REMOTE_HOST'}は逆引きしたのが正引きしたのと同じなら存在する

稀に偽の逆引きアドレスいれるサーバがあって
逆引きすると日本語で萌え萌えとかでるいう香具師もいる
ちなみにgethostbyaddr関数はdoubleと同等ね

普通はApacheの逆引きはしない様にして
ホスト情報が欲しいときだけgethostbyaddr関数などを使うのが
これが一番サーバにやさしいかと。
0921nobodyさん03/03/17 21:15ID:???
$ENV{'REMOTE_HOST'}が空で返ってきて、
gethostbyaddrが動作しないなら、
ホスト名取得は不可能でしょうか?
必要分だけ今はnslookup(泣)

まぁ使ってるうちに結構頭で逆引きできるようになりました(死)
092291503/03/17 21:26ID:???
>>921
gethostbyaddrが動作しないってどういうこったい?
まぁ自鯖だと仮定すると
DNSをルータのではなくISPのを指定して見るとか
092392103/03/17 21:40ID:???
iswebですが、動きません。
092491503/03/17 21:49ID:???
>>923
REMOTE_HOSTも使えなくて
gethostbyaddrも使えない?

んな鯖やめなさい。
092592103/03/17 21:52ID:???
>>924
確かに止めた方がいいように思うことも一杯あったので多分もう止めます。
REMOTE_HOSTもgethostbyaddrも使えない。
HOOPSと統合によって<!--#exec cgi="..."--> まで使え無くされて踏んだり蹴ったり。

<!--#exec cgi="..."--> と.htaccessが使えて、
REMOTE_HOSTかgethostbyaddrのどちらかが使える(普通使えるよなぁ・・・)
フリーサーバって無いかなぁ・・・
0926nobodyさん03/03/17 21:57ID:???
>>925
SSI OK
CGI OK
.htaccess NG
なら結構あると思うぞ

本格的にサイトつくりたいのなら
XREAでも借りなさい。
092792103/03/17 22:03ID:???
>>926
そうなんですよね。
CGI、SSI可はかなりあるんですが、.htaccessまでってのは無いですよね。
金払ってまでならまぁ無くても仕方ないかなって思ってますけど。

ところでXREAって今一般向け止まってません?
0928nobodyさん03/03/17 22:09ID:???
>>927
ドメイン適当に1150円でとれば無条件で使えたと思ったが
さらに2400円払えば広告なくなって
破格だと思うが適度に安定してるし

ドメイン無し有料って出来たかな忘れたわ。
092991803/03/17 22:18ID:???
>>919,920
なにしろ忘れるくらい独学(perl関連のサイトをググってるだけ)だもんで。
勘違い以前に無知に等しかったり。
理解できたかどうかはともかく説明多謝。
0930sage03/03/18 00:22ID:I8ME4rq8
#!/usr/bin/perl
SetCookie {
$CookieName = hello';
$ExpireDate = '200108270900';
}

#!/usr/bin/perl
GetCookie {
unless ($ENV{'HTTP_COOKIE'} = hello) {
Print "Location: http://hoge.com/chuui/cookie.html\n\n";
}
で直リンクを低減させようと思案しています。
ですが、第一にクッキーがセットされません。
どこがどういう風に変なのでしょうか?
0931nobodyさん03/03/18 00:27ID:???
演算子の使い方とかクッキーの仕様に対する理解とか・・・
0932nobodyさん03/03/18 00:27ID:???
クッキーのセットはレスポンスヘッダで。
http://www.studyinghttp.net/rfc_ja/2616/
0933nobodyさん03/03/18 00:28ID:???
>>930
SetCookieで
セットしてないじゃん
0934nobodyさん03/03/18 00:28ID:???
いろいろ。
0935nobodyさん03/03/18 00:38ID:???
>>930
あえて言う いろいろ問題がある
093693003/03/18 08:45ID:I8ME4rq8
てーと、どこいら辺が…?

>931 演算子の使い方とか〜
そもそも演算子というのがよく分かっていません。 色々見て回って書いてみたものなので

>932
読んだのですが、理解を超えています。 だから、初心者なのですが…

>933
色々なホームページで見た限り、これで良さそうな感じで書かれてあったので、これ以上は…

>934、935
では、正しくはどういう記述を…?
0937nobodyさん03/03/18 08:59ID:???
そもそもいきなりクッキー埋めこもうとするのも問題じゃろな
クッキーカウンタとかもやめてほしいネ
0938nobodyさん03/03/18 09:17ID:???
>>936
クッキーの仕様についてはCGIの範疇なのでスレ違い。
だいたい、ソースのコピペしかできないようなレベルじゃ扱うのはまだ早いよ。
自分で掲示板の1つも作れるようになるころには、理解できるようになってるはず。

つうか、「Perl クッキー」とかでぐぐればけっこう解説サイトがヒットするけどな…
0939nobodyさん03/03/18 09:33ID:jCHimkJH
質問です。
ローカルにApache,perlがあります。CGIページで
system("xload")を実行したいですが、できません。
system("pwd")のようなコンソールアプリは動くが、xloadや
xemacsなんてのは動かないという認識でよいのでしょうか。

御回答をお願いします。
0940930、93603/03/18 09:50ID:I8ME4rq8
>937
>そもそもいきなりクッキー埋めこもうとするのも問題じゃろな
よく意味は分からないけど、そんなもんなんですかねェ・・・

>938
>自分で掲示板の1つも作れるようになるころには、理解できるようになってるはず。
これは何となく分かるような気がします。
>「Perl クッキー」とかでぐぐればけっこう解説サイトがヒットするけどな…
確かにいっぱいヒットしましたが、殆ど紫色なんですよ。
一度は見ています。あまり分からなかったですが・・・

ともかく、皆様、色々有り難うございました。
また来るとは思いますが、少し、色々漂流してこようと思ってます。
0941bloom03/03/18 09:51ID:aWc/tLn4
http://www.agemasukudasai.com/bloom/
0942nobodyさん03/03/18 14:20ID:???
IE6だとデフォでcookie弾かれる
0943nobodyさん03/03/18 14:32ID:nZAPWH8k
niftyで、ホームページを作ってほしい、と頼まれたのですが、
sendmailが使えず、ちょっと悩んでるんですが、
http://wan.magical.gr.jp/txt/sendmail.htm
http://homepage2.nifty.com/ders_soft/sendmail01.html
↑これって使っても大丈夫ですか?
0944nobodyさん03/03/18 14:39ID:???
>>943
>これって使っても大丈夫ですか?
何について心配しているのか、さぱーりわからん。
0945nobodyさん03/03/18 16:35ID:???
niftyって外部との通信が可能なのか・・・
0946nobodyさん03/03/18 16:45ID:???
>>939
CGIページって何?
ま、いいや。
xload がどう動くことを期待してるわけ?
Perl より先に HTTP を学ぶことを推奨しとく。
0947nobodyさん03/03/18 18:44ID:???
>>939
斬新な発想すぎてオレにはついていけない
システム状況(?)を見たいのならmrtgてのもあるぞ。
perlより先に SNMP を学ぶことを推奨しとく。
0948nobodyさん03/03/18 18:55ID:???
次スレ用意しました。

Perl 初心者コーナー Part21
http://pc2.2ch.net/test/read.cgi/php/1047980851/
0949nobodyさん03/03/19 12:44ID:???
掲示板眺めてたら
#環境変数取得
$ip = $ENV{'REMOTE_ADDR'};
$host = gethostbyaddr(pack("C4", split(/\./, $ip)), 2);
$host ||= $ENV{'REMOTE_HOST'};
$host ||= $ip;
$referer=$ENV{'HTTP_REFERER'};
$script=$ENV{'SCRIPT_NAME'};
ってのがあったんですが、$host ||= $ip;の||=ってなんですか?
多分、インクリメントやデクリメントのように略されてると思うんですが
本を読んでも見つからず、検索かけても全くヒットしてくれないのです。
アドバイス頂けたら嬉しいです。
0950nobodyさん03/03/19 12:52ID:???
>>949
なぜ前スレで?
とりあえず、"perl" と "演算子" あたりをキーワードにすれば見つかる
# 実際見つかったから
0951nobodyさん03/03/19 13:03ID:???
>>949
$a ||= $b は、$a = $a || $b と等価。
つまり、$hostが空(=偽)なら右辺値を代入。

0952nobodyさん03/03/19 13:06ID:???
>>950
えっ、次スレ立っても現行スレを消化するまではこっちを利用するってのが普通だと
思ってた。違ったのか。すいません。
いろいろ考えて
$host eq "" || $host eq "$ip"
のようなものかなとか考えてました。"perl" と "演算子"で検索してきます。ありがとうございます。
0953nobodyさん03/03/20 10:48ID:???
>>945
nifty ソケットは使えないよ。
0954nobodyさん03/03/20 13:07ID:sfBN77p8
みなさん
use strict;
って使ってます?
0955nobodyさん03/03/20 13:18ID:???
使ってます
0956nobodyさん03/03/20 13:20ID:???
>>955
ということは
Kentみたいのじゃなくて
varsなどでグローバル変数 myなどローカル変数を
明確にやってるんでしょうか?
0957nobodyさん03/03/20 13:33ID:???
やってます。
Kentみたいの、ってのがよくわからんけど。

# 何が聞きたいのかいまいち見えてこないし
0958nobodyさん03/03/20 13:35ID:???
>>957
サンクス
KENTWEB配布のやつは
use strict使ってなくて
局所的にlocal使っているんですが
ほとんどは定義もせずにグローバル変数になってます
0959nobodyさん03/03/20 13:40ID:???
perl4互換のせいでしょう。
0960nobodyさん03/03/20 13:42ID:???
>>958
あそこは perl4 でも動作するようにしてるから・・・。


これ以降、新規質問は新スレで

Perl 初心者コーナー Part21
http://pc2.2ch.net/test/read.cgi/php/1047980851/
0961nobodyさん03/03/20 14:05ID:???
my($hoge);
&jcode::convert( *hoge, 'sjis' );
こうして変数をmy宣言してしまうとコンバートされません。
localじゃないとダメです。なぜでしょうか?
localだとuse strictでエラーが出ますし。
0962nobodyさん03/03/20 14:13ID:???
>>961
結局それが聞きたかったの?

my $hoge;
jcode::convert(\$hoge, 'sjis');
0963nobodyさん03/03/20 18:14ID:???
>>961
レキシカル変数に型グロブは使えないよ。
Perl5なら>>962みたいにリファレンスを使おう。
0964nobodyさん03/03/21 04:46ID:???
通常の日付から1970年1月1日からの秒数を計算するツールって
ありませんか?
0965nobodyさん03/03/21 05:13ID:???
Timeモジュール
0966nobodyさん03/03/21 09:04ID:???
>>964
use Time::Local;
print timelocal($sec,$min,$hour,$day,$mon,$year);
0967nobodyさん03/03/21 16:26ID:6r+JTGmv
おしえて君ですいません
ある行の途中にAAAという単語があったら
それ以降の文字をすべて消すにはどうすればよいでしょうか?
ex. XXX AAA YYY
上のAAA YYY(ランダムな文字列、文字数)を消したいのレス。


0968nobodyさん03/03/21 16:39ID:pOguTMzc
>>967
s/AAA.+//
096996703/03/21 18:14ID:6r+JTGmv
>>968
たすかりました
ドーモデスm(_)m
0970名無しさん@Meadow03/03/22 18:00ID:???
そろそろ秒読みに入らない?
あと31!
0971nobodyさん03/03/22 19:09ID:???
30
0972nobodyさん03/03/22 22:45ID:blYpQKgH
970ゲト
970げと
9 7 0 ゲ ト
9 7 0 げ と
0973nobodyさん03/03/22 22:49ID:89cBTolJ
http://218.44.246.37/~2ch/
0974somebody03/03/23 14:56ID:???
pmファイルってPerlのモジュールですよね?
何ができるのですか?どうやってつかうのですか?
0975nobodyさん03/03/23 15:19ID:???
>>974
何ができる?→モジュールによる。
どう使う?→検索しる
0976nobodyさん03/03/23 21:23ID:???
>>974
plファイルってPerlのライブラリですよね?
何ができるのですか? どうやってつかうのですか?
0977nobodyさん03/03/24 02:33ID:???
>>976
何ができる?→ライブラリによる。
どう使う?→検索しる
0978nobodyさん03/03/24 12:51ID:???
cgiファイルって実行ファイルですよね?
何ができるのですか? どうやってつかうのですか?
0979nobodyさん03/03/24 15:22ID:???
1000!
0980nobodyさん03/03/24 15:22ID:???
>>978
> cgiファイルって実行ファイルですよね?
そんなことはありません

> 何ができるのですか? どうやってつかうのですか?
一概には言えません
0981nobodyさん03/03/24 16:53ID:???
>>978
実行ファイル?→そうとは限らん
どう使う?→検索しる
0982nobodyさん03/03/24 18:25ID:???
 
0983nobodyさん03/03/24 23:13ID:???
>>981
まあ、皮肉ボケをかますのもそれくらいにしとこうや。
最初の質問者の>>974は見てないのか通じてないのか通じてて無視してんのか知らないけど。
阿呆な質問には阿呆な回答がつくのが関の山だって言う、好例だな。
0984nobodyさん03/03/24 23:56ID:???
質問です。
スクリプト?mode=check
みたいのを掲示板に作っているのですが、
その中で属性のチェックの中で755のチェックはどう指定sすればいいのでしょうか?

777の場合は
if (-r $script && -w $script && -x $script) {
print "<LI>スクリプトパーミッション:OK\n";
} else {
print "<LI>スクリプトパーミッション:NG → $script\n";
}
666は && -x $scriptを削除すればいいのですが
三つ数字が並んでいない755はどうすればいいのか分かりません。
よろしくお願いします。
0985nobodyさん03/03/25 00:08ID:???
>>984
stat使え
0986nobodyさん03/03/25 00:13ID:???
Perl 初心者コーナー Part21
http://pc2.2ch.net/test/read.cgi/php/1047980851/
0987nobodyさん03/03/25 00:13ID:???
>>984
statを使え
0988984 ◆R6848mhTeI 03/03/25 00:27ID:???
>>985
>>987
if (stat($mode) == 755)
見たいにですか?
0989984 ◆R6848mhTeI 03/03/25 00:29ID:???
誤爆
if ((($mode) = (stat($script)) == 755) {

みたいにですか?

0990984 ◆R6848mhTeI 03/03/25 00:32ID:???
あ、自己解決しました。
どうもありがとうございました
≦(._.)≧ ペコ
0991nobodyさん03/03/25 00:39ID:???
解決したっていうならいいけど、違う予感・・・
0992984 ◆R6848mhTeI 03/03/25 00:48ID:???
>>991
結局こうしました

if ((($mode) = stat($file)) = 755) { print "<LI>表\示ファイルのパーミッション:OK\n"; }
else { print "<LI>表\示ファイルのパーミッション:NG\n"; }
0993984 ◆R6848mhTeI 03/03/25 00:50ID:???
(;・∀・)む・・・結局解決してないかも・・・?
0994nobodyさん03/03/25 00:57ID:???
ちゃんと関数の使い方ぐらい調べて書けよ

statは配列で13個の値を返す
3番目( [2] )にパーミッションも含まれている
値を見ればわかるがそのままでは直接使えない
8進数にして下3桁が一般的にいう755などのようなパーミッション

これは定石だからこの機会に覚えるといい
0995nobodyさん03/03/25 02:21ID:ouvjm9qN
あと1000まで6!
0996nobodyさん03/03/25 04:27ID:???
0997nobodyさん03/03/25 04:28ID:???
4 
0998nobodyさん03/03/25 04:31ID:???
3  
0999nobodyさん03/03/25 04:33ID:???
2
1000nobodyさん03/03/25 04:35ID:???
次スレ
Perl 初心者コーナー Part21
http://pc2.2ch.net/test/read.cgi/php/1047980851/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。