【Perl】初心者コーナー Part19

このエントリーをはてなブックマークに追加
1nobodyさん
初めに→「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
2nobodyさん:03/02/09 00:25 ID:s0tpWWxg
[過去ログ]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: 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
3nobodyさん:03/02/09 00:25 ID:BxWrsuOv
4!
4nobodyさん:03/02/09 00:25 ID:???
[総合]
 ・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/
5nobodyさん:03/02/09 00:25 ID:???
[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/
61:03/02/09 00:26 ID:???
うげ part20 だった・・・
7nobodyさん:03/02/09 00:26 ID:???
荒らしみたい・・・
8nobodyさん:03/02/09 00:27 ID:???
>>6
致命的だな。。。
9nobodyさん:03/02/09 00:29 ID:???
Part14のURL見つけてきた。

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

>>25
トリップなんて好きな所に埋め込めばいい。
どうしてもというなら、キャップ処理の前後。
31本7 ◆HON7/awDa. :03/02/09 17:27 ID:???
>>30
トリップ処理の方の$inを$FORMに変えて入れてみたらざなぜかエラーに
ブラウザにエラー行返して見たらトリップ機能の2行目でエラーらしいんですよ。
なぜでしょうか?
32nobodyさん:03/02/09 17:38 ID:???
>>31
「エラーになった」だけじゃ分からんよ。
エラーの内容を一字一句もらさず書いてくれ。
33本7 ◆HON7/awDa. :03/02/09 18:10 ID:???
すんません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 ([email protected]), giving this error message and the time and date of the error.

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

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

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


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

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

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

上のほうにもあるけど、「うまくいかない」だけじゃわかんないよ。
どうなるか必ず書くこと。エラーメッセージもあれば書くこと。
49nobodyさん:03/02/10 00:46 ID:???
if ($honbun eq "" ) { print "リロードタグ"}
50nobodyさん:03/02/10 02:56 ID:???
51nobodyさん:03/02/10 04:15 ID:???
>>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
52nobodyさん:03/02/10 04:20 ID:???
しかし、データベースファイルに
テンポラリファイルを使うのはいかがなものかと。
5350:03/02/10 04:35 ID:lunjJQvX
>>51さんのように
SDBMをファイルロックで包む例はよくあるんだけど、
>>52さんの言うように
テンポラリファイルを使う例があまりないみたいなので質問してみたんですが、
どうなんでしょうかね?

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

flockが不安定または使えない場合は、
symlinkとかmkdirの擬似的なロックでもいいと思います。
DBM処理系によっては複数のファイルを作成したりしますので、
テンポラリは結構面倒かもしれません。
55超初心者:03/02/10 11:47 ID:MIMhYBnE
カウンターを作っていますがうまく行きません。
トータル・今日・昨日をカウントさせたいのですが、
昨日・今日が上手くカウントしてくれないです。
56超初心者:03/02/10 11:48 ID: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
57nobodyさん:03/02/10 12:33 ID:???
>>56
改行の扱い方が悪し。
とりあえず下記の変更でも動くけれど、良くないね。全体的に見直すべし。

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

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

(別のところからログファイルだけ更新できるようなイメージ)
61↓新語:03/02/10 22:59 ID:???
”Webフォルダ”
62nobodyさん:03/02/10 23:04 ID:???
彼方此方カキコするのはヤメレ
63nobodyさん:03/02/10 23:09 ID:???
Webフォルダってのはアレですか?
自分のパソコンの中に作った「Web」っていう名前のフォルダですか?
64nobodyさん:03/02/10 23:15 ID:???
65nobodyさん:03/02/10 23:31 ID:???
>>64
なるほど。勉強になった。サンクスコ


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

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

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

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

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

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

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

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

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

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

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

88nobodyさん:03/02/12 00:34 ID:9lI7mE1F
質問です。
$a = "aaaaaabababanfjfggkrwaafrwnlwa";
例えば$aの中に「a」と言う文字が何回現れるか数えられる関数はありますか?
89nobodyさん:03/02/12 00:37 ID:???
>>88
それくらい自分でつくれば?
90nobodyさん:03/02/12 00:48 ID:???
$count = $str =~ tr/a//;
9188 自己解決:03/02/12 00:49 ID:???
>>89
その回答からすると関数は無さそうですね。
92nobodyさん:03/02/12 01:05 ID:???
>>85
print "The value of PI is ${\PI}.\n";
これじゃだめ?
93nobodyさん:03/02/12 03:08 ID:???
>>92
いいらしいよ
94nobodyさん:03/02/12 06:41 ID:???
>>86
print "The value of PI is @{[ PI ]}.\n";はconstant.pmの
中に書いてあるのをコピペしただけ。まあ、ドキュメントを
読みましょ!って事ッス。何故そうなるか?はperlrefを
見ましょ。これも、constant.pmの中に書いてある(藁
>>92 はその応用形ってことっしょ。
95nobodyさん:03/02/12 14:43 ID:???
echo や print で生成したフォームからは値を受け取ることは出来ないですか?
96nobodyさん:03/02/12 14:46 ID:???
すまん perlじゃなかった
97nobodyさん:03/02/12 18:49 ID: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

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

my @tmp = ($a, $b, $c);
@tmp = (...);
と同じことになる。
10092:03/02/12 21:34 ID:???
>>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さんの言うと通りなので、
配列にするのが礼儀正しい方法みたいですね。
101nobodyさん:03/02/13 02:39 ID:???
@{[]}は実行効率悪いよ
普通に、
print "My sub returned" . mysub(1,2,3) . "that time.\n";
の方がいいと思う
102nobodyさん:03/02/13 16:37 ID:/En01Oe5
$moji1 = '111';
$moji2 = '110';
〜〜〜〜〜〜〜←ここの部分
$moji1 - $moji2 == 1

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

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

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

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

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

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

何か簡単なアドバイスでも良いのでよろしくお願いします。
104nobodyさん:03/02/13 16:52 ID:???
105nobodyさん:03/02/13 16:53 ID:???
>>104
意味不明なのはお前の方だ
106nobodyさん:03/02/13 16:54 ID:???
>>104,105 ワラタ
107nobodyさん:03/02/13 16:58 ID:???
>>403
/cgi-bin/csun/を代入している変数を探す。
その変数を探す。
108nobodyさん:03/02/13 16:58 ID:???
>>103
ブラウザが勝手にルートたどったりするんじゃねーかな
関係ないかも知れんが、IEとかだとお気に入りアイコン探しまくってうざい
109107:03/02/13 16:59 ID:???
俺も思わず誤爆してしまった(藁
>>103だ。
110104:03/02/13 17:03 ID:???
ワリィワリィ
111nobodyさん:03/02/13 17:13 ID:???
>>102
何もしなくてよい。
$moji1 = '111';
$moji2 = '110';
printf("\$moji1 - \$moji2 = %d\n", $moji1 - $moji2);
112nobodyさん:03/02/13 17:14 ID:???
>>107
設定ファイル csun2.cgi を見るとサーバのディレクトリの設定は、

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

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

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

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

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

です。
116104:03/02/13 17:31 ID:???
>>115
そのエラーがさ、cgiに原因があるとする理由は何?
117nobodyさん:03/02/13 17:37 ID:???
>>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 用
はどうなってる。
118nobodyさん:03/02/13 17:39 ID:???
>>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エラーがでる理由はありますか?
119nobodyさん:03/02/13 17:42 ID:???
>>118
多分出力されたHTMLを見ればわかる。
120nobodyさん:03/02/13 17:43 ID:???
csun/index.htmlでも置いとけば。
121nobodyさん:03/02/13 17:43 ID:???
cgi-binはScriptAliasされているんじゃ・・・
122nobodyさん:03/02/13 17:45 ID:???
>>119
前に調べたのですが、異常はありませんでした。

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

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

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

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

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

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

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

csun.cgi にて

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

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

……そんなコマンドはない。
140nobodyさん:03/02/14 22:31 ID:???
ムキー!!!
141nobodyさん:03/02/14 22:37 ID:???
goto LABEL
142137:03/02/14 23:33 ID: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>
143nobodyさん:03/02/14 23:38 ID:???
>>142
HTTPを勉強しる
144nobodyさん:03/02/14 23:49 ID:???
>>142
HTTPヘッダーを勉強してみてください。
スレ違いなので、これくらいで。
145nobodyさん:03/02/14 23:53 ID:???
まぁそう言わずに纏めて置こう。
他スレの皆さんにも迷惑になるので。

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

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

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

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

>>154
区別の付く人間が積極的に誘導 or 徹底的に無視すればいい。
156152:03/02/15 01:59 ID:???
>>153-155
すみません…場違いでした。
157nobodyさん:03/02/15 11:09 ID:???
>>155 無視すると半端な厨が回答する。
158nobodyさん:03/02/15 11:47 ID:???
>>152
セッション管理でぐぐれ
159nobodyさん:03/02/15 12:51 ID: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("投稿エラーです。"); }# ここまで

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

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

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

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

170nobodyさん:03/02/15 21:03 ID:???
質問です。
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回程度計算で変更されたあとファイル再び書き込まれます。
171nobodyさん:03/02/15 21:21 ID:???
>>170
> &read("filename");
ってエラーにはならないのか。

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

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

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

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

すみません。
173172:03/02/15 21:28 ID:???
名前が169になってた…。
170です。
174nobodyさん:03/02/15 22:31 ID:???
>>172
http://pc2.2ch.net/php/SETTING.TXT
長文になるときはこちらを閲覧してみてください。
制限は2048文字になっていますね ニヤリ
175nobodyさん:03/02/15 22:34 ID:???
shift-jisだから、1024文字だね。
176nobodyさん:03/02/15 22:36 ID:???
>175
それも違う。2048byteだ。
177nobodyさん:03/02/16 01:27 ID: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'};

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

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

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

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

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

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

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

181177:03/02/16 02:06 ID: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";
182nobodyさん:03/02/16 02:17 ID:???
>>181
小出しすんなや、ヴォケ
じゃーコードには問題無いつーことで、スレ違い。
エラーログでも見るんだな。
183nobodyさん:03/02/16 02:23 ID:???
>>177

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

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

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

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

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

>Peal
逝ってきます。

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

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

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

@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のまま)でした。
195nobodyさん:03/02/16 15:43 ID:???
split が全然必要ない。@results の中身を print してみろ
196nobodyさん:03/02/16 15:49 ID:???
print @results;
ってことね
197nobodyさん:03/02/16 16:03 ID:???
splitも必要ないけれど、それよりもmapの方から必要ないYO

@sortresults = sort { $a->[2] <=> $b->[2] } @results;
198194:03/02/16 16:23 ID:???
>>195-197
できました!ありがとうございます。
昨日1日悩み続けて無駄にしてしまったのに、こんなに簡単なこととは・・・
あとは複数キーのソートにするだけなので大丈夫そうです!
本当に助かりました。
199nobodyさん:03/02/16 18:40 ID:???
$|=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です。
200nobodyさん:03/02/16 19:24 ID:???
#close STDOUT;
201nobodyさん:03/02/16 19:36 ID:???
>>199
バングパスが無いとか言ってみる。
コマンドラインから実行してみれば分かりますよん。
202nobodyさん:03/02/16 20:05 ID:6e2uXHNP
グワバババ
203199:03/02/16 21:09 ID:???
>>200-201
レスありがとうございます。

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

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

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

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

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

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

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

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

というか、コードを読んだ限りじゃまだまだAlphaの段階で、
真面目にポータビリティを考える段階じゃないらしい。
VCでのコンパイルコードにperl57.libとかハードコーディングしてあるしね。
233nobodyさん:03/02/17 21:03 ID: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' をはずすとちゃんと渡ってきますが、
それではファイル添付ができないし…。

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

<inpit type="text" name="onamae">
の誤りです。すみません。
235nobodyさん:03/02/17 21:10 ID:???
>>233
ここはPerlのスレッドです
236nobodyさん:03/02/17 21:20 ID:???
237233:03/02/17 21:24 ID:???
>>236
あ、ありがとうございました!
教えて頂いたところは見つけていたのですが、
回答にあるdecode.plを探さずに「だめか…」とへこんでいました。
探してみたらありましたので、もうちょっと調査してみます。
238236:03/02/17 21:36 ID:???
>>237
じゃーフォーマットは判っていたのだから、
自前でデコードしても良かったのではないかと...
応用力なさすぎでつ。
239nobodyさん:03/02/17 21:44 ID:???
ここは初心者スレです。
応用力無くても別にかまわないかと。
240nobodyさん:03/02/17 21:51 ID:4gk/zjjH
最新版のActivePerlで DB_File を入れようと PPM で install しようとすると見つかりません。
どうも最新版のモジュールリポジトリに DB_File がないようなのですが、何か理由でもあるのでしょうか。
古い方のActivePerlのリポジトリにはあるようです。
241236:03/02/17 21:53 ID:???
応用力という言葉のみに反応すんなって。
242nobodyさん:03/02/17 22:33 ID:1e74kzGJ
お勧めのエディタとかありますか?
243nobodyさん:03/02/17 22:43 ID:???
PerlEditor
244nobodyさん:03/02/17 22:46 ID:???
>>243
即レスサンクス!と思ったんだけどそれ以外で何かあります?(^^;

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

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

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

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

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

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

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

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

換言すると、(1)サブルーチンにグローバル変数を渡し、受け取った変数はmy宣言し、
処理したのちにreturnで返すのと、
(2)サブルーチン内でもグローバル変数のまま扱って処理するのとでは、
どちらが速いのか、ということです。
265nobodyさん:03/02/19 00:15 ID:P468uHQ8
sageてしまいました。
266nobodyさん:03/02/19 00:28 ID: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;
267nobodyさん:03/02/19 00:42 ID:???
>>264
変数自体にかかるコストは、シンボルテーブルに入らない分、myの方が速い。
でも、コピーにはコストがかかる。だから、遅くなる、だと思う。

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

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

>>266
273に同意。で、エラーメッセージを書けぃ
280 :03/02/19 01:18 ID:???
>>266
PERLがローカルに入っているなら、
それ使った時に出たもっと具体的な
エラーメッセージは?
281nobodyさん:03/02/19 01:26 ID:???
次の質問は「エラーメッセージってどうやって見るんですかぁ?」。
282nobodyさん:03/02/19 01:58 ID:???
>>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;}}});
--
ここまでこだわる前にアルゴリズムを見直す方がいいに一票。
283nobodyさん:03/02/19 02:00 ID:???
>>282はバージョン5.6以降のコマンドラインで動かしてください。
284264:03/02/19 02:47 ID:???
>>267さん>>282さん
レスありがとうございます。

>>282を実行したところ、Aのほうが早かったです。
>ここまでこだわる前にアルゴリズムを見直す方がいいに一票。
単なる素朴な疑問だったもので、おっしゃるとおりです。
効率的なアルゴリズムのなんたるかを勉強してきます。
285nobodyさん:03/02/19 03:20 ID:IJ5Nv9d6
とりあいずCGIファイル(カウンタ)を作ってみたんですが、
「ファイルを開くアプリケーションを選んでください」
になってしまいます、どのアプリケーションで開けば良いのでしょうか?
286nobodyさん:03/02/19 03:39 ID:???
>>285
編集したいならメモ帳あたりで。
テキストが読み書きできればなんでもいいです。
287nobodyさん:03/02/19 03:44 ID:IJ5Nv9d6
>>256
編集するんじゃなくて、カウンタとして表示させたいのですが。
288 :03/02/19 04:02 ID:???
>>287
cgi設置法の基礎なんて、PERL以前の話。
スレ違いだよ。
289nobodyさん:03/02/19 04:04 ID:???
290nobodyさん:03/02/19 05:59 ID:???
>>285
おまいにひとつ聞きたい
なんでこのスレで聞いた?
CGIスレが他にあるのになんでこのスレで聞いた?
291マリモーマ ◆r6PDGT6Xd2 :03/02/19 06:49 ID:tT+FI6u3
>266
これだと思うだけど
#!c:/perl/bin/perl →#!/usr/bin/perl
292nobodyさん:03/02/19 06:55 ID:V0z+N0Sl
あゆのパンチラ動画です
http://homepage3.nifty.com/digikei/ten.html
293nobodyさん:03/02/19 15:12 ID:CC31r6wC
PHPとPerlだとどっちが偉いんですか?
294 ◆s/jp/vus/g :03/02/19 15:31 ID:???
Assembla>>FORTRAN=LISP>>COBOL>BASIC>(超えられない時代の壁)>>>Perl>>PHP
295nobodyさん:03/02/19 16:14 ID:???
高級か低級かの話かね?
296nobodyさん:03/02/19 17:11 ID:???
>>295
>Assembla

せっかくボケてんだから突っ込んでやれよ・・・。
297 ◆s/jp/vus/g :03/02/19 18:31 ID:???
(´-`).。oO(sageにassemblerって書けばよかった。)
298nobodyさん:03/02/19 18:47 ID:???
$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"; }

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

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

0を前に付ける正しい方法は、sprintfで整形する。だ。
303nobodyさん:03/02/19 22:29 ID:???
>正しい
304nobodyさん:03/02/19 23:25 ID: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
305nobodyさん:03/02/19 23:26 ID:???
>>298のような書き方意外によくみかけるな。
かくいう漏れも昔は>>298のように書いてたし。

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

>>351
use constant HOGE => ('hoge', 'hoge2', 'hoge3');
353351:03/02/22 19:09 ID:???
>>352
できました!どうもありがとうございます。
354nobodyさん:03/02/22 21:55 ID:dmtEQjtb
perlでユーザーの大量クリックに耐えれるクリックカウンターcgiを作ろうとしているんですが、
ファイルロックしてもデータが飛んでしまいます。
どうすればデータが飛ばないように出来るんでしょうか?
355nobodyさん:03/02/22 21:55 ID:???
どんなロックしてるか見せてみそ
356354:03/02/22 22:14 ID: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);
ってやってるんですが・・・。
大量のアクセスに耐え切れませんでした
357nobodyさん:03/02/22 22:28 ID:???
>>356
実は書き込み先がローカルじゃなかった。とか。
358nobodyさん:03/02/22 22:28 ID:???
それ、これまでのカウントってどこで読み込んでるの?
359nobodyさん:03/02/22 22:29 ID:???
>>356
書き込む前にtruncateせず、
書き込み後にtruncate(OUT, tell(OUT));
360nobodyさん:03/02/22 22:31 ID:???
あと、エラー処理入れれ。
361nobodyさん:03/02/22 22:35 ID:???
要は、小出しにしたソースでは的確なアドバイスはできないってことだ。
362nobodyさん:03/02/22 22:36 ID:???
>>356
読み出しと書き込みを一回で処理。
363354:03/02/22 22:53 ID:dmtEQjtb
if (open(F, "+< count.dat")) {
flock(F, 2);
$count = <F>;
$count++;
seek(F, 0, 0);
print F $count;
close(F);
} else {
&error();
}
いろいろ改良して、こんな感じなったんですけど、やっぱり1000回ぐらい何人かでやるとファイルの中身がおかしくなってしまいます
364nobodyさん:03/02/22 22:56 ID:???
openのエラー処理しかしてねーじゃねーか。
365nobodyさん:03/02/22 22:59 ID:???
「おかしくなる」って、どうおかしくなるの?
処理の結果ってのはバグの手がかりを知る大事な情報だから省略しないように。
366354:03/02/22 23:04 ID:dmtEQjtb
ファイルにアクセスが多くなると、ファイルの中身の値が適切じゃないものになってしまいます。
367nobodyさん:03/02/22 23:06 ID:???
モロ画像とか?
368354:03/02/22 23:07 ID:dmtEQjtb
いや。同時に大量実行実験です。
それで、実行された回数を記録したいんです。
369nobodyさん:03/02/22 23:09 ID:???
>>363
例えば、先行プロセスでflockが失敗したとする。
しかしエラー処理が無いのでそのまま進む。
ここで後続プロセスがロックがかかってないのでファイルをオープンする。
データが壊れる。
370nobodyさん:03/02/22 23:28 ID:???
カウンターとかのファイルロックって、
限界があると思うけど・・・。
絶対壊れないようにするファイルロックはないです。
371354:03/02/22 23:30 ID:dmtEQjtb
では、MySQLのデータペースとか使えば壊れないでしょうか?
372nobodyさん:03/02/22 23:31 ID:???
もし壊れても、可能な限り復旧するっていう形のほうがいいかも。
373nobodyさん:03/02/22 23:42 ID:???
>>370
でたらめ抜かすな。ロックは2種類しかない。
正しいロックと駄目ロックだ。絶対に壊れないのが正しいロック、それ以外が駄目ロック。
374nobodyさん:03/02/22 23:59 ID:???
>>363
truncateしろ。
375nobodyさん:03/02/23 00:02 ID:???
>>374
サイズが増えるだけなら入らないと思われ
376354:03/02/23 00:04 ID:osZUd/C4
>> 374
truncateって何ですか?
377nobodyさん:03/02/23 00:08 ID:???
だからエラー処理をしろって
378nobodyさん:03/02/23 00:18 ID:???
>>363
その方法が最良じゃないかと思いますが。
無駄な処理とかないですし。
あとはflockとseekとcloseにエラー処理加えるくらいですね。
379378:03/02/23 00:19 ID:???
ちなみにtrancateは入れる必要ないですね。
380nobodyさん:03/02/23 00:26 ID:???
>>373
そんなことない。
絶対壊れないようにするなんて不可能。
集中同時アクセスがつづけば、どんなロックしてても壊れるだろ。
381nobodyさん:03/02/23 00:29 ID:???
ムキー!!!
なんで354は再三にわたってエラー処理をしろというレスを
無視するんだああああr;かえ;gk’えあ;rlf’あうぇr
382nobodyさん:03/02/23 00:50 ID:???
>>381
まあおちけつ。
どうせ動かなくて困るのは質問した本人だけだ。
383nobodyさん:03/02/23 01:09 ID:???
アクセス数を制限してみる。
flockを使わない。
384nobodyさん:03/02/23 01:10 ID:???
>>380
それはチミが駄目ロックしか作れないという事を意味する。
385nobodyさん:03/02/23 01:15 ID:PmGQRxss
Socketで?を含むURLをGETしようとしてるんですが、&amp; に展開されてしまってうまくいきません。
何とか回避する方法はありませんでしょうか?
386nobodyさん:03/02/23 01:21 ID:???
意味不明。
387nobodyさん:03/02/23 01:26 ID:???
(再挑戦)

Socketで&を含むURLをGETしようとしてるんですが、&amp; に展開されてしまってうまくいきません。
何とか回避する方法はありませんでしょうか?
388nobodyさん:03/02/23 01:28 ID:???
リクエストはどうやって送ってるの?
389387:03/02/23 01:30 ID:???
$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";


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

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

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

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

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

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

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

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

婆茶とかハイマしか触ったこと無かったので分からなかった(;´Д`)
414nobodyさん:03/02/23 21:22 ID:???
>>411
whileで回しつつ、unshiftしていけば?
415nobodyさん:03/02/23 21:26 ID:???
>>414
それじゃ最終的にファイル全部を配列に入れるわけだから同じだよ。
まあ、100KBぐらいだったら気にせずreverseでいいんでない?
416nobodyさん:03/02/23 21:57 ID:???
417nobodyさん:03/02/23 22:21 ID:???
>>414-416
レスありがとうございます。
平均100KBくらいなんですが、気にしなくてもいいのかもしれませんね・・
ちょっと>>416さんのところ、詳しく見させてもらいます。
ありがとうございました。
418nobodyさん:03/02/23 22:24 ID:???
どうせ一気読みするならforで後ろから逆順に読んでいった方がreverseするより軽いと思われ。
419nobodyさん:03/02/23 23:49 ID:???
まわす数が分かっている場合。
$n = 10;
for(1..$n){ 処理; }
と、しているのですがもっとベターなやり方はありますでしょうか?
420nobodyさん:03/02/23 23:50 ID:???
全部読むなら、foreachの方が速くなるかも。特化しているから。
421nobodyさん:03/02/24 00:00 ID:???
>>420さんありがとうです。
昔はforeachを使っていたのですが、何時の間にか短いforを使うようになってしまいました。
422nobodyさん:03/02/24 01:33 ID:???
>>420 特化ってどのへんで?
for と foreach って常に置き換え可能じゃない?
423nobodyさん:03/02/24 08:38 ID:???
>>422
しかも今回は逆さに参照。
424nobodyさん:03/02/24 08:45 ID:cCE/Sh/G
自作のオブジェクト指向なCGIフレームワークを、公開前にmod_perl環境にも対応させたいです。
mod_perlを極めるためのおすすめ本・サイトを教えてください。
お願いします。
425nobodyさん:03/02/24 09:34 ID:???
>>424
・・・・気持ち悪いやつ
426nobodyさん:03/02/24 10:50 ID:???
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スクリプトで行っておりますが、これも何か関係がありますでしょうか

宜しくお願い致します

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

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

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
438nobodyさん:03/02/24 18:37 ID:???
>>437
起動する場合としない場合の違いを説明する事。
まずはpathが通っているかをチェックしる。

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

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

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

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

で nヶ月後は算出できるのですが…。
442nobodyさん:03/02/24 21:38 ID:???
>>441
引き算知ってる?
443nobodyさん:03/02/25 00:21 ID:???
http://www.mac68k.com/php/pafiledb3/pafiledb.php?action=file&id=33
ここで落としたphpBB2.0.4をXREAに設置したのですが、
書き込み時に「"」が「?」に、「>」や「<:」が「&」になってしまいます。
phpをいじったの自体初めてで、どうすればいいのやらさっぱりです。
既知の不備等、ご存じの方がおりましたらご教授下さい。
444nobodyさん:03/02/25 00:24 ID:???
>>443
ここは作る人用の板。消えろ。
445443:03/02/25 03:31 ID:???
>>444
大変申し訳ありませんでした。
446nobodyさん:03/02/25 06:42 ID:???
phpってのがミソですかな
447nobodyさん:03/02/25 07:17 ID:???
どこかで「CGIはこのスレ」とでも誘導してるのか?
理解できん。
448nobodyさん:03/02/25 07:56 ID:???
449nobodyさん:03/02/25 11:40 ID:???
>448
板にはともかくスレに誘導はしてないだろうよ…
450437:03/02/25 15:57 ID:???
パターンと原因が掴めなかったので
perlからtelnetで接続させて起動させるように書きました。
まあ、目的は達成できたのでヨシとします。
暇なときにでも勉強するでス。
ありがとう。

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

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

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

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

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

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

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

#これってperlの質問じゃなかった・・?すみません
461nobodyさん:03/02/26 11:07 ID:???
system("$ENV{COMSPEC} /c copy /A /-Y $from $to >nul")
462451:03/02/26 13:31 ID:???
>461
うはー!!できましたっ!
$ENV{COMSPEC}なんて初めて見ました。これなら違う環境でも安心して動かせますね。
本当にありがとうございました。
今夜は2ちゃんに足を向けて眠れませんです。
463nobodyさん:03/02/26 15:07 ID: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] = ""){
処理
}
}
という感じで回して処理してます。動作は問題なくするのですが、
もっとスマートないい方法ないでしょうか?
アドヴァイスをよろしくお願いします
464nobodyさん:03/02/26 15:10 ID:???
>>463
正規表現使え。
465まる:03/02/26 17:30 ID:T5eWammJ
一部のタグを有効にする掲示板を作っています。
配列で有効にするタグの中身を設定して、それに合致しないものは
gt;などで文字化する、というふうに考えたのですが、これでは
有効になるはずのタグまで文字化されてしまいました。
どう書けば動くようになるでしょうか。
#もっとスマートな書き方もあるような気がするけど・・(^-^;

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

#タグ無効処理
sub tag {
$value =~ s/</>/g;
$value =~ s/>/</g;
}
466まる:03/02/26 17:31 ID: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;
}
}
467まる:03/02/26 17:32 ID:T5eWammJ
しかもタグ要素の <〜style:="***"> までとおることになる・・
この書き方だと・・(って動かないうちにいっててもしょうがないって)
468nobodyさん:03/02/26 18:43 ID:???
すり抜けを防ぐために、禁止するものを書き換えるではなく、全部書き換えて許可するものだけ戻せ。
469nobodyさん:03/02/26 19:14 ID:h/xtR2PF
http://www.url-battle.com/cgi/

これを和鳥に設置したいのですがどういじっても表示されません。
設置自体が不可能なら諦めますが、もし方法があるならお教えいただけませんでしょうか。
470nobodyさん:03/02/26 19:20 ID:???
perlとなんの関係が?
471nobodyさん:03/02/26 20:23 ID:???
>>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;

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

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

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

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

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

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

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

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




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

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

なので、本気でやる気ならばそれぞれ専用のスレに移動しろ。
478nobodyさん:03/02/27 11:20 ID: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は入れたくないのですが、
どうすればいいのでしょうか。
479nobodyさん:03/02/27 11:35 ID:???
>>478
push(@array,"a");
push(@array,"b");
#push(@array,"a");
push(@array,"c");
480nobodyさん:03/02/27 11:42 ID:???
入れる前に処理するのと入れた後に処理するのが有りそうな予感
481nobodyさん:03/02/27 12:02 ID:???
>>479
ワロタ
482nobodyさん:03/02/27 12:33 ID:???
>>478
入れるデータを変数で渡して正規表現で分岐ってのが一番分り易いんでない?
483nobodyさん:03/02/27 12:38 ID:???
>>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;
484nobodyさん:03/02/27 14:19 ID:???
>>473

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

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

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

そもそも未入力不可のテキストボックスを指定する方法があまりよくない気がしてきだした…
485nobodyさん:03/02/27 16:01 ID:???
>483
下のやり方でうまくいきました
有難うございます
486nobodyさん:03/02/27 18:06 ID:???
西暦→和暦の関数白根?ぎぼんぬ
487nobodyさん:03/02/27 19:13 ID:???
<?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;
}
?>
488487:03/02/27 19:18 ID:???
Perlスレでした
すまん
489nobodyさん:03/02/27 19:31 ID:???
>>486
ここにあった
ttp://cgikon.com/
490486:03/02/27 21:39 ID:???
>487-489
さんこす
491nobodyさん:03/02/28 08:20 ID:nTu2mU2W
すいません。
キー1=値1
キー2=値2
みたいなフォーマットのファイルを扱うクラスがどこかにあったと思うのですが、
名前を教えて下さい。
492nobodyさん:03/02/28 08:24 ID:???
初心者は暮らすなんか使ってはいけません。
493nobodyさん:03/02/28 08:37 ID:0F+7IAI5
そんなこと言わずに教えてください。
use Class;
my $class = new Class();
$class->method();
$class = undef;
クラスの使い方なんか、たったこれだけじゃなかとですか。
494nobodyさん:03/02/28 11:28 ID:???
>>493
んぢゃ自分で作れば?
495nobodyさん:03/02/28 13:08 ID:???
もっともやね >494
496nobodyさん:03/02/28 14:41 ID:6S1ggN3l
自分で書いたクラスはあります。
ただ、標準モジュールにそういうクラスがあるなら、配布しなくていいからそっちのほうがいいです。
497nobodyさん:03/02/28 18:05 ID:???
>>496
こんなところでレス書いていないでCPANで探すのが吉。
無駄な労力はストレスの要因ですよ(^o^)
498nobodyさん:03/02/28 19:27 ID:???
>>493
new Class()で返ってきたのは、おそらく、オブジェクトなので$classという変数名は不適切。
変数を破棄する場合は、undefを代入するよりも、undef $hoge;の方が意味がわかりやすい。
499nobodyさん:03/02/28 19:49 ID:???
>>496
AnyDBM
500nobodyさん:03/02/28 20:15 ID:???
標準では無いと思う。
501nobodyさん:03/03/01 12:50 ID:???
>>496
SGBMでもGDBMでもDBでもNDBMでもなんでもいいじゃん。
502nobodyさん:03/03/01 21:02 ID:???
質問です。
ファイルのリスト @files を、更新が古い順に並べ替えたいんですが…
一応自分でも考えてみました。

@new = ();

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

@files = ();

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

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

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

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

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

シュワルツ変換(Schwartzian Transform)ですね。
やっぱり覚えた方がいいかな。。
510nobodyさん:03/03/02 13:14 ID:???
tr/\n//d;
511nobodyさん:03/03/02 15:00 ID:???
>>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文)に詰め込む云々より、この作業変数の為にブロックが
増える所がエレガントでないとは思うがな。
512初心者:03/03/02 17:23 ID:EYbp7ypM
windowsではexec関数は使えないの?
perl内で、EXEファイルを実行したいのですが。
513nobodyさん:03/03/02 17:51 ID:???
>>512
死ねクソマルチ。 
514502:03/03/02 17:57 ID:???
みなさん回答していただいてありがとうございます!
おかげでできそうです
初めてなんですけどここの板の人って親切ですね
また何か困ったことがあったらよろしくお願いします。
515nobodyさん:03/03/02 18:29 ID:???
なんだマルチか。
516nobodyさん:03/03/02 18:44 ID:???
>>514
自分で勉強する意志のある人には協力するさ(うわっ、なんか俺かっけー
517nobodyさん:03/03/02 18:46 ID:???
>>516
同意。
518nobodyさん:03/03/03 00:20 ID:???
こんな事をできる定義の方法ってあります?

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

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

$b = 'b';
$a[0] = 'a';
print "[$b]";
525nobodyさん:03/03/03 01:34 ID:???
Cで言うところのポインタ
526nobodyさん:03/03/03 01:36 ID:???
>>519>>521がめちゃ格好悪いってのだけは理解した
527nobodyさん:03/03/03 01:36 ID:???
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; # 動的スコープに注意
528524:03/03/03 01:47 ID:???
>>527
# 動的スコープに注意
は癖なんですが…。

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

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

例1
&shori (%DATA);

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

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

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

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

&shori(\%DATA);

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

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

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


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


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

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

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

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

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

m(_ _)m
545nobodyさん:03/03/04 16:01 ID: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を実行しています。
546nobodyさん:03/03/04 16:06 ID:???
>>545
open (VVT,'>./testing/vcount.cgi');

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

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

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

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

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

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

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

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

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 気づかなかった。
568561:03/03/04 22:53 ID:???
>>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
569nobodyさん:03/03/04 22:55 ID:???
>>566,>>567さん
ありがとうございます。これから解読します。
570T女の竹田:03/03/04 23:03 ID:???
ちょっと修正。
どっちにしても役に立たなさそうだけど。

$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){}
571nobodyさん:03/03/04 23:22 ID:TX/Dujet
$str1="20030304" を使って
$str2="2003年03月04日" を生成したいのですが
どうすればよいですか?
572nobodyさん:03/03/04 23:24 ID:???
>>571
$date =~ s/^(\d\d\d\d)(\d\d)(\d\d)$/$1\/$2\/$3/;

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

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

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

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

もし宜しければ、オススメのサイトや参考書を教えて頂きたいのですが。
577nobodyさん:03/03/05 23:57 ID:???
>>576
DBIとか。
578nobodyさん:03/03/06 00:04 ID:/oqmBN82
なるほど。DBI を勉強しろと言うことなのか・・・なるほど。
579nobodyさん:03/03/06 00:09 ID:???
自分で作ったモジュールの中からさらにモジュールオブジェクトを作成すると
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=
(何も表示されない)
580nobodyさん:03/03/06 00:13 ID:???
>>576
まずは道具をインストールする。
で、SQLを適当に理解する。
あとは、
connect prepare execute fetch finish disconnect
581nobodyさん:03/03/06 00:13 ID:???
仕様=バグとか言うふざけた前提でほざいてると解釈して良いのか?
582nobodyさん:03/03/06 00:14 ID:???
>>579
newは「変数初期化」なんて機能じゃないけれど。
583nobodyさん:03/03/06 00:18 ID:???
>>579
前置(?)のnewは、コンパイルするときに、それが関数か、
メソッドかを決定しないといけない。
で、newっていうサブルーチンがある(ように見える)から、関数になった。と。

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























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

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

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

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

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

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

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

主な利点:日本語がちょっとだけ目立たない。
601nobodyさん:03/03/06 18:25 ID:???
BSD magazine No.12 P127〜P128 より
> use encoding "euc-jp"; # スクリプトと同じ文字コードを指定
> use utf8;
> my $人 = 1;
> $人++; # 私たちは繁殖している!
602601:03/03/06 18:26 ID:???
要 Perl 5.8.0 な。
603nobodyさん:03/03/06 19:30 ID:???
>>600
それができるのは、キーが\wのとき。日本語の場合は何かでくくらないとだめ
604nobodyさん:03/03/06 20:58 ID:+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だと言う解釈なのですがどうにもヘタレ読解力ではキビシイです。
アドバイスお願いできないでしょうか?
605nobodyさん:03/03/06 21:09 ID:???
>>604
ありゃ、インストールされた。
日を改めてインストールしてみたら?
606nobodyさん:03/03/06 21:13 ID:+0RpBVtX
粘って粘って3日目です(;´д⊂)
607nobodyさん:03/03/06 21:46 ID:+0RpBVtX
しまった・・。
環境はXPproでc¥perlにperlをインストールしています。
608nobodyさん:03/03/06 22:41 ID:???
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/shinagawa/
609592:03/03/07 12:00 ID:???
>>593-600

分かりました。ありがとうございます。
別に
アホ丸出しだろうが
( ´,_ゝ`)プッと思われても構わないので
今後は全部ハッシュで作ろうと思います。
610nobodyさん:03/03/07 16:16 ID: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("許可されていないアクセスです") }
}
}
611nobodyさん:03/03/07 16:20 ID:???
>>610
.htaccess じゃダメなの?
612610:03/03/07 16:20 ID:o/kX6MY9
いっそシンプルにこうしたら・・・??
sub axs {
&get_host;
if ($_ ne "@deny"){ &error("許可されていないアクセスです")}
}
613610:03/03/07 16:21 ID:o/kX6MY9
.htaccessもSSIも使えないです(^^;
614nobodyさん:03/03/07 16:24 ID:???
以下のような過去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<->
--(生データ)---
615nobodyさん:03/03/07 16:26 ID:???
>>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;
616610:03/03/07 16:33 ID:o/kX6MY9
>>612
待った・・・根本的なところが、、、

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

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

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

foreach (@deny) {

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


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

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

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

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

例"5aB0"

0x35
0x61
0x42
0x30

625nobodyさん:03/03/07 19:38 ID:UTyY6aWY
>>624
$str = "ある文字列";
chomp $str; # 必要なら
foreach( split //, $str ){
printf "0x%x\n", ord;
}
626nobodyさん:03/03/07 19:42 ID:???
>>625
ありがとうございました
627nobodyさん:03/03/07 19:58 ID: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);
}
628nobodyさん:03/03/07 20:48 ID:???
今変数内に、HTMLタグを含む文字列が入ってます。
質問1.この中の<br>タグ(大文字のタグも含む)の数を数えたい場合どうすればいいでつか?
質問2.この中の後から数えてn番目の<br>タグ(大文字のタグも含む)以降の文字列を別変数に入れたい場合どうすればいいでつか?
お頼み申し上げ候
629nobodyさん:03/03/07 21:29 ID:???
>>628
#三回マッチ
$val = "1<br>2<br>3<br>4<br>5<br>6<br>7<br>";
$val =~ /((.*?<br>){3})/;
print "$'\n";
630629:03/03/07 21:32 ID:???
括弧が一つ多かった。
大文字も含むなら
$val =~ /(.*?<br>){3}/i;
631nobodyさん:03/03/07 22:16 ID:???
>>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 );
}
632nobodyさん:03/03/07 23:00 ID:???
my @line = $str =~ /[^<]*<br>/ig;
my $new = join('', @line[ $n .. $#line ]);
633nobodyさん:03/03/07 23:06 ID:???
$'を使うものの方が速そうだな。あぁ
634631:03/03/07 23:12 ID:???
>>632
漏れもそれを最初は考えたんだが、<BR>以外のタグが
あったときなんかはどうすれば良いのでしょう?
回避方法が思いつかずあんな恥ずかしいソースに…
635614:03/03/07 23:20 ID:???
>>627
ありがとう。
ちょっと手直ししたらうまくできましたーー。
きれいなコードで早そうですね。
まじさんくす。

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

そこは否定先読みで何とかできるかな。
637nobodyさん:03/03/07 23:29 ID:???
$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";

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

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

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

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

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

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

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

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

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

どなたか教えてください。
664nobodyさん:03/03/08 19:49 ID: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だけを消してもエラーが出てしまいます。
どなたか教えてください。
665nobodyさん:03/03/08 20:09 ID:???
>>663
まず初期状態では %b は未定義なので、評価するとすべて偽。
grepの第1引数は、真で返すとその要素が戻り値のリストに入る。ここまでOK?

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

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

説明下手でスマソ

>>664
2行目だけ消せばいいと思われ。
666nobodyさん:03/03/08 20:15 ID:???
>>663
$b{} はハッシュの要素を指す
! は論理否定
$_ はデフォルトの対象となる変数
(この場合はgrepによって第二引数=リストの一部が設定される)
++ はオートインクリメント(この場合は後置:式の評価後、インクリメントが発生)
667664:03/03/08 20:19 ID:???
>>665
OKでした。
2行目にも$comの記述があるから、と消そうとしなかった僕はアホですね。
ありがとうございました。
668663:03/03/08 20:43 ID:???
>>665
>>666
ありがとうございました
質問てか教えてなんだけど、簡単なアクセスカウンターの作り方
教えてください<(_ _)><(_ _)>ペコペコ
検索してもよく出てきませんでした(恥
お願いします(たたかれてもメゲマセン←ハァ?
670nobodyさん:03/03/08 21:32 ID:???
>>669
あっちで答えてやったのでは不満か?傷ついた。
671nobodyさん:03/03/08 21:49 ID:???
672nobodyさん:03/03/08 21:57 ID:???
windows環境でperl勉強しています。
フルパスからファイル名を取得したいので
以下のように作りました。
一応機能的にはokなんですが、もう少し格好良くperlっぽいやり方があれば教えてください。
なんか無駄が多いような・・

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

673nobodyさん:03/03/08 22:03 ID:???
>>671
ワラタ
674名無し.net:03/03/08 22:05 ID: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になってしまいました。
675nobodyさん:03/03/08 22:08 ID:???
>>672
十分Perl臭い。
676nobodyさん:03/03/08 22:12 ID:???
%{$temp}
だっけ…、ちと動作させてないから動くかわからん。
677名無し.net:03/03/08 22:14 ID:HY3rXLfE
>> 676
おお。
出来ました。
ありがとうございましたm(__)m
678 ◆hMJAPH9PWA :03/03/08 22:19 ID:???
>>672
use File::Basename qw(basename);
print basename($0);

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

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

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

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

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

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

よろしくお願いします。
技術的に難しいですか?
693nobodyさん:03/03/09 01:39 ID:???
print $ENV{REMOTE_HOST};
694nobodyさん:03/03/09 01:41 ID:???
>>692
文字コードは何なのか?
モジュールは使っていいのか?
perlのバージョンはいくつか?
695nobodyさん:03/03/09 02:36 ID: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:)はどこかの変数に入っているんですか?
アホな質問ほんとスミマセン・・・・。
696nobodyさん:03/03/09 02:42 ID:???
>>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);
}
697nobodyさん:03/03/09 03:26 ID:???
>>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;
}
698697:03/03/09 03:33 ID:???
書き忘れ
どんなモジュールでも質問する前にドキュメント読むように。
perldoc モジュール名

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

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

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

print $s;
701700:03/03/09 08:58 ID:???
しまった、またしても…。
<br>は適当に処置をよろ。s/>rb</<br>/g;とか。
702nobodyさん:03/03/09 09:14 ID:???
もしかしたらperl云々の問題かもしれませんが、
unlink ファイルを削除
rmdir ディレクトリを削除
のディレクトリってのは要するにフォルダのことでしょうか?
今まで同義のような曖昧な解釈でしたので一度ビシっと言ってやってください。
703nobodyさん:03/03/09 09:25 ID:???
ディレクトリのことをウイソ厨はフォルダと呼ぶらしい
704nobodyさん:03/03/09 09:29 ID:???
そのウイソ房に気が向いたら説教してくだせぇ
705nobodyさん:03/03/09 09:36 ID:???
>>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=

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

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

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

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

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

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

<<EOM;
EOM

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

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

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

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

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

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

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

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

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

そうそう、答え

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

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

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

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

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

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

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

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

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

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

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

以上の状態

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

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

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

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

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

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

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

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

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

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

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

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

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

具体的にはSolaris。perlがSUNのccでBuildされ、lib類(CPAN等)はgcc
でBuildされた場合・・・って感じです。
Shared library 周りで不整合が起きる様な気もするんですが、手元にSUNの
ccが無いので試す事が出来ません。
807nobodyさん:03/03/12 13:15 ID:???
>>806
どっちもありえる
808nobodyさん:03/03/12 13:55 ID:???
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.

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

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

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

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

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

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

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

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

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

>>825
どこに記述すればいいんでしょうか?
投稿処理の時点で$subではなくsubに置き換えて…無理ですね。
831nobodyさん:03/03/13 17:27 ID:???
>>830
HTMLを吐き出す前あたりでいいんじゃない?
832nobodyさん:03/03/13 21:45 ID: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」と書かれてしまうんです。
どこがいけないのでしょう?
833nobodyさん:03/03/13 21:54 ID:???
>>832
フォームのデータをエンコして%FORMに入れる処理(またはそれに相当する
サブルーチン等の呼び出し)はもちろんやってるよね?
834833:03/03/13 21:55 ID:???
エンコじゃなかった、デコードだ。
逝け>俺
835nobodyさん:03/03/13 21:56 ID:???
>>832
$FORM{'mode'}の中身を調べる。
# ちゃんとどっかで$form{'mode'}に代入してる?
836nobodyさん:03/03/13 22:05 ID:???
HTML::TemplateってHTMLっぽい文法でなんかどんくさい感じがするんだけど、
みんなはこれで満足してますか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>>848
これが常識

$pid = open(PIPE, '-|');
die unless(defined($pid));
if ($pid) {
local $/ = '';
@_=<PIPE>;
} else {
exec 'command', 'arg';
}
853nobodyさん:03/03/14 22:21 ID:???
[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 を使う方法になりますか?
854nobodyさん:03/03/14 22:34 ID:???
$test =~ s/\[c([0-3])([0-4])([0-3])\]/'S' . '●' x $1 . ' B' . '●' x $2 . ' O' . '●' x $3/ge;
855853:03/03/14 22:46 ID:???
( ゚д゚)ポカーン
漏れは何をまわりくどいことをやってたんだ。

s/\[c([0-3])([0-4])([0-3])\]/S●x$1 B●x$2 O●x$3/
最初こんな感じでやってみて無理だったので、上のになりました(^^;
勉強になりました。ありがとうございます。
856841:03/03/15 00:24 ID:???
>>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++;
}
857nobodyさん:03/03/15 00:57 ID:???
>>841

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

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

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

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

>>858
アホな目的に使うつもりはないので65536はさすがにやっていません(^^;
862nobodyさん:03/03/15 02:22 ID:???
このような感じでやってみました。突っ込み所がありましたらよろしくお願いします。
依然として非常に遅いのですが、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;
863nobodyさん:03/03/15 02:28 ID:???
my $iaddr = pack('C*', split(/\./, $ip));
864nobodyさん:03/03/15 02:29 ID:???
$iaddr = pack('C*', split(/\./, $ENV{"REMOTE_ADDR"}));
865Name_Not_Found:03/03/15 04:55 ID:???
KENTさんの掲示板
http://www.kent-web.com/bbs/fantasy.html?
に、”タイトル”を入力する項目を追加したいのですが
いざやってみたら、上手くいきませんでした。
この場合、どこをどういじればいいのでしょうか?
866nobodyさん:03/03/15 06:05 ID:???
>>865
スレ違い。
867nobodyさん:03/03/15 09:19 ID:Uli+0qKe
/cgi-binでしかperlを実行できず、
/cgi-binではhtml、jpgを閲覧できません。

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

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

当然root権限はあります

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

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

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

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

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

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

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

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

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

引数が2つ以上のexecは引数が1つの時と挙動が変わるし、
第一システムコール使う関数は9x系とNT系で実装具合が違う。
駱駝本なりperldoc -f execなり読んでね。
883nobodyさん:03/03/15 20:20 ID:???
>881
私も昔そう呼んでたよ。気にするな。
884nobodyさん:03/03/15 20:52 ID:???
>>881
98SEが出るあたりまでずっとそう呼んでたよ。
885nobodyさん:03/03/15 21:18 ID:???
>>880
汚染チェックだけしっかりやっとけ
>>882
$cmd,@argでも' 'でjoinしている時点で
意図を汲みようがないと思われ
886nobodyさん:03/03/15 21:42 ID:???
>>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では "-|"が使えません。
887nobodyさん:03/03/15 22:26 ID:5hlN9xGB
>>882,886

どうもありがとうございます。
うまくいきました!
888nobodyさん:03/03/16 04:48 ID:???
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";
889Name_Not_Found:03/03/16 05:06 ID:???
>>888
LWP(libwww)使うと幸せになれるかと。
890nobodyさん:03/03/16 08:50 ID:???
>>889
thx
調べてないけどモジュールですね?
やてみます
891890:03/03/16 11:19 ID:???
>>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);
892nobodyさん:03/03/16 13:18 ID:???
標準入力で渡せばいい。つまり、、FHに書き込む。
893nobodyさん:03/03/16 20:10 ID: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を切り替えれるように設定しようと思っているのですが、
これでいいのでしょうか?
894nobodyさん:03/03/16 20:13 ID:???
>>893
実験の結果はどうでした?
895893:03/03/16 20:15 ID:HMSF0mo0
これを掲示板CGIの書き込み処理の前にサブルーチンで呼び出しても、
動いてくれませんでした。
有効にしたはずだけど無効でした。
896nobodyさん:03/03/16 20:15 ID:MtdvS7v9
Perlでフォームの内容を判断させるにはどういう命令を使ったらいいんでしょうか。
「あほ」 が含まれてるだとか、判断したいんです。
897nobodyさん:03/03/16 20:18 ID:???
>>893
どう動かなかったのか?



$tripsalt = XX;

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

if ($trip == 0) {
}

いらないです。

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

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

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

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

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

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

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

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

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

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

>>912
質問したらココに誘導されたので、もう一度書きました。
915nobodyさん:03/03/17 16:43 ID:???
>>913
逆引きしたいのなら
$addr = $ENV{'REMOTE_ADDR'};
$host = gethostbyaddr(pack('c4',split(/\./, $addr)), 2) || $addr;
これでいいんじゃないの?
逆引きできたら$hostにはその結果||出来なかったら$addrを挿入;
916nobodyさん:03/03/17 19:26 ID:???
>>914
誘導されたのなら、その旨をちゃんと書くこと。
でないとマルチ扱いされても仕方がない。
917nobodyさん:03/03/17 20:00 ID:???
>>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;
と等価…のはず。
918913:03/03/17 20:27 ID:???
>>915,917
レスthx。
gethostbyaddrは負荷になるとか聞いた覚えがあったんで、
$ENV{'REMOTE_HOST'}が空だった時のみにgethostbyaddr、とかいうのを
一行で書きたかった…んだと思ふ。
919915:03/03/17 20:47 ID:???
>>918
ぉぃぉぃなんか勘違いしてるぞ
920915:03/03/17 20:58 ID:???
>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関数などを使うのが
これが一番サーバにやさしいかと。
921nobodyさん:03/03/17 21:15 ID:???
$ENV{'REMOTE_HOST'}が空で返ってきて、
gethostbyaddrが動作しないなら、
ホスト名取得は不可能でしょうか?
必要分だけ今はnslookup(泣)

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

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

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

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

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

ドメイン無し有料って出来たかな忘れたわ。
929918:03/03/17 22:18 ID:???
>>919,920
なにしろ忘れるくらい独学(perl関連のサイトをググってるだけ)だもんで。
勘違い以前に無知に等しかったり。
理解できたかどうかはともかく説明多謝。
930sage:03/03/18 00:22 ID: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";
}
で直リンクを低減させようと思案しています。
ですが、第一にクッキーがセットされません。
どこがどういう風に変なのでしょうか?
931nobodyさん:03/03/18 00:27 ID:???
演算子の使い方とかクッキーの仕様に対する理解とか・・・
932nobodyさん:03/03/18 00:27 ID:???
クッキーのセットはレスポンスヘッダで。
http://www.studyinghttp.net/rfc_ja/2616/
933nobodyさん:03/03/18 00:28 ID:???
>>930
SetCookieで
セットしてないじゃん
934nobodyさん:03/03/18 00:28 ID:???
いろいろ。
935nobodyさん:03/03/18 00:38 ID:???
>>930
あえて言う いろいろ問題がある
936930:03/03/18 08:45 ID:I8ME4rq8
てーと、どこいら辺が…?

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

> 何ができるのですか? どうやってつかうのですか?
一概には言えません
981nobodyさん:03/03/24 16:53 ID:???
>>978
実行ファイル?→そうとは限らん
どう使う?→検索しる
982nobodyさん:03/03/24 18:25 ID:???
 
983nobodyさん:03/03/24 23:13 ID:???
>>981
まあ、皮肉ボケをかますのもそれくらいにしとこうや。
最初の質問者の>>974は見てないのか通じてないのか通じてて無視してんのか知らないけど。
阿呆な質問には阿呆な回答がつくのが関の山だって言う、好例だな。
984nobodyさん:03/03/24 23:56 ID:???
質問です。
スクリプト?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はどうすればいいのか分かりません。
よろしくお願いします。
985nobodyさん:03/03/25 00:08 ID:???
>>984
stat使え
986nobodyさん:03/03/25 00:13 ID:???
Perl 初心者コーナー Part21
http://pc2.2ch.net/test/read.cgi/php/1047980851/
987nobodyさん:03/03/25 00:13 ID:???
>>984
statを使え
988984 ◆R6848mhTeI :03/03/25 00:27 ID:???
>>985
>>987
if (stat($mode) == 755)
見たいにですか?
989984 ◆R6848mhTeI :03/03/25 00:29 ID:???
誤爆
if ((($mode) = (stat($script)) == 755) {

みたいにですか?

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

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

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

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