2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【Perl】初心者コーナー Part19

1 :nobodyさん:03/01/11 13:52 ID:???
初めに→「perl」その物のスレです。

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

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

あとは>>2-10にまかせた。

2 :nobodyさん:03/01/11 13:54 ID:???
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/

3 :nobodyさん:03/01/11 13:54 ID:???
[過去ログ]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/test/read.cgi/php/1028816385/
Part16 http://pc.2ch.net/test/read.cgi/php/1032070299/
part17 http://pc.2ch.net/test/read.cgi/php/1034583844/
part18 http://pc.2ch.net/test/read.cgi/php/1037797479/


[ひまぢん氏のミラー]
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

4 :2,3:03/01/11 13:55 ID:???
他、なんかある?

5 ::03/01/11 13:57 ID:???
>>4
いや。
あrがとう。

6 :nobodyさん:03/01/11 14:01 ID:???
>>1-
O2

7 :nobodyさん:03/01/11 14:01 ID:NBoN4jVX
use CGI を使ってるんですが、
フォームで
<INPUT type="hidden" name="id" value="test_id">
というタグがあるので、これを受け取るのに

use CGI;
my $q = new CGI;
$q->param('id');

で受け取れるんですが、これそのものを正規表現にかけたいんです。例えば
例えば、@list にIDのリストが入ってるとして、

if(join(',',@list) =~ /$q->param('id')/){
  print "あなたのIDはリストに含まれています!";
}

こんなかんじで。
でも正規表現内に $q->param('id') な記述が許されないようなので

my $a = $q->param('id');
if(join(',',@list) =~ /$a/){
  print "あなたのIDはリストに含まれています!";
}

と書かなくてはならない、これがめんどくさい!
どうにか1行で書けないもんでしょーか?

8 :nobodyさん:03/01/11 14:05 ID:???
>>7
リファレンスのデリファレンス

9 :前スレ993:03/01/11 14:05 ID:???
>>前998
そうですね。
正確に測ったわけではないですが、異常なほど数値が片寄ります。
例えば、1-100までの整数が出るようにした場合、数回連続で同じ数字を取得したり、
同じような条件下では絶対に出ないような数字もあります。

>>前995さんが言っていたようなOSから取得するとかではなくて、
多少処理や記述が複雑になっても良いから、独自にランダム性の高い処理を作っている人はいないのでしょうか?


例えば、初期値の法則に「時間」を組込んでしまうと、
CGIの1アクセスで100の数値を取得した場合、ランダム性のカケラも見えず、
同じ数字がわんさか出ます。



10 :nobodyさん:03/01/11 14:08 ID:2PtCQo+x
>>7
その処理は普通、grepを使って、こうする。。けど回答になってないな。。

if ( grep { $_ eq $q->param('id') } @list ) {

11 :9:03/01/11 14:15 ID:???
前スレ993の文をこちらにコピーしておきます
【perl】
ランダムから求められる数値が片寄ってるような気がしてなりません。
ランダムを取得する時、必ず直前に以下のような記述を置いているのですが、
正確な意味も分かりません。
(昔、どこかで見たのを写したのだと思います)

srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);

質問1
上記はどんな初期値(?)を作成してるのでしょうか?

質問2
とても効率が良く、数値が片寄る事を感じさせない記述を教えて下さい。
皆様はランダム前にどんな記述をおくのでしょうか?
イロイロ教えて下さい。

また頭が弱いため、見ても理解出来ないと思うので、どのように求めているのかも簡潔に教えてくれると嬉しいです。


12 :nobodyさん:03/01/11 14:17 ID:???
>9
それってさ、srandを複数回行なってない?
srandは1回行なえばそれでいいんだが。
ソース出して。

13 :nobodyさん:03/01/11 14:21 ID:???
一応、例として。

悪い例:
foreach(0 .. 100){
  srand(time);
  print rand(100);
}

正しい例:
srand(time);
foreach(0 .. 100){
  print rand(100);
}

srandは「乱数のスタート位置を決める」もの。
randは「スタート位置から決められた順番をなぞる」もの。
srandを何回もやれば、スタート位置が毎回戻るから、同じ結果にしかならんぞ。

14 :9:03/01/11 14:23 ID:???
ちょいとソースは…無理(一万行近くあるので)

えと、実はランダム取得前に何度も置く事が多いです。
srandしてからrandみたいな。

しないほうが良いのでしょうか?

また、しない事もありますが、それでもやっぱり片寄ってきます。
例えば、RPGを作っていて、ランダムにストーリーが分かれるのですが、
プレイヤーの話を聞いてみるとみんな似通った結果になる事が多く、綺麗に分かれていません。

その「ランダムによって分ける」と言う作業自体は非常に単純な処理にしてあるので、
おそらく自分ではあくしていると思います。
で、どんな角度から考えてもやはり原因は「ランダム」が「ランダムじゃない」と言う事にあるようです。


15 :9:03/01/11 14:25 ID:???
>>13
ありがとう。
すごくありがとう。

16 :nobodyさん:03/01/11 14:30 ID:2PtCQo+x
srandを2回以上やるのは禁止。

srand、randで、1方向ハッシュみたいに使うのも禁止。
それは他に移行してもそのまま動くのか?と。

17 :nobodyさん:03/01/11 14:32 ID:P/LXfaGE
種が同じなら同じ花しか咲かない

18 :nobodyさん:03/01/11 14:34 ID:2PtCQo+x
で、種から花を作る、そのアルゴリズムは統一されているのか。ということ。

19 :16=18:03/01/11 14:36 ID:???
あ。自分は関係なかったかも。。

20 :えせカミ:03/01/11 14:38 ID:???
>>7
if(join(',',@list) =~ /$q->param('id')/){

if(join(',',@list) =~ /${\$q->param('id')}/){

でもこの書き方が好きかい?綺麗かい?


21 :nobodyさん:03/01/11 15:12 ID:???
>14
srandは2回以上やっちゃいけない。
「同じ乱数を複数回使いたい」とか特殊な状況でもない限り。
どうしても2回以上srandをするなら、種も変えるべき。

基本的にはスクリプトの頭で1回だけsrandすればいい。
Perl5以降なら、それすらも必要ない。

22 :9:03/01/11 15:13 ID:???
では、ずうずうしいようですが
品質の良い種を皆様から多数頂けないでしょうか?

種の内容も簡単に説明してくれると嬉しいです。



23 :nobodyさん:03/01/11 15:14 ID:???
>22
品質のいい種は前スレで出てたあれ。
理由は今のあんたに説明してもわからんだろ。
ちゃんと覚えたいなら駱駝本(プログラミングPerl)買え。

24 :9:03/01/11 15:18 ID:???
あと、以下の記述は俺が使う条件下ではあまり品質が合っていないようです。

srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);

今の一番の問題は時間です。
同じ時間だから似たような結果になる、と言うのを避けたいです。

同じ条件下で1000回以上「1-100」の整数を求めた時、
「連続して同じ数字が出ない」

「平均的に全て出てくる」
と言う条件を満たしたのがグットです。

25 :9:03/01/11 15:19 ID:???
>>22
分かりました。
買います。



26 :nobodyさん:03/01/11 15:22 ID:???
>>24
> 「連続して同じ数字が出ない」
どんな乱数でもこの条件は満たせないと思うんだがな。
任意の二数を取り出して同じ数字な確率ってほんの1/10000でないかね?

27 :nobodyさん:03/01/11 15:24 ID:???
>>26
言ってる事が矛盾してないか?
それと1/100だと思うぞ。

28 :nobodyさん:03/01/11 15:27 ID:???
>>27
あ、1/100だわ。スマン…寝ぼけてたようだ。
矛盾はしてない気がする。千なり一万なり生成して連続して同じ数字が出ない
様な乱数系列ってほとんどあり得ないと思うんだが。

29 :9:03/01/11 15:32 ID:???
>>26と28
ええと、
srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
の記述では、例えばCGIでPERLを使い、1アクセスで1つの数字を求めたとします。

ですが、連打して求めてしまうと同じ数字が返って来る事が非常に多いのです。
当たり前と言えば当たり前なんですが、これをなんとかしたいです。


30 :26:03/01/11 15:37 ID:???
スマン。とことんまで寝てたらしい。やっと理解した(苦笑)
種ねぇ…その記述よりいいのなんておもいつかんわ。

31 :nobodyさん:03/01/11 15:42 ID:???
>>29
アクセスカウンタも一緒に与えれば。

32 :9:03/01/11 15:52 ID:???
>>31
アイディアありがとう御座います。
でも、多くの人に連打される状況下にあるのでちょっと難しいかも…


で、ちょっと考えてみました。
最後のワガママです。


------------------

srand(ここを適当に考えてほしいです);
$aaa = rand;

srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
↑この中に$aaaを追加したいのですが、記述の意味が俺にはイマイチ理解出来ないので考えてほしいです。

------------------

以上。

すごくワガママですが、お願いします。

33 :9:03/01/11 16:27 ID:???
そいや書き忘れました。
>>28
>>同じ条件下で1000回以上「1-100」の整数を求めた時、
>>「連続して同じ数字が出ない」

>矛盾はしてない気がする。千なり一万なり生成して連続して同じ数字が出ない
>様な乱数系列ってほとんどあり得ないと思うんだが。

そうですね。
例えば、1回で1/100になるのだから、
1000回やると
(1/100)×(1000)
って事になります。

結果的に、1000回ループした場合、同じ数字が連続して出るのは「10回前後」と言うのが
もっとも効率が良いランダムって事になります。

そして、それが全然満たされていないのが現状です。
これを言いたかったのです。


34 :nobodyさん:03/01/11 16:35 ID:???
>32
それが意味ないってまだわからないか?
最初のsrandが変わらなければ、$aaaも同じ数字にしかならない。
記述の意味が理解できないってなら、自分で検索するなり何なりで調べろ。
駱駝本買うって言ったなら買って読め。
いい加減しつこい。

35 :nobodyさん:03/01/11 16:37 ID:???
よく、 CGI スクリプトで srand(time ^ $$) としているものがありますが、ヒット回数が非常に多い場合、
次に実行される時点で時間とプロセスIDがそれぞれ1ずつ増加することになるケースが考えられます。
このようなケースでは、結果 x^y == (X+1)^(Y+1) ということになり、1/3 のかくりつで同じ数が発生することになります。

引用:CGI&Perlポケットリファレンス P.223 TIPSより
(藤田郁、三島俊司著 技術評論社 発行 ISBN-4-7741-0755-7 C3055)

要因はこれのようですね。

36 :nobodyさん:03/01/11 16:42 ID:???
$$ 毎に種を生成する。
っていうのはどうだろう?

if ($$%10 == 0) { srand( time + $$); }
if ($$%10 == 1) { srand( sin(time + $$)); }
if ($$%10 == 2) { srand( cos(time ^ $$)); }

みたいな。

37 :nobodyさん:03/01/11 16:45 ID:???
>>34
いいえ?
少なくともダブルクリック時には変わりますよ?

それと、統計を取ったわけじゃわりませんが、
同じsrandを繰り返しても必ず同じ結果になるわけではありません。

>>32のは分岐点を増やす意義があります。

あと、実際の記述を1つも書いていないのにしつこいとははちょっと…。
答えたくないのなら無視していればどうかと…。

>>35
そうです。
俺のもだいたい1/3くらいでした。

そこで提案したのが>>32なのですが、実際の記述方法が分からないため、
2ちゃんねらーの方々の知恵を借りようと思ってやってきました。


38 :9:03/01/11 16:49 ID:???
>>37も自分です。(すみません)

>>36
$$とはなんでしょうか?
すみません頭弱くて。

連打アクセスでもランダム性が保持出来るのなら、ありがたくちょうだいいたします。


39 :nobodyさん:03/01/11 16:53 ID:???

>>37の突っ込みで思わず笑ってしまった。

>>34記述が書けないならレスするな。
1回も答えてないのにしつこいって…。久々にワラタよ。


40 :nobodyさん:03/01/11 16:54 ID:???
>>38
「$$」は、特殊変数です。
んーPerl関連の書籍とかには載っているかと思うけれど(苦笑)
いわゆる、PID、自身のスクリプトがPerlで実行されたときに付与される起動プロセス番号です。(UNIX系のみ?)

41 :nobodyさん:03/01/11 16:54 ID:???
>37
統計を取らない。
実際の記述を出さない。
だから嫌われるのがわからんのか?
1万行あるってなら、txtにしてアプしろよ。
そもそもお前は聞いてばかりで自分で調べようとしてないじゃないか。
まずはsrandやrandが具体的にどういう効果を持っているかも未だに理解してないんだろ?
これだけやりとりして、その間、お前は聞くばかりで自分で調べようとしていない。
1から10までここで聞く気か?

>同じsrandを繰り返しても必ず同じ結果になるわけではありません。
同じ定数なら確実に同じ数値が返る。
お前が言ってるのは、時間などの変化のある数字を使っているから、
srandに渡される数値が変わって、結果的に異なる初期化方法になってるだけ。
つまり、最初のsrandで確実に異なる数値を渡せるなら、その後に$aaaを
使ってsrandしなおす必要はないだろ?

最初のsrandが同じになる → $aaaも同じになる → 2度目のsrandも同じ結果になる
最初のsrandが異なる結果になる → 2度目のsrandをする必要がない
これくらい消防でもわかるわ。

今まで答えて損した気分だ。
宿題は自分で考えな。

42 :前スレ998=12=13=21=23=34=41:03/01/11 17:00 ID:???
>39
結構レスしてると思うんだけどね?

43 :9:03/01/11 17:05 ID:???
>>39
いえ、別に答えてないとまでは…

>最初のsrandが同じになる → $aaaも同じになる → 2度目のsrandも同じ結果になる
ええと、
連打アクセスでも最初のsrandは同じになるのでしょうか?

分かりました。
srandを調べてみます。

>>40
ありがとうございます。
その方法を一度テストしてみますm(__)m


44 :9:03/01/11 17:09 ID:???
>>42もありがとうござしますた。

あと>>30などの皆様方もどうもです。

45 :yani ◆saNSktNEdQ :03/01/11 17:14 ID:umfOb+ix
今ちょっと毎秒20hitを模擬してみたが,
time ^ $$ ^ unpack "%L*", `ps axww | gzip`
は何回やっても重複しなかったな。
(毎秒20回以上になると、俺のボロマシンでは重くて「同時」にならない)

ただ、ps とか gzip 起動しているからその分、ちょっとプロセス数を増やして行くと
、Resource temporary unavailableがすぐに出る。
そのときに件の式がどういう挙動しているかはよく分からない。
Perl5自身に任したほうが良いような気がするな。


46 :nobodyさん:03/01/11 17:23 ID:???
>43
言い方悪かったな。
要するにお前は、同じ乱数が出るから困ってるんだろ?
その原因はsrandであると。
同じ順番で乱数が出てる時は、srandが同一である可能性が高いんだよ。
>35さんの言うやり方なら、1/3で同じってことか。
お前さんがやりたいのは、その「1/3の確率で同じになった時に、
別の乱数になるようにしたい」って事じゃないのか?
つまり、その時点ですでにsrandは同じわけだよな。
だとしたら、$aaaに出てくる数字も同じ、その後のsrandも同じになるわけ。
わかる?

連打アクセスの場合はプロセスIDが異なるから同じにならない事がある。
ただ、それでも同じになる場合があるから困ってるんでしょ?

本気で覚えたいなら、srandとrandの事を自分できちんと覚えるしかないのさ。
検索なりなんなりでそういう説明ページ探したか?
そういう努力をしようという姿勢が見えないって事。

こっちだってsrandやrandの説明からまでは付き合えんって事さ。
そこまで回答者に説明させる気?
それくらい自分で調べてから聞いてくれと。

最後に俺の駱駝本に載ってたやり方を参考までに載せとく。
srand(time ^ ($$ + ($$<<15)));

場合によるが、Webサーバー上のCGIであり、同一人物の同時アクセスを想定しないなら、
IPアドレスなりUSER_AGENTなりを式に組み込む手もある。

47 :nobodyさん:03/01/11 17:27 ID:???
>今ちょっと毎秒20hitを模擬してみたが
ってどうやってやるんですか?
F5連打じゃないっすよね?telnet?専用クライアントでもあるんでしょうか?


48 :yani ◆saNSktNEdQ :03/01/11 17:31 ID:85OU0JtJ
>>47
子プロセス20個起動して、ある時刻に一斉に件の式をprint


49 :nobodyさん:03/01/11 18:02 ID:???
も、もうちょっと具体的に知りたい。
>子プロセス20個起動
がすでにわからん。これはどういうところ勉強すればいいんでしょう?

50 :nobodyさん:03/01/11 18:33 ID:???
>49
ttp://www.google.com/search?as_q=perl+%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9+%E8%B5%B7%E5%8B%95&num=100&hl=ja&ie=UTF-8&oe=UTF-8&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja&as_ft=i&as_qdr=all&as_occt=any&as_dt=i
こうやって検索すると
tp://mind.f.fiw-web.net/program/perl/tips0301.html
こんなページが見つかる。

51 :nobodyさん:03/01/11 19:47 ID:???
>>9
っていうか掲示板なんだから、自分以外にも利益がある(可能性がある)
ことを書けや。。出来ないなら出て行け。

はっきり言わせてもらうと、おまえより賢いやつはこの板には沢山いる。
自分の間違いに気づけ。そして、勘違い発言を増殖させるな。

52 :nobodyさん:03/01/11 20:48 ID:L83LO6Ji
正規表現で、例えば<B></B>でくくられた部分をとってくるにはどう書けばいいでしょうか?
例えば、"<B>hoge</B><B>fuge</B>"
っていうので、hogeってとこだけをまず取りたいのですが、何も考えないで書くと
hoge</B><B>fugeが取れてしまって困っています。何か上手い書き方があったら教えて
下さい。
意味不明だったらすみません。

53 :nobodyさん:03/01/11 20:52 ID:???
>52
正規表現に最小のマッチングというのがある。
調べてみ。

それよりも"<B>hoge<B>hage</B>hige</B>"という文字列だったらどういう処理にするつもり?
それによってかなりやり方が変わるから。

54 :nobodyさん:03/01/11 20:59 ID:???
>>53
ありがとうございます!
調べた結果、?を一文字つけるだけで解決できました。

 入れ子構造になってるのは・・難しそうだから考えないようにしようかなと思ってます・・。

55 :54:03/01/11 21:02 ID:???
あ、でも、"<B>hoge<B>hage</B>hige</B>"というものに対して、
hoge<B>hage</B>higeが取れれば、やれることが広がるので、
上手く書く書き方がありましたら教えて頂けると嬉しいです。

56 :nobodyさん:03/01/11 21:12 ID:???
>それよりも"<B>hoge<B>hage</B>hige</B>"という文字列だったらどういう処理にするつもり?

タグでネストは無いと思いますが…。
# 閉じ忘れはあるかもしれないですが。

57 :nobodyさん:03/01/11 21:23 ID:???
>>56
<TABLE>の中に<TABLE>とか、<DIV>の中に<DIV>とか。

58 :nobodyさん:03/01/11 21:40 ID:???
>>57
おー、なるほど。
<div><p><div></div></p></div>とか、ありですね。

59 :9:03/01/11 21:54 ID:???
えと、
イロイロ調べた後に実験しました。

$$は、別に混雑してようとしてまいと関係なく、連打なら「1づつしか増えませんでした」
まだしっかりとsrandの性質を理解出来てないのかもしれませんが、やはりこれに原因があるのではないかと考えます。

で、皆様の書き込みを参考に以下の記述を作ってみました。

-----------------

if ($$ % 2 == 0) { srand(time); }
if ($$ % 2 == 1) { srand($$); }
#↑1づつ増えるた時に困るのだから、奇数か偶数によって変える。

$rand_a = int(rand(9999));
$rand_b = int(rand(9999));
$rand_aa = (time - $rand_a);
$rand_bb = ($$ + $rand_b);
#↑「time」と「$$」は、時間が近いととても似た数字になるため適当に変える。

srand($rand_aa ^ $rand_bb ^ unpack "%L*", `ps axww | gzip`);
#最後にこれを置いて完成。

---------------------

まだこれのテストはしてませんが、取り敢えず完成したので報告しに来ました。
また、問題な点があれば教えて下さい。



60 :nobodyさん:03/01/11 21:56 ID:???
>55
それはまた難しいぞ。
"<B>hoge<B>hage</B>hige</B>fuge</B>"の時はどうするかとか。
"hoge<B>hage</B>hige"でいいのか、"hoge<B>hage</B>hige</B>fuge"まで取るべきか。

>56
プログラマーはユーザーがどんな意表をついた入力をしても大丈夫なようにシステムを考えないといけない。
そういうところで気を抜くとセキュリティホールができたりしちゃうからね。

61 :nobodyさん:03/01/11 22:05 ID:???
すべての入力を、例外なく処理できないならば、それはバグである。
みんなが、まともなブラウザ、まともな思考回路を持っているとは限らない。

あと、一番忘れやすいのは、$ENV{HTTP_*}は汚染されているということ。
$ENV{HTTP_USER_AGENT}とかは特に。これをタグの無効化をせずにHTMLでの
出力に使ったりすると、クロスサイトスクリプティングちゅーやつが発生する。

62 :nobodyさん:03/01/11 23:05 ID:???
>>59
いやあのそのどのこの、srand を2回以上やっても(以下略^^;)

> if ($$ % 2 == 0) { srand(time); }
> if ($$ % 2 == 1) { srand($$); }
> #↑1づつ増えるた時に困るのだから、奇数か偶数によって変える。
1秒間に3回以上アクセスがあると、$$%2 == 0 の時は重複しまつ。ので却下(^-^*)

そもそも、time ^ $$ に問題があるので、この部分をえろえろと変えてみればどないでし?
例えば・・・
my $pid = $$;
srand((time & 0xFFFF) ^ (($pid << 8) | ($pid & 0x00FF) ^ 0xFFFF));
とか。
(65536通りの種。同位置時刻に複数アクセスがあっても、PIDを奇数と偶数バイトを入れ替えてからビット反転しているので、連続した種は256以上のアクセスが来たとき以外は出てこない。ん?あってるのか?)

ところでPerlに、ビットのローテートできる演算子ってあるのかな?無いのかな?

63 :nobodyさん:03/01/11 23:39 ID:???
>>62
びっとのローテートは >> << だよん。
$unko>>1 で、1さんに……じゃなくて、$unkoを右に1ビットシフト。空いたビットは0で埋め立て。

しかしまぁ、以前にも「完全な乱数は無理」ってレスがあったはずなのに、しつこいのがいるね。
コンピューターの作る乱数なんぞ「計算」で求めてるにすぎないのだから、いくら種を工夫した
ところで、分布に偏りができてしまうのは仕方が無い。


64 :9は必ず読むこと。:03/01/12 00:07 ID:pN++dQ77
/dev/randomを、Perlから使いたいなと思ってちょっと調べてみた。一番簡単な方法は、
Crypt::Randomになるのかな。他にもあるかも。

>>9にはこれをseedに使うことを勧める。ゲームのためにコストのかかる乱数
を作るのは、もったいないと思うけど。

それに、おそらく標準のrand()の線形合同法(?)の周期も気になるだろうから、
Math::Random::MT(究極の擬似乱数生成のモジュール)も併せて使っていただきたい。

FreeBSDなら、rndcontrolでIRQを設定しておかないと、/dev/randomのエントロピープール(?)
がなかなかたまらないから注意すること。

65 :nobodyさん:03/01/12 00:25 ID:???
>>64

open(MD5FILE,">$md5datefile");
my $data = "";
sysopen(RANDOM, "/dev/random", O_READ) || die "cannot open /dev/random $!\n";
sysread(RANDOM, $data, 16);
close(RANDOM);
print MD5FILE "$MD5DATE<>$data";
close(MD5FILE);
$md5->add($data);

bbs.cgi(2ch) での ID 生成ルーチンの中で、こんなことをやっているのがありますた。
参考程度に。

66 :nobodyさん:03/01/12 00:30 ID:pN++dQ77
あぁ。Math::Random::MTはseedに32bit以上の数を渡す事ができない・・
これでは満足できないでしょ。

67 :nobodyさん:03/01/12 01:35 ID:???
古いし、使った事ないけどMath::TrulyRandomはどう?

68 :貧乏パーラー:03/01/12 02:48 ID:???
perl式のお試し用read-eval-print。
rep.plとして作成
-----
while(<STDIN>) {
print eval($_)."\n";
print $@ if ($@);
}
1;
-----------
これで
perl rep.plで起動し
試したい式を入れれば評価結果が表示猿。


69 :nobodyさん:03/01/12 07:21 ID:???
>>58
> <div><p><div></div></p></div>
pはインライン要素のみ
とか、揚げ足とってみる。

70 :nobodyさん:03/01/12 11:57 ID:oJAGmVM6
my $a = 'これはグローバル変数です';

ってやったら、この$aは暗黙で $main::a と扱われるんだよね?
じゃあ

my $a = 'グローバル変数です';
for(0..10){
  my $a = 'これはfor内のローカル変数です';
}

ってやった場合、もちろんこのふたつの$aは区別されると思うけど、
forの外にあるのは $main::a
じゃあfor内の$aは何? これも暗黙のうちに $main::a になるの?

71 :nobodyさん:03/01/12 12:19 ID:tUI5W5YD
画像アップ掲示板を改造しているのですが、
フルパスからファイル名だけを取り出す方法が分かりません。
OSによって:\/など区切りが違いますけど
どうやって取り出せばいいのでしょうか?

72 :nobodyさん:03/01/12 12:21 ID:???
>>70
myで宣言した変数が$Package::varnameで参照できるの??
初耳だYO

73 :nobodyさん:03/01/12 12:25 ID:eJ8Igs3E
今ホムペつくってるんですけど、a.htmというページがあるとしてそこに5人
きてるとします、それでその人数を、b.htmに表示したいんです。
それでhttp://shena.myako.net/strangelady/cgijs/imakoko/imakoko.html
っていうのをみつけたんですがこれはa.htmにきている人数をa.htmにしか表示できないみたい
なんです、このスクリプトを変更してb.htmにでも人数を表示するということはできませんか?
もしそういうことができるなら誰かアドバイスください★


74 :nobodyさん:03/01/12 12:30 ID:???
>>71
$fullpath = 'c:\hoge/hoge:hoge\aaa.ccc';
($file) = $fullpath =~ m|([^:\\/]*$)|;
print $file;

75 :nobodyさん:03/01/12 12:40 ID:???
>>73
マルチで書き込むのはやめてYO

76 :nobodyさん:03/01/12 12:54 ID:pN++dQ77
>>70
our $a;なら、そうなる。

77 :9:03/01/12 12:57 ID:???
>>64

イロイロありがとうございます。
モジュールについても調べて(探して)みてます。
(英語に苦戦してますが…)

それと
>それに、おそらく標準のrand()の線形合同法(?)の周期も気になるだろうから、
これについても、testしてみましたが、そのようです。
わざわざご丁寧にありがとうございました。


日頃からほとんどモジュールを使わないのに加えて、複数調べているので理解に時間がかかりそうですが、
解決できそうな感じです。

とても勉強になりました。(イロイロな意味で)

78 :71:03/01/12 13:01 ID:tUI5W5YD
>>74
ありがとうございました。
無事取得できました。

79 :nobodyさん:03/01/12 13:12 ID:???
>>63
> $unko >> 1 で、1さんに……じゃなくて、$unkoを右に1ビットシフト。空いたビットは0で埋め立て。
いやあのそのそれだと「ビットシフト」なのではないかと(苦笑)
01001011 RightRoll.b ===> 10100101
なんて具合になるのがあればと(苦笑)@キャリーフラグが立ってもよい(笑)

> ところで、分布に偏りができてしまうのは仕方が無い。
それをどれだけうまく誤魔化せるかが思案のしどころですヨね(^-^*)

>>77
エロエロがんばってくらさいです(^-^)

80 :nobodyさん:03/01/12 13:28 ID:eJ8Igs3E
>>73
すみません。
マルチポストってマナー違反ってしりませんでした。
ごめんなさい。

81 :nobodyさん:03/01/12 13:34 ID:5wjAToqi
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://web2001.kakiko.com/koma/

82 :58:03/01/12 13:54 ID:???
>>69
まったくその通りでした。
<div><div><div></div></div></div>
<div><div><p></p></div></div>
等が正しいです。

83 :nobodyさん:03/01/12 14:09 ID:???
>>80

わかったらもうくんな低脳

84 :63:03/01/12 22:24 ID:???
>>79
うわっ!おっしゃる通り、シフトとローテートを勘違いしてますた!(恥ずかしい…)
ビット演算子を駆使すればローテートは実現可能だけど、あんまりスマートじゃない。
Perlにもキャリーフラグがあればなあ(w


85 :nobody:03/01/13 11:10 ID:CGEjRZ/e
初めまして。
質問させてください。

@a,@b,@cという3つの配列があり、全部の値をどの配列から渡されたかわかるように
1つの関数に渡したいのですが渡し方がわかりません。
なお、配列の要素数は場合によって変動します(0〜20程度)。

どなたか、上手い方法をご教授願えますでしょうか。

86 :nobodyさん:03/01/13 11:26 ID:???
参照で渡せば

87 :nobodyさん:03/01/13 11:27 ID:eXLsypXq






http://dx1.kakiko.com/sonota/335/3352/index.html






88 :nobodyさん:03/01/13 12:08 ID:???
>>85
my @a = ('A', 'B', 'C');
my @b = ('a', 'b', 'c');
my @c = ('11', '2', '3');

&abc(C => \@c, B => \@b);

sub abc
{
    my %abc = (
        A => undef,
        B => undef,
        C => undef,
        @_
    );
    print "@{$abc{A}}\n"; # undef
    print "@{$abc{B}}\n"; # a b c
    print "${$abc{C}}[1]\n"; # 2
}

89 :nobodyさん:03/01/13 12:24 ID:???
>>88
こっちの方が要望に近いのかな?

my @a = ('A', 'B', 'C');
my @b = ('a', 'b', 'c');
my @c = ('1', '2', '3');

&abc2('b', @b); # array=b a b c
&abc2('a', @a); # array=a A B C
&abc2('c', @c); # array=c 1 2 3

sub abc2
{
    my $ary = shift;
    my @abc = @_;

    print "array=$ary @abc\n";
}

90 :nobodyさん:03/01/13 12:53 ID:W4AV/IuU
>>89
それは違うじゃろ。

&hoge(@a, @b, @c);とかやって、混ざってしまうから、困ったんだと思う。

じゃあもう一つ提案。凝った事をしてあるのは、-wで怒られないようにするため
sub abc3 {
my ($a, $b, $c) = @_;

my @a = (ref $a ? @$a : undef);
my @b = (ref $b ? @$b : undef);
my @c = (ref $c ? @$c : undef);
}
&abc3(\@a, \@b, undef); #アドレスをそのまま渡す。参照渡し?
&abc3([ @a ], undef, [ @b ]); #コピーを作って渡す

91 :nobodyさん:03/01/13 13:20 ID:???
>>90
ぉぉ、なるほど!
-wオプション考慮も良いですね〜
勉強になりますm(_ _)m


92 :nobodyさん:03/01/13 14:26 ID:???
open で失敗した時に
open(〜)||〜;
で後者には $hogehoge = 1; とかは掛けないのでしょうか?
一応自分でやった限りは dieとexit と &hogehoge 等のサブルーチン
しか使えませんでした。

93 :nobodyさん:03/01/13 14:41 ID:???
>>92
||
じゃなく
or
をどうぞ

94 :nobodyさん:03/01/13 14:48 ID:???
>>92
ちなみに優先順位の違いです
open(〜) || $hogehoge = 1;

(open(〜) || $hogehoge) = 1;
となり
orは=より優先順位が低いので
open(〜) || ($hogehoge = 1);
と同じになります。。

95 :nobodyさん:03/01/13 20:39 ID:vdJkNLtH
質問させて下さい。
CGI_Lite.pmを使ってファイルのアップロードをさせたいのですがわからないところがあります。
$upload = new CGI_Lite;
、、、略
$filename = $upload->filter_filename(\&conv);
$upload->close_all_files;
%dat = $upload->parse_form_data;

でとりあえずファイルがアップロードされる事はわかりました。
<FORM ACTION="up.cgi" ENCTYPE="multipart/form-data" METHOD="POST">
<INPUT TYPE="text" NAME="Text">
<INPUT TYPE="file" NAME="File">
<INPUT TYPE="submit" VALUE="送信">
</FORM>
フォームの部分をこのようにしてみたのですが、この場合textに入力した文字はどのような処理がされるのですか?
一応$dat{Text}で取り出せることは確認できたのですが、Fileの方とは別の処理になるのでしょうか?
よろしくお願いします。

96 :nobodyさん:03/01/13 21:48 ID:7xzy2NEr
   ______________
 /:\.____\
 |: ̄\(∩´∀`) \  <先生!こんなのがありました!
 |:在  |: ̄ ̄ U ̄:|
http://saitama.gasuki.com/mona/

97 :nobody:03/01/13 23:16 ID:CGEjRZ/e
>>86,88,90
refを使えばいいのですね。

調べて使って行こうと思います。

質問の言葉が足りない中、正確に類推してくださった90さんには
格別の感謝を。
他の方々もありがとうございました。

98 :貧乏パーラー:03/01/13 23:31 ID:???
下を解凍できますか?
----ここから
_=_
_=_ Part 001 of 001 of file testdbi.zip
_=_

begin 666 testdbi.zip
M4$L#!!0````(`."Z+"YQ\[Y:G0```-,````*````=&5S=&1B:2YP;"V.L0K"
M,!"&]T+?X2@=4C!@=2P)*H*X.KAHD9I>24#2D*94D;Z[B>EP</]]W\$_#@C'
MP[E*D[Q]:I;O+Z?K;5W'+)E'E(M>:Q2.!&,5C;)>EDU=!'=PDH4'RHU%TU@D
M$6__6'5`@D(YOE&,#@OXI@E,4KV0[&P_L4@[=$+Z^&BL;3Y1`C!6:0=9\.XZ
MJ\)M3I,Y-J2\5<-2T*/2SP]02P$"%``4````"`#@NBPN<?.^6IT```#3````
M"@`````````!`"``MH$`````=&5S=&1B:2YP;%!+!08``````0`!`#@```#%
%````````
`
end

----ここまで


99 :yani ◆saNSktNEdQ :03/01/13 23:33 ID:ziR7v8Q2
自分でも考えてみたんだが、
$seed = unpack "%L*", md5(join '.', gettimeofday, $$, `ps axww |gzip`);
というのはどうだろう。
実用的にはには
$seed = unpack "%L*", md5(join '.', gettimeofday);
で十分なようで、こちらのほうが相当速い。

# Time::HiRes, Digest::MD5とも perl5では標準モジュール

問題は$seedが16bit整数になることだが、、、なぜだ???


100 :yani ◆saNSktNEdQ :03/01/13 23:34 ID:ziR7v8Q2
× # Time::HiRes, Digest::MD5とも perl5では標準モジュール
◯ # Time::HiRes, Digest::MD5とも perl5.8では標準モジュール

101 :90:03/01/13 23:35 ID:W4AV/IuU
あ。後で思いついたけど、間違えてハッシュのリファレンスとかを
渡しちゃうとコンパイルエラーになる・・。あと三項演算子の優先順位
をちゃんと理解していなかったから、無駄な括弧が・・

修正版:
sub abc3 {
my ($a, $b, $c) = @_;

my @a = ref $a eq 'ARRAY' ? @$a : undef;
my @b = ref $b eq 'ARRAY' ? @$b : undef;
my @c = ref $c eq 'ARRAY' ? @$c : undef;
}

102 :90:03/01/13 23:42 ID:???
で、やってること自体は88と同じ。自分は拡張性が低い方法を書いてるだけ。・・

103 :nobodyさん:03/01/13 23:43 ID:???
>>98
解凍でけたけど、できなくって困ってるのだったら
「できますか」なんてきくなよ。


104 :nobodyさん:03/01/14 00:21 ID:uaEPu1zE
画像ファイルをアップロードしたり書き換えたりする
プログラムを書いているのですが、
初めてアップロードする場合はよいのですが、
ファイルを書き換える(上書き)時、
どうも、ブラウザのキャッシュが悪さをしているようで
ファイル上では書き変わっているのに、ブラウザ表示上では
以前の画像ファイルが表示されてしまう事があります。
(この場合何度かリロードしないと本来のファイルを表示してくれません)

これを、書き換えた後はキャッシュを利用しないようには出来ないでしょうか?

105 :nobodyさん:03/01/14 00:25 ID:yqTa2j5Q
http://www6.ocn.ne.jp/~endou/index2.html

106 :yani ◆saNSktNEdQ :03/01/14 01:29 ID:HMXRNLis
>>99
事故レス
当たり前だった。

107 :貧乏パーラー:03/01/14 02:44 ID:???
>>98.103
長いスクリプト貼り付ける時つかったらて思いますがいかがでしょう?


108 :nobodyさん:03/01/14 02:49 ID:???
>>104
ファイル名にtimeのクエリを取り付けるとよかと。
(ただし、JavaScriptかSSIが必要)
読み込みたい画像が、
a20030114025535.jpg
だとするとき。
本来ならば、
<img src="a20030114025535.jpg" width="100" height="100" alt="img">
のところを、JavaScriptで排泄しる。
<script type="text/javascript"><!--
var T = new Date();
document.write('<img src="a20030114025535.jpg?' + T.getTime() + '" width="100" height="100" alt="img">')
// -->
</script>
など。
SSIならば、
表示させたいところに、
<img src="a20030114025535.jpg?time関数の値" width="100" height="100" alt="img">
を吐き出す .cgi を描く。

ブラウザの中には Pragma:no-cache 等を無視してくれよるのもおるから。

109 :104:03/01/14 03:54 ID:???
>>108
ほぉほぉなるほど!!
それならば、別ファイル(?)として扱われるわけですね。

HTMLのヘッダに
Pragma:no-cache
cache-control:no-cache
入れてまして、HTMLの方は非キャッシュOKだったんですけど
画像の方がどうもうまくいっておりませんでした。

今日は遅いので明日にでも試させて頂きますー。

110 :NOBODYたん:03/01/14 04:04 ID:???
蛇足。

>>85
関数を先に宣言するのであれば、
--
sub hoge(\@\@\@)
{
...
}
hoge(@a0, @a1, @a2);
--
と書いたとき、hoge(\@a0, \@a1, \@a2); と同じ効果を得られる。

たとえば、以下のように pop 関数を再実装することが可能。
(mypop(\@array) と書く必要はない。)
--
sub mypop(\@)
{
my $ar = shift;
my $last = $ar->[-1];
$#$ar--;
return $last;
}
$x = mypop(@array);
--


111 :nobodyさん:03/01/14 04:58 ID:/jKmOe0i
他鯖のhtmlを読むにはどうすればいいですか?


112 :nobodyさん:03/01/14 05:00 ID:???
socketとかconnectとかreadとか。

113 :NOBODYたん:03/01/14 05:44 ID:???
>>111

use LWP::Simple;
$html = get "http://www.perl.com/";

or

use LWP::UserAgent;
$html = wget("http://www.perl.com/");
sub wget
{
my $url = shift;
my $request = new HTTP::Request(GET => $url);
my $ua = new LWP::UserAgent;
my $response = $ua->request($request);
if ($response->is_success) {
return $response->content;
} else {
return undef
}
}

cf. http://search.cpan.org/author/GAAS/libwww-perl-5.68/

114 :nobodyさん:03/01/14 05:45 ID:KVuhYobl
MXなどで集めた動画をみんなでココにUPしよう!
http://www6.ocn.ne.jp/~endou/ten.html

115 :nobodyさん:03/01/14 06:42 ID:/jKmOe0i
>>113
ありがとうございます。
LWPを使って読めるようになりました。
作っているのは、よくある○○弁変換みたいな奴なんですが、
読み込むサイズによって過負荷になってしまいますよね。
サイズのチェック(一定量処理したらやめるような)は
どうすればいいのでしょうか。
Simpleのheadを使ってみたのですが
yahooさえcontent-lengthを返さないのでダメでした。


116 :111:03/01/14 06:53 ID:???
ん、UserAgentのmax_size([$bytes]) 、これでできそうですね。

117 :nobodyさん:03/01/14 07:19 ID:ea2A6+p/
>>115
あまりに時間がかかりすぎるようなら、サーバーが500を返して勝手に止まるから、
それでいいじゃねえか

118 :nobodyさん:03/01/14 10:37 ID:???
おいおい、過負荷で止まって「いいじゃねぇか」は
ないだろ。そういうCGIが増殖するから、あんまり
CGIがまともにつかえそうなところがなくなるんだよ。


119 :nobodyさん:03/01/14 10:39 ID:???
>>107
とりあえず貧乏パーラは人にものを頼むときに「お願いします」って
言うってことを覚えとけ。

ほれ、

$ cat testdbi.pl
use DBI;
$dbn=$ARGV[0];
$dbh=DBI->connect($dbn,$ARGV[1],$ARGV[2]);
$sth=$dbh->prepare($ARGV[3]);
if ($sth->execute) {
while(@row=$sth->fetchrow_array) {
print "@row\n";
}
}
$dbh->disconnect;
1;



120 :nobodyさん:03/01/14 13:10 ID:xMMJe1Uf
ハッシュのキーじゃなくて値でソートして、キーも値も出力したいんですけど
うまくいきません。

■スクリプトはこんな感じ
-------------------------------------
%hoge = ('unko' => 5,
'chinko' => 3,
'manko' =>9);

foreach my $k(sort{$hoge{$a} <=> $hoge{$b}}%hoge) {
print("$hoge{$k}" . "\t" . $k . "\n");
}
-------------------------------------

■出力結果はこんな感じ
-------------------------------------
9
3
5
3 chinko
5 unko
9 manko
-------------------------------------
いちおう値でソートしてくれてるんですが、目的の出力の前になぜか値の一覧が出てしまいます。
どうすればいいですか?( ´・∀・`)

121 : ◆PxAOHU.zVE :03/01/14 13:49 ID:pln/ogcF
>120
%hogeの前にkeysをいれる。


122 :nobodyさん:03/01/15 00:32 ID:AlO2VnQa
Image::Magick を使って画像を作っています。
せっかく文字出力ができるので、webdingsなどのフォントにある外字を
使おうと思ったのですが、文字の指定方法がわかりません。

普通の文字なら
$NEWIMG->Annotate( text=>'A', pointsize=>14, fill=>'#000000',
  x=>$posX, y=>$posY, font=>'img/ariblk.ttf' );

とやればいけるのですが、使いたい文字をアクセサリの「文字コード表」
から拾ってきても「?」になってしまいます。
文字コードはわかるからそこから指定できるのではないかと思いますが
その指定方法がわかりません。
どのように指定したらいいでしょうか?

123 :104:03/01/15 01:59 ID:???
>>108
無事非キャッシュ成功いたしました。
ありがとうございました。

124 :nobodyさん:03/01/15 02:08 ID:ybtk15GB
この子カワイイ
http://click.dtiserv2.com/Click5/1-45-2963

125 :貧乏パーラー:03/01/15 05:22 ID:???
>>119
ありがとうサンキューです。
それってどうやってやりましたか?

126 :貧乏パーラー:03/01/15 05:28 ID:???
DBD::PgPP使いました。
SELECTでフィールド8個以上をクエリするとエラーなります。
DBをMySQLにしてDBD::mysqlPPにしたらフィールド33個をクエリしてもOKでした
クライアント、DB共にWinXPです。
DBD::PgPPはこういう制限があるという事でしょうか?宜しくお願いします。


127 :nobodyさん:03/01/15 07:39 ID:???
$str = "1234";を最初の2文字"12"にしたいのですが、
どうすればよろしいでしょうか。

今は、chop $str;chop $str;でやっています。
VBAでいう、left(string,2)の様な関数?はありますか?

128 :nobodyさん:03/01/15 07:59 ID:???
substr($target_str,0,2)
VBAは良く知らんがN88BasicのMIDの感じだな。

129 :127:03/01/15 09:02 ID:???
>>128
サンクス

130 :nobodyさん:03/01/15 09:56 ID:2BGcsgzZ
>>126
作者日本人メール汁

131 :nobodyさん:03/01/15 10:22 ID:wVEDeB5S
管理人(私)だけが項目を設定し、来訪者に投票してもらう
という投票・ランキングcgiを設置しようと出来合いの探したところ
項目が140あるので検索機能がついたvote.cgiを探したところ、
ttp://www.c-5.ne.jp/~hamachan/cgihtm/jiten.htm
上記↑で配布されている「簡易データーベース」というものにたどり着きました。
プログラムが古いので
require './jcode.pl';
#-----------------------------------------------------------------
↑これの次の行に↓この一行を追加しました。
open STDOUT, '>-';
jcode.plも新しいバージョンに変えて、説明書きにあったとおり
「ずっこけ物知り辞典」という表示がページに出るところまでは
うまくいったのですが、実際に登録・検索しようとすると、
「ページが見つかりません」、との表示が出ます。
ちなみに、Tripodを使っています。

FTPソフトで見ると、cgi-binフォルダの中に
jiten.cgi、jcode.pl、jiten.docが入っていますが
jiten.docのファイルサイズは0になっています。
count.docファイルは生成されていないようです。

どこをどう改善すればよいのか、ご指導よろしくお願いします。

132 :nobodyさん:03/01/15 10:45 ID:???
>>131
データファイルを別ディレクトリにしてみたら?
TripodのCGI設置の説明をちょっと読んだけど、cgi-bin 直下に画像ファイルなどは
置けないとあるので、.cgi .pl 以外のファイルは全滅なのかもしれん。

あと、ここはPerlスレだからCGIに関する質問はできるだけ他のスレでやってな。


133 :131:03/01/15 11:00 ID:???
>>132
すみません、CGIスレに移動します。

134 :85:03/01/15 12:12 ID:lPFUjXcR
>>110,101
ありがとうございます。
参照は初級者向けじゃないみたいで、例文に参照以外の
わからない箇所が多いので地道に勉強中。

ソース丸写し以外で使えるよう頑張ります。

135 :山崎渉:03/01/15 13:31 ID:???
(^^)

136 :nobodyさん:03/01/15 14:07 ID:???
perlスクリプト中で
新たなPATHを追加したいと思ったんですけど
$ENV{'PATH'} .= ';c:\hogehoge';
ではうまく行きませんでした どうやればいいのでしょうか?

137 :nobodyさん:03/01/15 15:38 ID:5j+QQZeA
ご近所さんみたいなメール転送の仕組みを作りたいんですが...
色んなアカウントに送られてきたメールを片っ端からDBに登録したいのです。
なんかいい参考書やサイトを知りませんか?

よろしくおながいしますm(_ _)m

138 :vvv:03/01/15 15:42 ID:ZNHQB8hs
http://www6.ocn.ne.jp/~endou/index2.html
    ★YAHOOOプロフィール★

139 :nobodyさん:03/01/15 18:26 ID:???
>>137
スレ違い


140 :nobodyさん:03/01/15 19:13 ID:POOF/+eY
カテゴリで検索可能なサーチエンジンやリンク集などのデータファイルは、
下記の場合、どちらが効率的なのでしょう?

1.例えばデータファイルを一つにまとめ、
登録NO<>カテゴリ<>データ
などと登録する方法

2.データファイルをカテゴリ毎に、
data1.log
data2.log ・・・
等と1カテゴリで1データファイルとする。

一つのデータファイルにまとめるとファイルが大きくなってしまい、
カテゴリ毎に分ける方が良い様な気もするのですが、
実際の所はどうなのでしょうか?
サーバー付加の大小の観点からも御指導頂ければ幸いです。



141 :nobodyさん:03/01/15 20:20 ID:mlzRLcDE
@tbl[100][100];
じゃ二次元テーブルってできないのですか?
アルゴリズムを教えてください。

142 :nobodyさん:03/01/15 20:23 ID:???
>>141 自己レス
すいません、二次元配列で検索した直ぐに分かりました・・・
はぁ・・・容易にはできないのですね。がんばって作ります。

143 :58:03/01/15 21:20 ID:???
$tbl[100][100] = 'Hello?';
print $tbl[100][100];

144 :nobodyさん:03/01/15 22:04 ID:???
>>141
中身的にはリファレンスの配列になるけど、単にそれだけで使うなら
普通にそうやって書くだけで二次元配列になると思うが。

145 :144:03/01/15 23:45 ID:???
さすがに書けるよな…<連書規制に引っかかってた
リストの二次元配列だから面倒だわ、忘れてくれぃ。

146 :nobodyさん:03/01/16 07:53 ID:RDhobq0J
-$aaa=>[$bbb,$ccc]
っていうのがあるのですがこの"[]"は何をやってるのですか?

147 :nobodyさん:03/01/16 13:09 ID:???
>>141-146
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perllol.html
とにかく全部読め。話はそれからだ。

148 :nobody:03/01/16 19:36 ID:6WICp0JY
$bgcolor,$backgorundなどにはbodyタグで使用される文字が入っています(文字列が入っていることは確認済み)。
そこで、それらを結合するために

$body = '<body bgcolor="'.$bgcolor.'" background="'.$background.'" text="'.$text.'" link="'.$link.' " vlink="'.$vlink.'" alink="'.$alink.'">';

と書いたのですが、なぜか$bodyが空文字になってしまいます。
超初歩だとは思いますがどなたか解決法を教えてくださらないでしょうか。

149 :nobodyさん:03/01/16 19:43 ID:???
$body = qq(<body bgcolor="$bgcolor" background="$background" text="$text" link="$link" vlink="$vlink" alink="$alink">);

$bodyが消える理由はわからんが。
スコープ外とかいうオチじゃないかな?

150 :nobodyさん:03/01/16 20:00 ID:???
>>148
つうかなんのスクリプトよ。
話はそこからだろ?

151 :nobodyさん:03/01/16 20:46 ID:???
阿呆?

152 :nobodyさん:03/01/16 21:02 ID:???
>>148
つうかなんちゅうスクリプトの描き方だよ。
149氏のように書き換えてみてから実行して美奈代

153 :143:03/01/16 21:23 ID:???
>>147
ども、読破しました。
ところで@a->[1];の書き方ってありでしょうか。
素直に$a[1];と書けばいいんでしょうけど…。

154 :nobodyさん:03/01/16 21:31 ID:rmmrK9en
\{@a}->[1]

155 : ◆ZnBI2EKkq. :03/01/16 21:59 ID:4OjEZO2W
あるプログラムのHTTPヘッダ出力の部分で
my $expires = shift;
・・・
if($expires > 0) {
グリニッジ標準時の文字列を作って
}
print "Set-Cookie: ・・・
とやっているのですが $expiresには何が入って
どういう意味で使ってるかわかりません。
教えて下さい。よろしくお願いします。

156 :nobodyさん:03/01/16 22:27 ID:t/gkHHSA
>>155
expireの意味知ってますか?
クッキーの有効期限設定してるんだろ
expireなしなら、セッション間のみ有効なクッキー
CGIの話ね


157 :nobody:03/01/16 22:30 ID:6WICp0JY
>>149
ありがとうございました。
それをコピペしたら普通にできました。

原因はじっくり解明したいと思います…。

158 :nobodyさん:03/01/16 22:45 ID:Tl7JXy0h
mod_perl 用にソースを改造してんだけど、
ほとんどのサイトでは

use strict 使う
-w スイッチ使う
グローバル変数をなるべく使わないようにする
/o スイッチ使わない

くらいしか書いてない。
なのに、この通りやってもなんか銚子が悪い。

mod_perl で動かすときって何か他にやらなきゃいけないことってあるん?
例えば eval 使ってはだめとか、
オブジェクトはちゃんとDESTORYしないとだめとか。

159 :nobodyさん:03/01/16 22:49 ID:rmmrK9en
exitを使わない。require ... で読み込んだ物に注意する。

160 :nobodyさん:03/01/17 00:43 ID:???
ファイルをOpenして
その中にある hoge 言う文字がいくつあるかカウントしたいんですが
どうすればいいんでしょう?
open (HOGE,"hoge.txt");
?????
close(HOGE);

161 :nobodyさん:03/01/17 01:18 ID:???
>>160
hogeがどんな風に入っているかで変わってくる。

一つの行にhogeが0か1個しか入っていないことが保証されているならば、

open(HOGE, 'hoge.txt');
@hoge = grep { /hoge/ } <IN>;
close(HOGE);
$count_hoge = scalar @hoge;

全く保証されていないならば、

open(HOGE, 'hoge.txt');
$hoge = join('', <IN>);
close(HOGE);
$count_hoge = $hoge =~ s/hoge//g;

これでいいような気がする。

162 :nobodyさん:03/01/17 02:19 ID:???
$count += map {1} /(hoge)/g while <HOGE>;


163 :nobodyさん:03/01/17 02:32 ID:???
>>160
Cだとものすごく簡単だけど、Perlだとそんなに難しいのか?

164 :nobodyさん:03/01/17 15:03 ID:l3uVFji3
オブジェクト指向Perlを始めたのですが、
メソッド(サブルーチン)の引数が正しくない
(引数の数が正しくないとか、数字であるべきところが文字列だったとか)
の場合、どうすればいいのでしょうか?

エラーを表示?
エラーを返して終了?
単にreturn?


165 :nobodyさん:03/01/17 15:27 ID:???
>>164
エラーコードを返す。

166 :nobodyさん:03/01/17 15:34 ID:???
>>164
他人の書いたコードも見てみるといいよ。
あと、標準の Carp モジュールも調べてみたら。

167 :nobodyさん:03/01/17 18:46 ID:95w9V4FK
煮詰まっています。画像アップ掲示板を
設置しようとしています。
とりあえず入り口は出来たのですが、肝心の出口がどうやら設定がおかしい
ようで"画像をアップできません"とエラーが出ます。
恐らく下記の設定方法を間違えているのでエラーが出るのだと思います。

# アップロードディレクトリ
# → パスの最後は / で終わること
# → フルパスだと / から記述する
$ImgDir = "?????.hp.infoseek.co.jp/clip/img/";

# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "http://?????.hp.infoseek.co.jp/clip/img/";

色々調べたのですが、ここの部分だけハッキリ答えが出せません。
どうか出口の設定方法を教えてください。


168 :nobodyさん:03/01/17 19:00 ID:zt5lo6Y5
# に書いてあるとおりにやればいいんじゃ?
今どう設定してあってエラーでてるの?
てか何を悩んでるの?

169 :nobodyさん:03/01/17 19:01 ID:???
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
て書いてくれ。

下げてみるテスト(鬱

170 :nobodyさん:03/01/17 19:10 ID:mT3lwUSe
MAC OS10.2.3でFTPにアップロードするとファイルが
壊れて0バイトになってしまいます。
使用ソフトはTransmitとNetFinderです。
アップするファイルはCGIのためアスキーモードで転送しています。
でもファイルが壊れてしまいます。
9だとうまくアップできるんですが・・・
どなたか詳しい人教えて下さい


171 :nobodyさん:03/01/17 19:55 ID:???
>>160
my $str;
my $file = 'hoge.txt';
my $hoge_count = 0;

open TXT, $file or die $!;
read TXT, $str, -s $file;
close TXT;

while($str =~ m/hoge/g){
$hoge_count++
}
print $hoge_count, "\n";

172 :nobodyさん:03/01/17 20:06 ID:???
ログを追記式にしていたのですが
ファイルがかなり大きくなってきて
ファイルを全て読み込まず
ファイルの末尾から一行ずつ読み込みたいのですが、
どうしたらいいのでしょうか?

173 :nobodyさん:03/01/17 20:22 ID:???
>>172
無理です。日毎、週毎などでログファイルを切っていきましょう。

174 :nobodyさん:03/01/17 20:26 ID:???
でもtailみたいなプログラムもあるのですから可能なのではないですか?

175 :nobodyさん:03/01/17 20:27 ID:???
>>167
# アップロードディレクトリ
# → パスの最後は / で終わること
# → フルパスだと / から記述する
$ImgDir = "/clip/img/";

# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "/clip/img/";

で、いんでないの?

>>170
丸痴君ね。
http://pc.2ch.net/test/read.cgi/mac/1042606577/267

>>172
過去ログに似たようなのがあったような記憶が・・・

176 :nobodyさん:03/01/17 20:30 ID:???
>>174
んぢゃ tail を使う。
print `tail -n $num logfilename`;

177 :173:03/01/17 20:31 ID:???
>>174
tailを知っていたのなら、ソース読んじゃえばいいのに。
全部読み込んでいるよ。まあ、細かく言えばPerlのようには
読んではいないけど、全てを読み込まないのに最後を知る
方法はないです。


178 :nobodyさん:03/01/17 20:44 ID:GSBryIjf
>>177おまえはあほか。seekすれば、読まなくても飛べる。あと、便利なモジュールがある。File::ReadBackwards

179 :173:03/01/17 20:47 ID:???
seekは読み込んでいないとでも?


180 :nobodyさん:03/01/17 20:56 ID:GSBryIjf
場所を指定しただけ。読むっていうのはもちろん中身を読み込むって意味でしょ?




181 :175:03/01/17 21:02 ID:???
訂正:
# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "$ENV{'HTTP_HOST'}/clip/img/";
スマソ

ってこれでいいのか?(スクリプトが別鯖にある場合は不可)

182 :143:03/01/17 21:12 ID:???
>>154
その文だと{}で無名のハッシュをつくり、
\でリファレンスしませんか?
(\@a)->[1];がまっとう(?)ですので、@a->[1];は使うべきでは無いようですね。
ありがとうございました。

183 :nobodyさん:03/01/17 23:05 ID:???
>>165-166
レスありがとうございます。

にしてもOOP Perlはサパーリ和歌欄買った。

184 :173:03/01/17 23:14 ID:???
>>180
指定して飛ぶときに、全然読んでないわけ?OSも


185 :nobodyさん:03/01/17 23:14 ID:xM0Mt5EA
PerlでもRubyでもそうだけど、
class Person {
 int age;
 String name, tel;
 URL homepage;
}
みたいなメンバ変数の型みたいな考え方無しのオブジェクト指向って
のが理解できなくて立ち往生してるのですが、どうやればすんなり
受け入れられますか?

186 :nobodyさん:03/01/17 23:18 ID:???
173ってちょと臭わない?
全角英字DQN?

187 :超初心者:03/01/17 23:28 ID:sm0odS2/
初めてCGIを使おうとしているものですが
配布のものを使おうとしたらうまくいきません。
ランキングのCGIなのですが

# IN投票の際にカウントを認めるREFERER値 (以前のページのURL)
$check_referer1 = 'http://meso.tv/r/rank.cgi';
$check_referer2 = 'http://meso.tv/r/rank.cgi';
$check_referer3 = 'http://meso.tv/r/rank.cgi';

のURLの部分にはどういうURLを入れたらいいのですか?

188 :nobodyさん:03/01/17 23:37 ID:???
>187
そのCGIスクリプトの説明を読むか。
配布されているサイトで聞いてください。
ここはPerlのコーディングの話をするスレッドです。

189 :nobodyさん:03/01/17 23:43 ID:???
>>185
多重ハッシュに慣れろ

190 :超初心者:03/01/17 23:55 ID:???
>>188
説明書にも何も書いていなくサイトの管理人にメールを出したけど
返事がずっとないんで…

191 :nobodyさん:03/01/17 23:57 ID:???
Perlは分かるの?
親切な人が説明してくれても分からなかったらしょうがないでしょ。

192 :185:03/01/18 00:07 ID:???
>>189
例えば
$self->{'age'}
って変数があっても、
$self->{'age'}='nobodyさん' とか $self->{'age'}='http://www.2ch.net'
ってすることができるわけで、
いくつかモジュールを読んでみたけど
たんにメソッドの詰め合わせ的な意味しかないようが気がするんです。


193 :nobodyさん:03/01/18 00:20 ID:O9FxKTGG
来客者は書き込めるが、他の来客者が書いたものは見られないようなcgiってありますか?

194 :nobodyさん:03/01/18 00:22 ID:???
>193
探すだけならスレ違い。
ここはコーディングの相談所。
>1読め。

195 : ◆PxAOHU.zVE :03/01/18 01:56 ID:55Z6A3Vx
>>185
5.8のAttributeってまだ使えないのかな...
このへん?
http://search.cpan.org/author/ABERGMAN/Attribute-Handlers-0.78/lib/Attribute/Handlers.pm


196 :nobodyさん:03/01/18 08:30 ID:eKp44Q6B
>>185
Perl6 で型が出来るだろ。
それでいいじゃないか。

197 :びびった:03/01/18 09:14 ID:x+/Sd8AA
俺の彼女がこんなとこに・・・
http://click.dtiserv2.com/Click/1-45-2963


198 :nobodyさん:03/01/18 14:51 ID:???
perlプレビュー機能のあるエディタってありますか?
perl Builderぐらいしかないのでしょうか?

199 :HOGE:03/01/18 15:51 ID:5ALQn0gp
以下のようなことをやりたいのですが、うまくいきません。
とても困っています。どうすれば良いか教えてください。
#!usr/local/perl
#in hoge.cgi
my $hoge = 'hoge';
require './hoge.tmpl';

#in hoge.tmpl
print <<HOEG
Content-type: text/html

<h1>$hoge</h1>;
HOGE
1;

200 :nobodyさん:03/01/18 15:56 ID:???
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

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


201 :HOGE:03/01/18 16:05 ID:5ALQn0gp
1:冗長なフォーマット部分を別のファイルにしようと思いマスタ。
2:Webで調べていると、require文を使えば、
「その場所にかかれているかのように
スクリプトを取り込むことができる」と知りました。
3:でも、$hogeの部分は空のままです。
require文の解釈が間違っていることは自覚しています。
名前空間のせいで、変数が受け渡されていないのかもしれません。
しかし、今の私には具体的にどうすればいいかがわかりません。
質問に2レスもつかってすみません。どうか教えてください。

202 :vvv:03/01/18 16:09 ID:+GEyyv8c
http://www6.ocn.ne.jp/~endou/index2.html
     ★YAHOOOプロフィール★


203 :nobodyさん:03/01/18 16:28 ID:???
>>201
our $hoge = 'hoge';

print <<HOGE;

204 :nobodyさん:03/01/18 17:08 ID:lJXENDzT
質問です。
和鳥の無料WebスペースにCGIのカウンタを置こうと思い、探して来ました。
見つけてきたそのCGIは、説明書きによるとcgi-bin以下に画像ファイルを置いて、
それを引っ張り出してくるものらしい。
けど、和鳥には、「セキュリティ上の都合から、cgi-bin以下に画像ファイルを置いても
表示されないので、別の場所に置いてくれ。」との旨が書いてあり、そのままではうまくいかなかった。
そこで、画像ディレクトリを別の場所へ移したわけなのですが、、、えーと、そしたら
「$imgdir = './Gif/';」の部分は、このままではダメなのでしょうか?
試しにそのままやってみたらエラーになったので、省略せずにURLそのまま入れてみたりしたのですが、
やはりだめでした。
画像自体はちゃんとうpされていたので、私的にはその部分になにか間違いがあるのかなと
思ったのですが。。
どしたら良いでしょうか。すいません、どなたか教えて下さいです。

205 :nobodyさん:03/01/18 17:11 ID:???
>204
1:パスが間違っている(HTMLの勉強しろ)
2:パーミッションが間違っている(パーミッションの勉強しろ)
3:そもそもperlの話じゃないからココではスレ違い(常識を勉強しろ)
4:配布元か、和鳥スレで聞け

206 :nobodyさん:03/01/18 17:15 ID:???
>>199
#!usr/local/perl も不安といえば不安だな

>>204
URLで入れたら動きそうな気がするが、大文字小文字は間違ってない?
ここで言ってるURLは http:// から始まるやつね

207 :204:03/01/18 17:25 ID:lJXENDzT
>>205
スイマセン スイマセン スイマセン

>>206
ありがとです。
んー、でも大文字小文字はあってるような。。

208 :204:03/01/18 17:26 ID:???
下げ忘れてしもた。。ごめんサイ。。

209 : ◆PxAOHU.zVE :03/01/18 19:16 ID:???
>>164
エラーフラグ立てた上で、オブジェクトを返しておいて
is_error,error_message等のメソッドを用意するってのは?


210 :nobodyさん:03/01/18 22:39 ID:???
>>206-207
CGIが画像ファイルを直接読むんだろ。URLじゃ駄目に決まってるじゃねーか。

211 :nobodyさん:03/01/18 22:42 ID:???
>>210
最低でもSocketか。

212 :nobodyさん:03/01/19 00:27 ID:???
>>208
質問はageで

213 :nobodyさん:03/01/19 06:35 ID:5v4SEFP4
配列についてなのですが、配列名に変数って使えないのでしょうか?
@hoge$iっていう配列を使いたいのですがうまくいきません。

214 :nobodyさん:03/01/19 06:49 ID:???
>213
@{$i}

215 :nobodyさん:03/01/19 08:10 ID:???
>>213
$hoge[$i]

216 :nobodyさん:03/01/19 08:26 ID:???
>213
@{"hoge$i"}

217 :nobodyさん:03/01/19 14:09 ID:???
シンボリックリファレンスだから、use strict;してたら、動かない。

その場合、これを書くとエラーが出なくなる
no strict 'refs';

218 :貧乏パーラー:03/01/19 14:37 ID:???
>格闘してやっとけりついたよ。どんな事したか以下の通りです。
>-----------------------------------------------
>・読み出しも外部からのインクルード式で可能とした
>・処理速度向上策バイトコード化した一連の定義を繰り返しで処理から
> do{}でそれぞれくくって一つのブロックとして一気にバイトコードに展開版に変更。
>・出力スキップSWにて定義中の式の組み方でコンバートバージョンにも出来るcnv.txt
> ○のオーダはXXXX.txtで処理する。
> 前回俺が出した集計項目も網羅して7日間のデータを/m指定で
>各人分散し集計を起動する事にする.
>その間に出力CSVを合成するツール作成の事。(Excelでやれってかぁ?)
>-----------------------------------------------
>て訳で連日プログラムして疲れたよ。今晩ラーメンでも食べに行こうか?

何をやったのかさっぱりだけど、、、
なんか私には解らない凄いプログラム作ったのかな?
でも歳も歳なんだから無理しないようにね!
ラーメンか〜良いね。でも肉が食べたいな〜
わがままです。。。

219 :質問させてください。:03/01/19 15:30 ID:???
状況:現在、オリジナルのCGIを書いています。
CGI::Liteを継承して、より直感的なクエリ取得を行えるモジュールを書こうとしているのですが、
キーと値が対になっていないクエリに対応する部分で困っています。

通常、クエリは正規表現風に書くと、m/KEY=VALUE(&KEY=VALUE)+/
という形式になっていると思うのですが、
http://localhost/cgi-bin/hoge.cgi?KEY=VALUE (通常のケース。無問題)
http://localhost/cgi-bin/hoge.cgi?VALUE

この二番めのケースで、簡単にVALUEを取得する方法がわからないのです。。。

とりあえず、「パラメータが一種類で値が無いケース」を想定し、
以下のようにやってみました。
(前略)
my $param = $this->parse_form_data();
my @key;
print $key[0] if (((@key) = (keys %{ $param })) == 1 && $param->{$key[0]} eq '');

ただ、これだと
http://localhost/cgi-bin/hoge.cgi?VALUE
http://localhost/cgi-bin/hoge.cgi?KEY=
二つのケースに反応してしまうため、望んだ結果にはなりませんでした。
何かKEYと対になっていないVALUEを取得するための、
スマートな方法はありませんでしょうか。

220 :nobodyさん:03/01/19 16:17 ID:???
if ($ENV{QUERY_STRING} !~ /=/) {
...
}

221 :219:03/01/19 16:23 ID:???
>>220さん回答ありがとうございます。できました。うれしいです。

222 :nobodyさん:03/01/19 17:24 ID:???
いや、適当に考えただけだけど、これくらいしか手段が無いような気がするから・・

223 :nobodyさん:03/01/19 17:26 ID:YTKbQL3j
すいません質問させてください。
サイトA(私が作成するサイト)にあるCGIページにアクセスすると
別のサーバのサイトBにあるファイルをそのまま読み込んで表示するCGIを作ろうと
しています。
(もちろん、サイトBの管理者の許可はあります。)
その準備として次のものをつくったのですが、
ローカルで実行するとうまくいくのですが、サーバーにアップすると動きません。
ローカルホストのところを
自分のPCのものにしても、サイトAのホスト名をいれてもうまく動きません。
原因がわかるでしょうか?
お願いいたします。

#!/usr/local/bin/perl

use Net::hostent;
use Socket;

$lodalhost='hogehoge.ne.jp';#ローカルホスト名
$remotehost='www.xxxx.com';#リモートホスト
$page = 'http://www.xxxx.com/index.html';#得たいページのURL

224 :続き:03/01/19 17:26 ID:YTKbQL3j
#接続を確立し、ファイルハンドルSHに繋ぐ。
$lh = gethost($localhost);
$rh = gethost($remotehost);
$proto = getprotobyname('tcp');
socket(SH,AF_INET,SOCK_STREAM,$proto) or print "error\n";
$port = getservbyname('http','tcp');
$socket_template = 'S n a4 x8';
$localhost_port = pack($socket_template,AF_INET,0,$lh->addr);
$remotehost_port = pack($socket_template,AF_INET,$port,$rh->addr);
bind(SH,$localhost_port) or print "error\n";
connect(SH,$remotehost_port) or print "error\n";
select SH;
$|=1;

print SH "GET $page\n";#GETをつかってリクエストを送信する。

#得られたページの内容を@HTMLに代入する
while(<SH>){
push @HTML,$_;
}

close SH;

select STDOUT;

foreach(@HTML){
print $_;
}

exit;

225 :貧乏パーラー:03/01/19 17:47 ID:???
>>224
>print SH "GET $page\n";#GETをつかってリクエストを送信する。
少なくともリクエストヘッダの終了は\n\nで終わらなきゃならいないと思うが

ちなみに他のヘッダ情報は要らないのかな?

GET /test/read.cgi/company/1034689226/l50 HTTP/1.0
If-Modified-Since: Mon, 13 Jan 2003 17:35:10 GMT
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.m
s-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: ja
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: tmp.2ch.net



226 :貧乏パーラー:03/01/19 17:51 ID:???
>>225 補足
例えば2chのちくり板のサーバはGETリクエストヘッダのHost:や
POSTのRefere:中のホスト名をチェックしているからね。

227 :nobodyさん:03/01/19 18:20 ID:xgcJy6Dh
聞くべきか悩みましたがすみませんが質問させていただきます。
cgiの画像アップ形式掲示板ってありますよね?
サーバーの容量もあるとは思いますが、大体みなさん設置
するに当たって"最大投稿データ量"ってどれくらいに設定されてますか?
後"最大投稿数"はどれくらいで適切なんですか?
変な質問ですみません。



228 :bbb:03/01/19 18:44 ID:TK7ESc1C
http://www6.ocn.ne.jp/~endou/index2.html
         YAHOOO情報

229 :nobodyさん:03/01/19 22:30 ID:???
>>227
ここが何のスレか分かってる?


230 :nobodyさん:03/01/19 22:37 ID:hs+tYJ37
データベース系のCGIをwakwakサーバに設置したいのですが、
cgi-binの中にhtmlファイルを入れると呼び出すことができません。

また、public.htmlの下にhtmlファイルを置き、cgiからのパスを修正しても"ファイルがオープンできません"とでます。

こういうサーバではhtmlを使うcgiは置けないのでしょうか?

231 :nobodyさん:03/01/19 23:23 ID:???
>>230
スレ違い

ここはCGIの質問スレではありません。


232 :nobodyさん:03/01/19 23:44 ID:???
あくまでwebProg板の中のPerlスレだろ。
PerlをつかったCGIならCGIの質問だってOKだろ。
PerlからMySQL呼び出してどーこーするのっていいんじゃないの。

まぁ230の質問はPerlともCGIとも直接関係なさそうだが。

233 :おながいします。:03/01/19 23:56 ID:tLwHArOB
初心者の私めに諸先輩方の御教授願います。
localhostではちゃんと起動するのですが、niftyのサーバに上げると
自分がスクリプト内で指定したメッセージ、
「現在投稿ができない状態になっております。」
が出ます。絶対パス($targetfile=以下) の書き方が悪いのでしょうか?
この箇所は考えられ得る色々な書き方(URLにするとか)で書き替えて
試しましたがダメでした。
問題点を教えて頂ければ幸いです。
ちなみにhomepageというのはniftyのホームページ設置ディレクトリ名です。
下のスクリプトはもちろん関係箇所だけですがその途中も省略しています。

#!/usr/local/bin/perl

$|=1;
require "cgi-lib.pl";
$date = localtime;
$workdir = "/temp/";
$targetfile = "/homepage/messageboard/1.html"; #絶対パス
$guestbookurl ="http://homepage2.nifty.com/aaabbbccc/messageboard/1.html";

$body = $in{'body'};
$name = $in{'name'};
$mail = $in{'mail'};
(略)

open WORKF, ">$tempfile"
or &CgiDie("現在投稿ができない状態になっております。");
open GUESTBOOK, "<$targetfile"
or &CgiDie("現在サーバが投稿を受け付けません。");



234 :nobodyさん:03/01/20 00:04 ID:???
>>230
wakwakのページをみると、imageファイルはpublic_htmlの下に置くようにって書いてあるね。
htmlでもいけそうな気がするけど、もし画像ファイルしかCGIから読み出せないってことなら
そのhtmlを画像ファイルの拡張子に変えてみたら?
それでダメだったら問題は他にあるってこと。

>>233
ちゃんとソースみてないけど、ディレクトリのパーミッションの問題じゃない?

235 :おながいします。:03/01/20 00:26 ID:???
234さん、お返事ありがとうございます。
ディレクトリのパーミッションも変更してみましたが、以前同じ
エラーメッセージが出てしまいます。
あ、ちなみにさっき書いたスクリプトで省略してしまった所があるの
ですが、それは
$tempfile = $targetfile;
$tempfile =~ s/[:\/\\]/_/g;
$tempfile = $workdir .$tempfile . $$ . ".tmp";
です。宜しくお願い致します。<(_ _)>

236 :nobodyさん:03/01/20 01:00 ID:???
ファイル名が14バイト制限を受けているとか。
それはないか…。

237 :nobodyさん:03/01/20 01:07 ID:???
niftyってルートに独自ディレクトリ作って
OKでしたっけ?

$workdir = "./";
にしてみるとか。

238 :nobodyさん:03/01/20 01:46 ID:???
>>233
$tempfile の最終形をみてみる。

すたぁと。
$targetfile = "/homepage/messageboard/1.html"; #絶対パス
$workdir = "/temp/";

$tempfile = $targetfile;
#$tempfile = "/homepage/messageboard/1.html";

$tempfile =~ s/[:\/\\]/_/g;
#$tempfile = "_homepage_messageboard_1.html";

$tempfile = $workdir .$tempfile . $$ . ".tmp";
#$tempfile = "/temp/_homepage_messageboard_1.htmlPID.tmp";
#PIDはプロセス番号

>>237 氏の仰有るとおりにしると、
#$tempfile = "./_homepage_messageboard_1.htmlPID.tmp";

とりあえず。

239 :nobodyさん:03/01/20 15:53 ID:emhs1xha
初歩的な質問かもしれませんが、よろしくお願いします。
あるファイルoutput.txtの内容が次のようだったとします。
02あいうえお
01あかさたな
00かきくけこ
このファイルの先頭に1行つけたして、
03たちつてと
02あいうえお
01あかさたな
00かきくけこ
としたいのですが、どうすればいいでしょうか?
ファイルの末尾に付け足すのはかんたんなのですが・・
seek(OUT,0,0);をやて書き込んでも、一部、上書きになって
消える部分があるし 困っています。

240 :nobodyさん:03/01/20 16:00 ID:???
>>239
unshift

241 :239:03/01/20 16:05 ID:emhs1xha
>>240
ありがとうございます unshiftを調べたところ
配列を扱うもののようです。いったん配列に取り込まないと
いけないということでしょうか?そうだとすれば
while(<IN>) {
$mes .= $_;
}
print OUT $newmes . $mes;
とするのと同じで、メモリをくってしまいますので、
だめっぽいです。

242 :nobodyさん:03/01/20 16:39 ID:???
>>241
$txt = 'output.txt';
$tmp = 'output.tmp';

open TXT, '<' . $txt or die $!;
open TMP, '>' . $tmp or die $!;
print TMP $new_line;
print TMP $_ while <TXT>;
close TMP;
close TXT;
rename $tmp => $txt or die $!;

243 :nobodyさん:03/01/20 16:39 ID:???
>>239
この質問は過去に何度か出ていた気がする。
その時の回答は確か
*書きこむ時は普通に追記して、読み出すときにreverseかける
*テンポラリファイルを作ってリネームする
の二つ。
前者は読み出す時に配列に入れなきゃならないし、
後者は排他制御が面倒な予感。
もっと良い方法があるなら俺も知りたい。


244 :nobodyさん:03/01/20 16:39 ID:???
>>239
output.txt.tmp を新規作成する。
output.txt.tmp に新たな1行のみ書きこむ。
output.txt を読み込む。
output.txt.tmp に追加書き込みする。
output.txt を削除する。
output.txt.tmp を output.txt に名前変更する。

ただし、output.txt.tmp がすでに存在するときは上記の操作を行わない。

で、どうだ!?

245 :nobodyさん:03/01/20 19:16 ID:gSzazTge
>>244
少し間違ってるなぁ。
削除する必要はない。削除するとファイルが存在しない時間が少し発生するから良くない。

それから、存在チェックと書き込みは同時には行われないから、
O_EXCLを書いてopenするといいかもしれない。ファイルが存在したら失敗とする。

この方法の問題点は、中途半端な状態で残ったoutput.txt.tmpをどう扱うか、にある。

246 :nobodyさん:03/01/20 19:43 ID:8rfuT7oA
ファイル中の文字数を数えようと思い、次のように書きましたが、全角が2文字部としてカウントしてしまいます
半角全角問わずに一文字ずつ数えたいのですがどうしたらいいでしょうか
foreach(<LOG>){
@str1 = split //,;
$total += @str1;
}

247 :劉邦:03/01/20 20:09 ID:QoYi51kG
良いperlの入門サイト教えてください。

248 :nobodyさん:03/01/20 20:10 ID:???
>>247
ここ。

249 :nobodyさん:03/01/20 20:53 ID:???
>247
検索して探せ。
いいか悪いかは自分で見て判断するしかない。
他人にいいサイトが自分にいいとは限らない。

>248
入門は別のところでしてほしいぞ。
HellowWorld!から教える気か?

250 :劉邦:03/01/20 20:54 ID:QoYi51kG
http://www.wakhok.ac.jp/~kida/program/perl/node81.html
のサイトの問6.2はどうやるんですかね・・?address.txt.つくって
実行してみたんですけど、アドレスが表示されないんですよね・・・
我慢できなくなって、解答を参照したところそう違いはなく、その
解答をコピーしてやってみたんですが、それもうまくいきません。
何が原因だと思いますか?

251 :nobodyさん:03/01/20 21:29 ID:???
>>250
とりあえず藻前の書いたスクリプト書いてみ。
ちなみに解答そのままだと、address.txtからは読めないぞ。

252 :nobodyさん:03/01/20 21:48 ID:???
>>250
解答が1つしかないのが気にいらないなぁ・・・
無駄でももっといろんな解法があると思うのに。

253 :nobodyさん:03/01/20 21:56 ID:???
>>250
解答ではaddress.txtを標準入力から読み込むようになってるから、
単体で動作させたいときはファイルから入力するように修正しないといけないよ。


254 :劉邦:03/01/20 22:12 ID:QoYi51kG
入力といったら<STDIN>しか、知らないのですが・・・
例えばどんなものがあるのですか?


255 :劉邦:03/01/20 22:20 ID:QoYi51kG
標準入力から直接入力した場合はちゃんと機能するようですが・・・

256 :251:03/01/20 22:27 ID:???
>>255
ファイルオープンしてごにょごにょ。そのページだと9かね。
ま、一通り読んでみ。

257 :劉邦:03/01/20 22:30 ID:QoYi51kG
9すか・・?!
入門者に対するイジメじゃないですかね・・・(^-^;A

258 :nobodyさん:03/01/20 22:31 ID:qfdWUXSE
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/hiroyuki/

259 :劉邦:03/01/20 22:39 ID:QoYi51kG
入門サイトかえることにしますた。

260 :nobodyさん:03/01/20 23:43 ID:???
しかし、このページって著作権とか大丈夫なんかねぇ?
初めてのperl第一版そのままっぽいんだけど翻訳元とか全く書いてないし
訳されたと言う日付の時点で既に第二版すら出版されてるわけだが。

というわけで、サイトの中身そのものはそう悪くないぞ。
れっきとした書籍のほとんどそのままだからな(笑)
ま、当然本屋で本物を買ってきた方が良いけど。三千円ね。

261 :nobodyさん:03/01/21 00:39 ID:???
>>260
てか、今更Perl4もねえだろ。使ってる鯖が古いならともかくさ。
本気でやろうと思ったら、最新の駱駝を買うのが一番だろ。

262 :nobodyさん:03/01/21 01:23 ID:S5Xqr2nK
質問があります。
お答えしてくれるとうれしいです。

開催日に合わせて発売するというものを作ってまして
時間チェックでわからなくなってしまいました。
発売前・中・締切と時間でフラグを立てて制限したいのですが
頭がこんがらがってなかなかできません。
$buyflag [0:発売前] [1:発売中] [2:締切]

現在の時刻をそれぞれ
[分:$min] [時:$hour] [日:$mday] [月:$mon] [年:$year]
とし、開催日時のデータを@daydataという配列に
それぞれ年[0]、月[1]、日[2]、時[3]、分[4]として入れています。

開催日時のちょうど3日前に発売開始[1:発売中]でそれより前は
[0:発売前]、開催日時の1時間前に[2:締切]としたいのです。

どなたか教えてくださいませんか?

263 :nobodyさん:03/01/21 02:02 ID:???
>262
わからなくなったら、紙に書いて整理しな。
頭の中だけでやろうとするからわからなくなる。

ここで質問したいなら、ソースくらい出しなさい。

264 :nobodyさん:03/01/21 02:09 ID:???
>>262
日時は2桁で揃えられていると仮定して、

$opoentime = join("", @daydata);
$nowtime = "$year$mon$mday$hour$min";

if($opentime - $nowtime < 100){ $buyflag = 2;}
elsif($opentime - $nowtime < 30000){ $buyflag = 1;}
else{ $buyflag = 2;}


んーむ、感覚的に殴り書きヽ( ´ー`)ノ





265 :nobodyさん:03/01/21 02:11 ID:???
あ、変数名一部間違えてますな
失礼しました。

$opoentime = join("", @daydata); → $opentime = join("", @daydata);

266 :nobodyさん:03/01/21 02:12 ID:???
http://pc.2ch.net/test/read.cgi/php/1042260745/
の 1042260745 ってなんて言うんだっけ?>time();
これ使ったらなんも考えることないっしょ

開催日時 $tt = timegm(hoge);
発売開始 $tt - 60 * 60 * 24 *3

267 :nobodyさん:03/01/21 02:23 ID:???
>>246
JPerl使わないとムリじゃない?

268 :nobodyさん:03/01/21 02:43 ID:???
      ,一-、
     / ̄ l |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ■■-っ < >>267 んな こたァない
    ´∀`/    \__________
   __/|Y/\.
 Ё|__ | /  |
     | У..  |

269 :nobodyさん:03/01/21 05:29 ID:???
>>246
Perl ver5.8をインストールする。ActivePerlならbuild804.
以下は漢字コードをShift_JISとした例。
---^ t.txt
123456
---$
my $count;
open my $file, "<:encoding(Shift_JIS)", "t.txt";
while (<$file>) {
chomp;
my @char = split//;
$count += scalar(@char);
}
print $count,"\n";

270 :nobodyさん:03/01/21 07:25 ID:???
質問です
if($a =~ /(aaa|bbb)/){⊂}
と同じように
if($a eq /(aaa|bbb)/){⊂}
という書き方はOKでしょうか?

271 :nobodyさん:03/01/21 07:35 ID:???
>>270
NG。
正規表現の部分が、上は $a を評価するのに対して、下は $_ に対して評価した値と
$a を文字列として比較するので、わけわからん結果になる。


272 :za:03/01/21 10:02 ID:???

EUCの日本語を、Unicodeの数値参照コード(???????;)に変換する
モジュールは無いでしょうか? それともUnicode-Japaneseで可能でしょうか?

273 :za:03/01/21 10:05 ID:???
>数値参照コード(???????;)

失礼。「&#??????;」です。(^^;

274 :nobodyさん:03/01/21 12:45 ID:f7zzet+E
本(BBS RE-DESIGN BOOK)にのっていたとおりに
掲示板を作ったつもりなのですが、設置できても文字化けしてしまいます。
ブラウザで自動判別をしてもEUCを判別してもらえず、
手動でEUCにエンコードしないと書き込みが見えません。
本当に初心者なので、どこが悪いのかもわかりません。
書き込みが文字化けせずに見える方法はありますか?
作成したソースは
http://mc6800.dyn.dhs.org/UP_LOADER/UPFTP/IMG/MC6800P_253.txt
にあります。よろしくお願いします。

275 :herm:03/01/21 13:07 ID:???
>>274
そのスクリプトが入ってるdirectoryに
「AddDefaultCharset EUC-JP」と書いた「.htaccess」を入れるとか。

276 :274:03/01/21 13:13 ID:f7zzet+E
>275
いれてみたら出来ました!本当にありがとうございました!

277 :246:03/01/21 14:09 ID:NhrI/baV
>>269
できました!!
jcode使ったりいろいろ悩んだのですがこれで解決しました。ありがとうございました。

278 :nobodyさん:03/01/21 15:01 ID:???
>>274
ファイルを保存するときに文字コードを間違っているだけだろ。

279 :262:03/01/21 15:03 ID:???
こんな感じでできるようになりました
ありがとうです。

$nowtime = sprintf("%d%02d%02d%02d%02d",$year,$mon+1,$mday,$hour,$min);
$opentime = join("", @daydata);

if($opentime - $nowtime < 100){ $buyflag = 2; }
elsif($opentime - $nowtime <= 30000){ $buyflag = 1; }
elsif($opentime - $nowtime > 30000){ $buyflag = 0; }
else{ $buyflag = 2; }

280 :nobodyさん:03/01/21 15:21 ID:???
>>279
恐ろしい計算方法だね。。

281 :nobodyさん:03/01/21 15:27 ID:???
>>279
>>264はアフォだって気づかなかったんだな(w

282 :nobodyさん:03/01/21 15:55 ID:???
でも多分当分戻ってこないよ。

283 :nobodyさん:03/01/21 16:16 ID:???
264ともどもにずっともどってくんな!

284 :nobodyさん:03/01/21 18:40 ID:???
質問です。
自分も初心者ですが>274のスクリプトが気になったんで
設置してみたんですが、記事を投稿はできても記事の削除をすると
500 Internal Server Errorが出てしまいます。
どうすれば削除することができますか?

285 :nobodyさん:03/01/21 19:34 ID:???
>>284
暇なんで試してみたが・・・おいおい、そのスクリプト作りかけ何じゃねーのかYO!
お○○チンが・・・ねえ!!

sub read_data
{
    open(READ,"$datafile") || &error ('ファイルオープンエラー');
    @data = <READ>;
    close(READ);
}

sub write_data
{
    open(WRITE,">$datafile") || &error('ファイルオープンエラー');
    print WRITE @data;
    close(WRITE);
}

でも追加しとけ!
後はしらねーーー

286 :nobodyさん:03/01/21 19:57 ID:owIuUjTB
Perlを作るテキストソフトは秀丸で十分でしょうか?

287 :286:03/01/21 19:59 ID:owIuUjTB
それともう一つ質問なのですが、
ネット上にある講座などの知識だけで上達できますか?
参考書がないと歯が立たないものなんですか?

288 :nobodyさん:03/01/21 20:03 ID:???
>>286
あやしい言葉づかいだねぇ。
秀丸を使いこなしているのなら、もちろん十分でしょう。。

>>287
もちろんネット上のテキストだけで上達できる!
色々プログラミングしまくってくれ!!

289 :nobodyさん:03/01/21 20:25 ID:???
>>287
でも、一冊辞書みたいな本があると能率が上がるのも確か。
紙って発明品は偉大だよ。

290 :nobodyさん:03/01/21 20:57 ID:???
>>289
よい辞書をおしえてください

291 :nobodyさん:03/01/21 21:22 ID:???
>290
参考書籍スレに逝ってください。

292 :nobodyさん:03/01/21 21:25 ID:???
紙降臨

293 :nobodyさん:03/01/21 21:35 ID:???
寒いスレだな・・・

294 :nobodyさん:03/01/21 21:44 ID:???
そういえばPerlの本って一度も読んだこと無いな。漏れ。。

295 :239:03/01/21 22:02 ID:???
ファイルの先頭に追加の件ですが、ありがとうございました。
根本的な解決法はなかったのですね・・・

現状ではtmpファイルをつかって行おうと思います。

作成しているものが携帯電話対応のルーム数不定の
チャットなので、高負荷なことは避けたかったのですが
どうせあんまり使う人はいないだろうからいいか っとおもいました

296 :nobodyさん:03/01/21 22:14 ID:???
>>295
>作成しているものが携帯電話対応のルーム数不定の
>チャットなので、高負荷なことは避けたかったのですが

なんかサーバサイドとクライアントサイドの区別が未だに付いてない予感。

297 :nobodyさん:03/01/21 22:19 ID:???
>>296
アフォキタ━━━━(゚∀゚)━━━━!!!!!!

298 :nobodyさん:03/01/21 22:20 ID:???
歴代のこのスレで「ファイルの先頭に追記したい」という質問はよく出てきた。
そういった時の返答は大体決まってる。

ファイルの先頭に追記するのではなく、ファイルの末尾に追記して、読み込みの時にreverseしろ。

299 :nobodyさん:03/01/21 22:22 ID:???
>>297
アフォキタ━━━━(゚∀゚)━━━━!!!!!!

300 :nobodyさん:03/01/21 22:26 ID:???
なんだ? ホンとに阿呆がいるYO

301 :nobodyさん:03/01/21 22:28 ID:???
みんなで阿呆ゥ!

302 :239:03/01/21 22:49 ID:???
>>296
携帯電話側はdocomoのやつなのでjavaでiアプリを作ってます。
ある程度そっちができたので、次はサーバーサイドを作っています。
本当はサーバーサイドもjavaでいこうとしていたのですが、
今までperlを使ったことがあったのと、実装の簡単さでperlのcgiに
しました。

ファイルの末尾に追記してリバースする方法と
tmpファイルを作成する方法はどちらが効率がよいでしょうか?

チャットにおいて、
サーバー側に持っておくログを50行までと決めておけば、
リバースでよいかな


303 :nobodyさん:03/01/21 22:52 ID:???
>>302
全部配列に読み込んでunshiftと言うのは?

304 :239:03/01/21 23:16 ID:???
>>303
はい。結局reverseもunshiftもリストに読み込む
tmpはリストは使わないがファイルアクセス

なんですよね。まずはファイルアクセスのほうを試してみます。

305 :nobodyさん:03/01/21 23:52 ID:???
>>272
use Encode;
my $str = 'あいうえお';
my $utf_str = decode('EUC-JP', $str);
$utf_str =~ s/(.)/sprintf("?%d;",unpack("U",$1))/ge;
print $utf_str ,"\n";

306 :nobodyさん:03/01/21 23:57 ID:???
>>305
sprintfの?の部分は&#。ampersandとsharpが表示されていない。

307 :nobodyさん:03/01/22 00:07 ID:NkPjRdCp
>>262
他に必要な人がいるかもしれないから、もっと簡単な方法。もう出てるけど。
>>264の方法でも、時刻は増加するから一見問題が無いように見えるけど、
日をまたいだ場合とか、桁が変わる場合を考えると、簡単には出来ない。
はっきりいって、そんなことを気づかない人間が、質問に答えるな、と。。

time()の戻り値、UNIX時間(でいいかな?時刻なんだけど)
$start = どっかから持ってくる;
$left = $start - time;

if ($left >= 60*60*24*3) {
 $buyflag = 0;
} elsif ($left >= 60*60*1) {
 $buyflag = 1;
} else {
 $buyflag = 2;
}

>>304
追記してリバースは、>>178に書いた方法を使えば簡単。
reverseって、配列に読み込むっていう意味じゃなくて、ひっくり返して読む
っていうだけだと思う。が。(そうじゃないと異常にもったいない)

頻繁に先頭に追加が発生するなら、データ構造の設計がおかしい。

308 :nobodyさん:03/01/22 00:09 ID:NkPjRdCp
げ、途中だった。

開始時刻も、time()の戻り値の形式でいれておくこと。
適当なモジュールを使えば作れる、と思う。

309 :239:03/01/22 00:16 ID:???
>>307
ありがとうございます。
モジュールがあるのですね。今度調べてみようとおもいます。
普通にseekすると上書きになちゃうので・・
下から読むのも行ごとによめればいいけどそうでもなかったので

チャットなので発言ごとに毎回ファイルの先頭に追加したいので、
データ構造の設計がおかしいのですね・・

310 :nobodyさん:03/01/22 00:36 ID:NkPjRdCp
>>309
チャットなら、保存する量を制限する、だろうから、単純な追記では良くないね。
おそらく、50行くらいなら、メモリーに入れて処理したほうが速いと思う。(ベンチマークしてみよう!)
具体的には、@lines = <IN>; unshift(@line, 新しい行); pop(@line);

311 :nobodyさん:03/01/22 00:38 ID:NkPjRdCp
少し間違ってるけどわかる。だろう。・・
ベンチマークは、Benchmarkっていうモジュールが標準で付いてるから、
それをつかってやればいい

312 :nobodyさん:03/01/22 02:35 ID:???
>>262
sub get_time {
my ($sec, $min, $hours, $mday, $mon, $year) = @_;
my @monthly_days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
my $days, $i, $time;
$days = 0;

$days = ($year - 1) * 365 + int (($year - 1) / 4) - int (($year - 1) / 100) + int (($year - 1) / 400);

for ($i = 1; $i < $mon; ++$i) {
$days = $days + $monthly_days[$i - 1] + ($i == 2 and $year % 4 == 0 and ($year % 400 == 0 or $year % 100 != 0));}

$days = $days + $mday;

$time = ($days - 719163) * 86400 + ($hours - 9) * 3600 + $min * 60 + $sec;

$time;}


313 :za:03/01/22 03:21 ID:???
>>305

をを、うまく行きました!

本当にありがとうございます。(_ _ )

314 :nobodyさん:03/01/22 04:14 ID:spwoH+AM
jperl用に書かれたperl のソースコードを、Jcode.pmのみを使って書き換えるにはどうしたらよいでしょうか?
日本語を処理する部分のみを、Jcode::eucなどを使って書き換えてあげればそれだけですむのでしょうか。

もともとかかれたソースコードは、jperl -Leucのオプションを使って起動させるものです。よろしくお願いいたします。

315 :nobodyさん:03/01/22 06:11 ID:???
あるパターンで囲まれたテキストだけ、サブルーチンにかけて処理を施す
ような事は、どのようにすれば良いのでしょうか?

例えば、

「aaa bbb ccc [change]ddd[/change] eee fff」

というテキストがブラウザから送られて、この

[change]…[/change]

に囲まれた部分だけに &kaeru() という処理を施す。そして全文を返す。

もし&kaeruがescape sequenceに変換する処理なら、

「aaa bbb ccc ??? eee fff」

というテキストを返したいのです。

316 :訂正:03/01/22 06:13 ID:???
最後の???は
「aaa bbb ccc &#224;&#224;&#224; eee fff」
です

317 :nobodyさん:03/01/22 07:28 ID:???
>>314
今はPerl5.8を使った方がより少ない手間でjperl用のscriptを書き換えて
使うことができる。MS-Windows or LinuxならActivePerl build804.
まず、perlをインストールしたディレクトリのhtml/index.htmlを開いて
Encodeとencoding pragmasを読め。以下は例。
---^ test.txt
あいうえお
---$
use Encode;
use encoding "Shift_JIS";

open my $file, "<:encoding(Shift_JIS)", "test.txt";
while (<$file>) {
print;
chomp;
my @check = split //;
for my $s (@check) {
$s =~ s/う/ウ/;
print $s,"\n";
}
}
close $file;

318 :nobodyさん:03/01/22 07:55 ID:q2TbMzAT
SSIで表示させようと以下のようなものを入れたのですが、なぜか表示されませんでした・・・

<!--#config timefmt="%m/%d" -->

他のSSI(カウンター)は動くのですがこれだけダメでした。

<!--#echo var="DOCUMENT_NAME"-->

これはちゃんと表示しました。

もし解られる方がいらっしゃいましたらよろしくお願い致します

319 :nobodyさん:03/01/22 08:00 ID:???
>>318
echo以外対応しないとか言うさーばも。

320 :nobodyさん:03/01/22 08:45 ID:???
私は、
フォームなどで入力された文字をまず
eucにして処理(ファイルに保存や正規表現にかけるなど)
そしてクライアントに返す寸前にeucをsjisなどに変換して
printしているのですが、
この場合、半角カナが送られてくると文字化けが起こってしまいます。
jcode.plにz2hなどの関数があるのですが、
半角は半角、全角は全角のままあつかいたいので、
なにかよい方法はありませんでしょうか?

321 :nobodyさん:03/01/22 09:01 ID:???
>>320
全部UTF8にする。

322 :bloom:03/01/22 09:06 ID:pcyTRh0d
http://www.agemasukudasai.com/bloom/

323 :nobodyさん:03/01/22 09:16 ID:???
>>320
入力された文字列で漢字コードを判別している限り無理。
Shift_JISの半角カタカナ2個はeuc-jpの漢字と判別される。

>>321
わけが分かっていないなら回答しないこと。
理由は上に書いた通り、utf-8に変換しようにも元の文字列の
漢字コードがわからない限り無理。euc-jpにも半角カタカナは
一応用意されている。

324 :nobodyさん:03/01/22 09:22 ID:???
>>323
>入力された文字列で漢字コードを判別している限り無理。

ある程度の長さの文字列を読んでインテリジェントに文字コードを判別する文字コード変換ライブラリもそう珍しくはないが。

ShiftJIS文字255個にEUC漢字1個。これをEUCと判断するバカはいないわけで。

325 :nobodyさん:03/01/22 09:33 ID:2Hn1813R
acitiveperl dev kit をアンインストしたらデバッガが起動しなくなりました

C:\>perl -d -e '0'
Unable to connect to remote host: 127.0.0.1:2000
Compilation failed in require.
main::BEGIN() called at C:/Perl/lib/perl5db.pl line 0
eval {...} called at C:/Perl/lib/perl5db.pl line 0
BEGIN failed--compilation aborted.

たすけてやってください


326 :nobodyさん:03/01/22 09:52 ID:???
>>315
$hoge =~ s/\[change\](.+)\[\/change\]/&kaeru($1)/eg;

これでどう?


327 :323:03/01/22 10:47 ID:???
>>324
そうでしたか・・・
jcodeには euc2sjisとか
sjis2eucという的確なものもありますよね?
あれでやってもだめでしょうか?

以前は失敗したようなきがするけど、思い違いかなぁ


328 :nobodyさん:03/01/22 11:56 ID:???
>>327
フォームから送られてくることが前提なら、hiddenでチェック用の文字を一つ送って、
判別するとかね。昔よくやったよ。
最近のブラウザは、フォームのページの文字コードで送ってくるから、
明示的に文字コード指定しても大丈夫だと思う。
あと、最近はFORMタグでも送信する文字コード指定できるようだ。

329 :nobodyさん:03/01/22 11:58 ID:???
>>326
(.+?)の方がよさげ

330 :nobodyさん:03/01/22 12:27 ID:9ZZh+FcB



          __END__          

331 :nobodyさん:03/01/22 13:15 ID:mr7EqnYJ
chomp($value) = $array[$i];
こういうやり方はダメですか?

332 :nobodyさん:03/01/22 13:49 ID:???
$hoge = "abcd123456798\n123456789\123456789";

で $hoge に cd12 があればその列の\nまでを $hogeに入れたいのですが

$hoge =~ s/.*(cd12.*)\n[.\n]*/$1/;
こうするしかないのでしょうか?

333 :nobodyさん:03/01/22 13:53 ID:???
>>331
何がしたいの?

334 :nobodyさん:03/01/22 14:36 ID:???
>>331
そもそもそれ動くんですか?

335 :nobodyさん:03/01/22 14:37 ID:???
>>326 >>329
ありがとうございました。
これで試してみます。

336 :nobodyさん:03/01/22 14:39 ID:???
$hoge =~ s/^.*(cd12[^\n]*)/$1/;

337 :336:03/01/22 14:43 ID:???
$hoge =~ s/(cd12[^\n]*)/$1/;
で十分か。

cd12と聞くと、LINNの240万円のCDプレーヤーが頭に浮かぶわけだが

338 :nobodyさん:03/01/22 14:49 ID:???
>>331
Can't modify scalar chop in scalar assignment


339 :336:03/01/22 14:58 ID:???
$hoge = $hoge =~ /^.*(cd12[^\n]*)/ ? $1 : $hoge;
あーこうか

340 :336:03/01/22 15:00 ID:???
$hoge = $1 if $hoge =~ /(cd12[^\n]*)/;
何度も失礼...

341 :nobodyさん:03/01/22 15:03 ID:???
>>336
サンクス そういう書き方ができるんですね。

342 :nobodyさん:03/01/22 17:04 ID:0PCOHlDz
オブジェクトのハッシュ値にファイルを読み込むには、
$this=shift;
$this->{fdata}=<パッケージ名::IN>;
でいいの?

$this->{fdata}[$nline]

みたいにしてアクセスしたいんだけど・・・
これだとハッシュ値しか戻ってこない。

343 :nobodyさん:03/01/22 17:04 ID:???
おっと、パッケージ名::INはファイルハンドルね。

344 :246:03/01/22 18:17 ID:STZ5+DSp
>>269のスクリプトを使ってみましたが
shiftjis "\x87" does not map to Unicode at test.pl line 3, <$file> line 920.

shiftjis "\xFA" does not map to Unicode at test.pl line 3, <$file> line 154.
のようなエラーが出てしまいます。これはどういった意味なのでしょうか?

345 :nobodyさん:03/01/22 18:23 ID:???
perl1行でgrepと同じ事する方法キボンヌ。

/(^.*key.*$)/$1/
じゃダメポ。

というのも、とあるテキスト書換えソフトでgrep出来たらいいなと。

346 :nobodyさん:03/01/22 18:28 ID:???
>>345
なにがダメなのかわからん。
マルチポストもやめてくれ。

347 :nobodyさん:03/01/22 18:30 ID:???
>>342
ハッシュ変数に配列をそのまま格納する事はできません。
配列変数のリファレンスを格納するか
その都度、無名配列を作成し、そのリファレンスからアクセスしてください。

348 :kazu:03/01/22 19:04 ID:dkolKxk/
教えてください。
携帯サイトをやっているのですが、
index.cgiとhtaccessで機種の特定を行い、それにあったトップページに自動転送するというシステムをやっております。
i-modeで接続した場合に、「サイトが移動しました」という表示が出ます。
これを解決する方法はないのでしょうか?

349 :nobodyさん:03/01/22 19:06 ID:???
>>348
index.cgiで出力結果をかえるとか。

350 :kazu:03/01/22 19:09 ID:dkolKxk/
全然わからないんですが、どうやって出力結果をかえるんですか?

351 :nobodyさん:03/01/22 19:16 ID:???
>>349が言ってるのは、
index.cgi内で携帯ごとに違うページを表示するんじゃないかな。
index.cgi -> UA判別 -> UAに対応したページを出力。

>>348がやってる方法は、
携帯ごとにディレクトリを別にして、index.cgiでそれぞれのディレクトリに飛ばしてるんじゃないかな。

自分で書いたヤツじゃないとか中身を理解していないなら、そのCGIの配布元のURLを出した方がいいよ。

352 :nobodyさん:03/01/22 19:23 ID:???
てか、そのリダイレクト先の指定の仕方がマズイらしいな。
PCのブラウザだと http://〜/dirname ってすると http://〜/dirname/ になって
結果的に http://〜/dirname/index.htm に辿りつけるんだが、
携帯だとしてくれねえヤツもあるらしいぞ。
振り分け先の設定をチェック汁


353 :質問です。:03/01/22 19:51 ID:H1d15TWe
すみません質問です。いま、携帯をキャリアごとに振り分けるcgiをつくってる
んですが、うまくいきません。
httpヘッダで振り分けるスクリプトを組んで、PCでそのcgiにアクセスしてきた
ときは「テスト」表示するように作ったのですが、エラー文も出てきてしまいます。
以下がブラウザに出てきた結果なのですが、どういうことでしょうか?

 CGI Error
 The specified CGI application misbehaved by not returning
 a complete set of HTTP headers. The headers it did return are:

 テスト


ソース自体が間違ってるのでしょうか? どなたか教えてください。

354 :nobodyさん:03/01/22 19:54 ID:???
>>353
print("Content-Type: text/html\r\n\r\n");

355 :nobodyさん:03/01/22 20:04 ID:NW1Un2Sy
>>348
機種にあったトップページに転送するんじゃなかったのですか?
なんでそうなるんですか?


356 :質問です。:03/01/22 20:35 ID:H1d15TWe
>>354
ありがとうございます。
うまくいきました。\nとか\rとかの意味がいまだにわかりませんが、
調べたほうがいいのでしょうね。
とにかく助かりました。ありがとう!

357 :nobodyさん:03/01/22 21:14 ID:TWTRYmp3
あの、クソ初心者なんですけど、、、
CGIって拡張子のファイル(web上の)を他人が見ることってできないのですか?
HTMLでもTXTでもJPGでも何でも普通ファイルの中身が返されますよね。
CGIの場合は実行結果しか絶対に返ってこないの?

358 :nobodyさん:03/01/22 21:18 ID:???
>>357
httpサーバの設定に激しく依存。

359 :nobodyさん:03/01/22 21:23 ID:TWTRYmp3
>>358
えっと、具体的にはどういう設定だとどうなるのですか?

360 :nobodyさん:03/01/22 21:35 ID:???
>>359
CGI専用のディレクトリに入れていたり、CGIスクリプトとして実行するように設定された拡張子をつけていれば実行結果しか返されない。
それでもウェブサーバーを介さないでアクセスされたら覗かれるけどネ

361 :nobodyさん:03/01/22 21:35 ID:???
Options +ExecCGI
AddHandler cgi-script .cgi

362 :nobodyさん:03/01/22 21:35 ID:???
>>360
>CGI専用のディレクトリに入れていたり
そのディレクトリに画像ファイルなんて入れたら大騒ぎだな。

363 :nobodyさん:03/01/22 21:36 ID:???
>>361
Apacheの場合。と書かないと語弊があるぞ。

364 :nobodyさん:03/01/22 21:37 ID:???
>>362
ForbiddenかInternal Server Error(実行権を与えていた場合)になるだけだろ。

365 :nobodyさん:03/01/22 21:43 ID:TWTRYmp3
どの拡張子がCGIスクリプトとして実行すると決めておくのがサーバー設定ってことですか?
WEBサーバーを通さないってことはFTPでってことですか?
かなり初心者なんですいません。

366 :nobodyさん:03/01/22 21:45 ID:???
>>365
>WEBサーバーを通さないってことはFTPでってことですか?
など、そのサーバのファイルシステムに然るべき権限でアクセス出来るプログラムがあればいい。

367 :nobodyさん:03/01/22 21:46 ID:???
>>365
> どの拡張子がCGIスクリプトとして実行すると決めておくのがサーバー設定ってことですか?

そう

> WEBサーバーを通さないってことはFTPでってことですか?

別に何でもいい。FTPじゃ無理だと思うが。
たとえばis○ebのようにセキュリティの甘いところはCGIスクリプトを使って他人のファイルを覗ける

368 :nobodyさん:03/01/22 21:58 ID:???
>>367
アホか。

369 :nobodyさん:03/01/22 22:00 ID:???
>>368
なんか間違った?(^_^;)

370 :nobodyさん:03/01/22 22:08 ID:NkPjRdCp
>>368
お前には課題だ。調べておけ。

suEXEC setuid ファイルの所有者 パーミッション

371 :nobodyさん:03/01/22 22:11 ID:???
>>370
>>367の間違い?
それくらい知っているけど(^_^;)
共用サーバにも関わらずそれをやっていないからis○ebはセキュリティが甘いと言ったんだけど。

372 :nobodyさん:03/01/22 22:17 ID:???
>>328
submitタグのvalueに漢字を使う手も。

373 :nobodyさん:03/01/22 22:32 ID:???
>>357
CGIのみの話題はスレ違い

374 :nobodyさん:03/01/22 22:42 ID:TWTRYmp3
みなさん、ありがとうございました。

>>373
そうなんですか?それすらもよくわからなくて。
ごめんなさい。

375 :nobodyさん:03/01/23 00:46 ID:???
本とかにはopenではよく or dieと組み合わせてありますが、
私の場合openが失敗したからといってスクリプトを終了させるわけ
には行かないので
if(open(IN,"temp.txt")){
opend lines
} else {
canto open lines
}
のようにしているのですが、
こういうことはしないのでしょうか?大丈夫でしょうか?

376 :nobodyさん:03/01/23 00:48 ID:???
>>375
open(IN, "temp.txt") or { cannot open file }

377 :nobodyさん:03/01/23 00:49 ID:???
>>375
じゃ、warnを使えば?

378 :375:03/01/23 00:56 ID:???
ありがとうございます
376の方法もいいなとおもいました

379 :nobodyさん:03/01/23 01:15 ID:IkRppvEj
ただ単にファイルをアップロードだけのCGIありませんか?
クライアントからのデータをサーバに保存できさえすれば良いんですが。

380 :nobodyさん:03/01/23 01:20 ID:???
半角文字、ダメです・・・シフトjisとeucだと確定していうるので
送られてくる→&jcode'sjis2euc(\$mes)→内部処理
内部処理→&jcode'euc2sjis(\$mes)→送り返す
としても、半角はおかしくなってしまいます。

なにか解決方法はないでしょうか><

381 :nobodyさん:03/01/23 01:22 ID:???
>>380
\→*
とか。

382 :nobodyさん:03/01/23 01:56 ID:8ePVO3RC
ファイルを開いて内容を配列に収めて配列要素を追加するなり並べ替えるなりしてまたファイルに書き出したら、次に開いたときに各要素の頭(単純にファイルを開いた場合は各行の先頭)に半角スペースが付いてるの。
2回同じことやれば半角スペースが2つ、3回なら3つって具合にどんどん増えてしまう。
なんで?
どうやったら回避できるの? 
何か根本的なこと間違ってる?

383 :nobodyさん:03/01/23 02:04 ID:???
>>380
そもそも「半角カナは文字化けするから使わないように」っていうのがネットの常識じゃなかったか?
2chみたいに、半角カナが堂々と使える掲示板のほうが特殊なのかもしれないぞ。

>>382
ソースきぼんぬ


384 :380:03/01/23 02:19 ID:/gwtZ2Vt
>>381
ありがとうございます!
\$ を * にしたらなりました
昔は*を使っていたのですが、\$のほうがいいとか、同義だと
かおもっていて、結果が違うとはおもいませんでした。
*$とうのもあるのですか?
私もまだまだ勉強不足ですね・・
ありがとうございました。

385 :380:03/01/23 02:28 ID:???
なんか、ポートがどうとかいわれて書き込めなかった。。
今度は大丈夫かな

>>383
そうなんです。私も半角はいやなのですが、
携帯電話のチャットを作っているので、きってもきれない
関係なんです・・

掲示板で使えるところがあるので、どうにかがんばればできるんだろうなぁ
とか思ってやってました。
文字コードを変換しなければ問題はおこりにくいのかな

386 :nobodyさん:03/01/23 02:37 ID:???
2chは書き込みボタンのキャプションの文字コードを調べて
SJIS以外なら、エラーを返して書き込めないようにしている。
結果として、文字コードの変換処理を省略している。
PC向けならこれで、問題ないように思える。

基本的に、フォームページの文字コードでデータがPOSTされれば
変換処理はいらないと思う。

携帯の場合はどうなんだろう。。ちと気になる。。

387 :nobodyさん:03/01/23 02:42 ID:???
>>385
携帯ならShiftJISだけで処理すればいいんでない?
半角カナOKな掲示板も、内部ではShiftJISだけで処理してるのがほとんどだよ。


388 :nobodyさん:03/01/23 02:46 ID:j5CbC/3T
>>383
382です。ソースはかいつまむと

#!/usr/local/bin/perl

print "Content-type: text/html\n";
print "\n";
print "<HTML>\n";

open(FILE,"<data.txt");
@data=<FILE>;
close(FILE);

open(FILE,">data.txt");
print FILE "@data\n";
close(FILE);

print "処理終了\n";

exit;

こんなんです。
これだけでもどんどんスペースが増えていきます。
なんででしょう?

389 :380:03/01/23 02:49 ID:???
みなさん、ありがとうございます。

本来はshiftjisだけで処理したほうがよかったかもですね。
私の場合は、メッセージにIDや名前や発言があるので
それを切り分けたりとか、サーバー側がつくったメッセージを
くみあわせたりとかがあるので、つい、
サーバー側(UNIX+Apache)ではEUCで扱うようにクセがついています。

半角文字に関しては今のところうまく動いているので、
もしある程度出来上がったらiappliのお金がかかりにくいように
作ったチャットをここで公開しますね

390 :nobodyさん:03/01/23 02:52 ID:???
>>389
かいつまみすぎてわからん。それだけ見れば異常はないけど、
配列の最初の要素にどういうものをいれているんだ?
print "$data[0]syori syuuryou";
とかでみてみた?

391 :nobodyさん:03/01/23 03:17 ID:j5CbC/3T
>>390
えっと私(382=388)へのレスということでいいですよね。
データの内容は会員リスト(氏名だとか住所だとか電話番号をカンマ区切りにしているもの)です。
拡張子はtxtですがためしにcsvとかでやっても同じでした。
data.txtのファイルをブラウザで見ると2つ目以降のデータの頭にどんどん半角スペースがくっついていくんです。
csvにした場合は2行目以降の1列目の各データの頭にスペースが付いていきます。
本当は配列に入れた後、追加だとか並べ替えだとかやりたいんですけどそれ以前の段階でつまづきました。

392 :390:03/01/23 03:28 ID:???
>>391
改行コードの違いとかはだいじょうぶ
ファイルをどうやってみてるのかとかわかんないしなぁ

やまだ,東京345,99311
のだ,宮556,552211

見たいな感じなの?

393 :nobodyさん:03/01/23 03:31 ID:???
>>391
こうすると直るよ。

print FILE "@data\n";
    ↓
print FILE @data;


394 :nobodyさん:03/01/23 03:37 ID:j5CbC/3T
>>392
えっと、そんな感じです。

>>393
えっ、ちょっとやってみます。

395 :nobodyさん:03/01/23 03:42 ID:j5CbC/3T
わ、わ、わわわ!
本当だ!
ありがとうございます。(^^)
凄い晴れやかな気分。半日苦しんだから。
でもなんだか恥ずかしくなってきた。
受け売りって言うかよそから拾ってきたものを見本に猿まねで訳もわからず作ってたから。
ところで何でこうなるんですか?
(by 382)

396 :393:03/01/23 04:10 ID:???
>>395
調べてみたんだが、ダブルクォート中にリスト変数を記述すると、リストの中身が
展開されるそうな。そのとき区切り文字として特殊変数 $" が使われるんだけど、
この中身はデフォルトでは半角スペース。

例えば、各行が「うんこ」「ウンコ」「unko」のテキストファイルを読み込む。

@data = <FILE>;

すると、$data[0] は「うんこ\n」、$data[1] は「ウンコ\n」 などとなる。

これを間違ってた方法で書き出すと

print FILE "@data\n";

リストが展開され、「うんこ\n ウンコ\n unko\n\n」となる。

結果、2行目以降の先頭にスペースがついてしまったというわけ。
(@dataの後ろの\nが実は末尾にしか付いていないことにも注目)
リストの出力は print FILE @data; のようにダブルクォートせずに書こう。


397 :390:03/01/23 04:12 ID:???
>>396
そうそう。おれはそれが言いたかった。
変わりにかいてもらってスマソ

398 :nobodyさん:03/01/23 10:21 ID:???
CGIでメール送信プログラムを組んでおります。

require "mimew.pl";
require "jcode.pl";

(略)
$subject = mimeencode (jcode'jis($subject));
$body = jcode'jis($body);

open(MAIL ,"|/usr/sbin/sendmail -t -i");
print MAIL "From: $MailAddress\n";
print MAIL "Subject: $subject\n";
print MAIL "To: $mailaddress1\n";
print MAIL "\n";
print MAIL "$body\n";

close(MAIL);

で、コマンドラインから実行した場合は正常にメール送信されるのですが、
ブラウザ経由で実行した場合、mimeencodeが実行されません。
(エラーにもなりません。)
mimew.plおよびjcode.plはプログラムと同階層においてあります。
また、ファイルの属性は755です。

八方塞がりの状況です。教えていただけませんでしょうか。

399 :nobodyさん:03/01/23 11:09 ID:???
>>398
.plのパーミッションは普通 644 or 604 だよ。それはOK?


400 :nobodyさん:03/01/23 11:13 ID:xJWtHdWY
sub hoge{
my %aaa;
my @bbb;
# それぞれになんか値を入れる動作する
return(%aaa,@bbb);
}
(%AAA,@BBB) = &hoge;
こうすると@BBBに値が入ってないんですけど、なぜでしょうか。

401 :398:03/01/23 11:19 ID:???
>>399
mimew.plのパーミッションは644です。
apacheのログを見たところ、

Undefined subroutine &mimew::mimeencode

と表示されていました。
mimew.plにはmimeencodeが存在しています。
(コマンドラインからは実行されますし)
何か他にチェックするべき点はあるでしょうか。よろしくお願いします。


402 :nobodyさん:03/01/23 11:21 ID:???
>>398
もしも、mimew.plが読み込まれていないと心配なら
eval ( require "mimew.pl" );
で、きちんと読み込まれているかチェックしてみたら
どうでせう?

>>399
0755にしなきゃいけないファイルを0644にしていたら問題だけど、
普通0644にするべきファイルを0755にしていても、問題じゃない
でそ?

403 :nobodyさん:03/01/23 11:35 ID:E5MYBiOX
>>400
my @AAA=&hoge;
%AAA=$AAA[0];
@BBB=$AAA[1];

404 :398:03/01/23 11:56 ID:???
>>402
evalでチェックを行ったところ、
mimew.plはきちんと読み込まれていました。
しかし、あいかわらず

Undefined subroutine &mimew::mimeencode

と出力されています。


405 :nobodyさん:03/01/23 11:59 ID:???
>>400
returnは値を1つしか返せないよ。
こういうときはリファレンス渡しにして、サブルーチン側で直接値を変更したほうが
いいかもしれない。

&hoge(\%aaa, \@bbb);

sub hoge {
my ($aref, $bref) = @_;
$aref->{hage} = "ccc";
$bref->[0] = "ddd";
}


406 :nobodyさん:03/01/23 12:15 ID:???
>>398
バッファリングしないようにすれば動く。

407 :nobodyさん:03/01/23 12:53 ID:???
例えば単純変数や配列変数を使う時、
1.作業用の配列を使いまわす事がある
2.分かり易いように名前を決めて、1つの項目しか入れない
場合によって、違うかもしれないけど、貴方はどっち派?

408 :390:03/01/23 13:00 ID:???
>>407
おれは2
今の時代、よっぽど負荷がきになるときいがい
2にして、わかりやすいソースを書いたほうがマシ

409 :nobodyさん:03/01/23 13:13 ID:nFHVv77n
CGI経由でファイルを作成しようと思い、
実験として次のソースを書いてみました。
ファイル名:test1.cgi

#!/usr/local/bin/perl
open(FILE,">>./1234.txt");
print FILE "0123456789\r\n";
close FILE;

これをFreeBSD4.7+apacheが動いているコンピュータにいれて
別のコンピュータにブラウザでこのファイルのアドレス
を指定してやると「内部サーバーエラー」が出てしまいます。
何か間違いがあるだろうかと、
apacheが動いているコンピュータで直接
perl test1.cgiとやったところ、1234.txtのファイルが作成されました。
ネットで調べたところ、Apacheのユーザに権限がないと
ファイル作成などはできないということが書いてあったのです、
1234.txtが作成されるディレクトリのパーミッションを775にして、
apacheのユーザを、そのディレクトリのグループのユーザに
加えてみて、今度はapacheのユーザでperl test1.cgiを実行しました。
そうしたところ、上手く作成できたので、今度は外部から試してみました。
そしたらやっぱり内部サーバエラーになってしまうんです。
どこがまずいのか分かりません。
乱文になってしまいましたが、どなたか私の間違いを
指摘して下さいませんか?よろしくお願いします。

410 :nobodyさん:03/01/23 13:18 ID:???
>>409
print "\r\n\r\n";を加えれば動くでしょう。

411 :nobodyさん:03/01/23 13:25 ID:jz3+5dSU
>>409
Apacheにヘッダーを送れ。
print "Content-type:text/plain\n\nファイル作成しますた。\n";


412 :409:03/01/23 13:28 ID:???
>410さん
#!/usr/local/bin/perl
print "\r\n\r\n";
open(FILE,">>./1234.txt");
print FILE "0123456789\r\n";
close FILE;
というふうにしてみたんですが、今度はダウンロードしますか?の
ダイアログが出てきてしまいました。どうなってるんでしょうか?

413 :nobodyさん:03/01/23 13:38 ID:???
ダイアログが出たということは、正常に動作しています。

PerlをCGIで動かす場合には、HTTPヘッダを出力する必要があります。
CGIで動かした時にHTTPヘッダがなければ、>>409のようにエラーで動きません。
それだけです。

414 :398:03/01/23 13:46 ID:???
>>406
申し訳ございません。
おっしゃる意味が分からないのですが・・・。

415 :nobodyさん:03/01/23 13:54 ID:Ah3Ym1t7
質問します。

文字列中に
#1234(1234は3〜6桁の数字)
と有った場合、
<a href="http:/hoge.com/hoge/1234">#1234</a>
                    ~~~~~ ~~~~~~~
#を外した数字↑   ↑元の文字列

と言う風に変換したいのですが、上手くできません。
どなたかご教授ください。
よろしくお願いします。

416 :nobodyさん:03/01/23 13:55 ID:???
>>414
プログラム的に説明すると、$|=1;を先頭の方に加える。
バッファの意味は辞典なり検索なりして調べてください。

417 :nobodyさん:03/01/23 14:33 ID:???
>>415 こ、今度だけだぞ
my $str = "#1234(1234は3〜6桁の数字)";
(my $tr = $str )=~ s!(#(\d{3,6}))!sprintf("\"http:/hoge.com/hoge/$2\">$1</a>")!ge;
print "$str ->\n$tr\n";


418 :nobodyさん:03/01/23 14:36 ID:???
>>417
おっと、いけねぇ、ミスってもうたわい。まっ、いいか。

419 :nobodyさん:03/01/23 14:47 ID:???
s!#(\d{3,6})!<a href="http://hoge.com/hoge/$1">#$1</a>!g;

補完

420 :398:03/01/23 14:47 ID:???
>>416

出力バッファを吐き出すことと、
サブルーチンが見付からないこととはどのような関係があるのでしょうか。
$|=1;を加えてみましたが、結果はかわりませんでした。

ただ、気になるのですが、
$subject = mimeencode(jcode'jis($subject);
と呼び出した場合、
Undefined subroutine &該当コードが含まれているパッケージ名::mimeencode
とエラー出力されます。

mimew.plは正常に読み込んでいるようなのですが・・・。

421 :398:03/01/23 14:52 ID:???
ちなみにjcode'jisは正常に呼び出せています。

422 :nobodyさん:03/01/23 15:03 ID:Ah3Ym1t7
>>417-419
ありがとうございました。
上手くいきました。



423 :nobodyさん:03/01/23 15:15 ID:???
>>421
mimew.plのエラーじゃないだろ。冷静になってよく考えろ。

424 :nobodyさん:03/01/23 15:19 ID:???
>>409
さっさと411をためせよ

425 :nobodyさん:03/01/23 15:21 ID:???
>>398
だから、なんでアホみたいにprint MAIL なんとか
でやるの?バッファリングするなっていわれてるのに
$mess にぜんぶメールいれといて
system (,"|/usr/sbin/sendmail -t -i , $mess);
かなんかでポンとやれよ。
ファイルハンドルの意味わかってんの?

426 :398:03/01/23 15:28 ID:???
解決しました。
mimew.plを見たら、パッケージ名がMIMEと設定されていました。
呼び出しミスでした。お騒がせ致しました。

ただ、jcode.plの場合はrequireするだけで良かったって言う、理由が、よくわからないままです。
よろしければご教授ください。

427 :nobodyさん:03/01/23 15:30 ID:???
>>426
mimew.plのあたまのほうは?
おれはrequireするだけでうごいてるけど

428 :nobodyさん:03/01/23 15:41 ID:???
>>426
あんたのmimew.plにmain'mimeencodeサブルーチンが欠けているか
main以外のパッケージ空間を使用しているからでしょ。。

429 :426:03/01/23 15:46 ID:???
>>423,425,427,428
ありがとうございました。
がんばります。ごめんなさい。

430 :nobodyさん:03/01/23 17:27 ID:kDsUWLbm
>>406 >>416 >>425
今回の問題にバッファリングは関係ない。closeしているから。
なんでも$|=1って書けばいいものじゃない。あほか。

431 :nobodyさん:03/01/23 17:34 ID:kDsUWLbm
もしMAILに対してバッファリングをしないように設定したいのであれば、
select(MAIL); $| = 1; select(STDOUT);
こうするべき。この辺りはわかって言ってるんだよね?

432 :409:03/01/23 18:06 ID:???
>>411さん,>>413さん,>>424さん
ありがとうございます。上手く動きました。
何度試してもずっと内部サーバエラーですが出力されていたのですが、
ブラウザを閉じてもう一度アドレスを入力したら動きました。
なんだかふに落ちないのですが、ひとまず動いたのでよしとします。
一時ファイルとかそんなのが問題になってるんでしょうかね?

433 :nobodyさん:03/01/23 18:19 ID:???
そうですね。

434 :nobodyさん:03/01/23 19:02 ID:0ikp7K62
モジュールをwinxpでインストールしたいのですが
解説書などを見ても意味がわかりません。
$su が最初に出てくる画面は何のアプリを使ってるのでしょうか?

435 :nobodyさん:03/01/23 19:26 ID:/BytM6mn
>>434
Linux
FreeBSD
cygwin

436 :nobodyさん:03/01/23 21:01 ID:???
>>435
UNIX系と言えば丸く済むような。

437 :nobodyさん:03/01/23 22:30 ID:CHeIi8Oa
会社のネットワークからだと、
制限かかってて見れないページがあるんですが、
自宅のwebサーバーを経由して、見れるようにする
方法ってないでしょうか?



438 :nobodyさん:03/01/23 22:33 ID:vGzRwfzk
>>437
串じゃあかんの?

439 :nobodyさん:03/01/23 22:42 ID:JsPmMcCV
文字列を、ある文字コード分だけずらすには
どうすればよいのでしょうか?
$char = "ABcd";

何らかの処理
(例えば +10hさせる。)

$char が QRst となる。


文字を取り出すのはやってみたんですが、
文字をずらすのがわかりませんでした。
--------------------------------
$char = "ABcd";
for ($i = 0; $i < length($char); $i++) {
$c = substr($char, $i, 1);
}
--------------------------------

440 :nobodyさん:03/01/23 22:51 ID:KCPQ5bMl
>>439
$c += 10;

441 :438:03/01/23 22:54 ID:???
>>440
そうやると$cに数字の10が入ってしまうんですけど・・・

442 :439:03/01/23 22:55 ID:???
↑失礼
ハンドル間違えました。

443 :440:03/01/23 22:59 ID:KCPQ5bMl
$c++;
を必要なだけ繰り返す。

444 :nobodyさん:03/01/23 23:07 ID:???
>>441
char型は整数型なんだけどね。

445 :nobodyさん:03/01/23 23:10 ID:CHeIi8Oa
>438
串刺すとみれるんですか?
.pacのファイルを指定してプロキシ経由してるんですが、
その辺よく分からないので、よろしかったらご指導ください。。







446 :貧乏パーラー:03/01/24 00:19 ID:???
>>437
俺も会社からちくり板見るれなくなって欲求不満だった。
だから某所のコード改造してから自作したよ。
これでもパーラーだからねピュアperlで作った簡単httpポートフォワーダだよ。


447 :貧乏パーラー:03/01/24 00:20 ID:???
>>446
---この下から---
begin 666 http-tmp2ch.zip
M4$L#!!0````(`&F_-RZKG&Q7[0,```<*```.````:'1T<"UT;7`R8V@N<&R5
M5FUOVD@0_FQ^Q90XQ:A@`]%))R,XI6W:1,H!"MR+5!IDS!*LFK5O=PF'0OK;
M;V=?,'"D:E8"KW>?F7EV=N:!LS?!BK,@S>(H#:8)#7+"TM+90HB\+I9Y"]0L
MSYB`><;6$9L1!N\W<.V+[!O)-#(,@D6V)'GT0"Y\FLS%QH^S9:`0-+BB#_7W
M06G%"7#!DEBTU?RF'X;#+/Y&]M])2G!_N0'W]G(V8]`!]_+N\Y]?&E_AMV(:
M0D4Q7F1<5`Q\@!PMO(EP\ABEGGVOHE%+#H,?74O;';Y5N&\I]_+L?BM>^)2(
M"AB+@P@71Q$N=(1?&PC/64(%E,<4LP."193#S2":S4)SK-N$"T)#PUH#D%!H
M>.%RJ"..:5G'3Y7-)#<LE*G>X3*-DW64B(0^R*TBLV%XT[L:U;N4K#T=$N3H
M=&'8__WR[P_]7J]6@I\=MYAQG8/N`9M7^!BP3&1J)GU41)Q77F%\1[!.<$CC
MYFN9ZW+JFL*JP<^;5]NE]2))"7@VV9C__:37NU$<DUQ4GY17"?/<Z6I><QGY
M9T6XD!X<Y<)K5N&IY#A\PQF)9I[R4@,%AF9##@FU<:TU^!V%*':2.7C%=N<[
M+(,Q&U/\;.6#!F"8_,#@WAOTAZ/MYZM1%13>D4,QQZZ2G-35@BMK9R(-:RY'
MKG@2.:06>#Q/$^%5QK12G%.?3HY`57,`;]_"++.+CCOI0$7M0,4WI:X=.L_F
M&=R1.6&$G;+]SK=&;K[<!U_?V1?M:)L=>;+,5?HFONS&L@GV7)R5F5,F$1:%
MFQ/"T%G5('<+]L;K75RAT9(8Q)&+J@0B#N>3A'J%Q[8-JI8F"^WT@0B<33=H
MX!D:</EI@HU[;!-I14RD*$VHR"*#-S!]09V&>3,!#K+L6O'06M8^J!'CX$4!
M00_@.`/)9-=+JE0..TDC=CIQ0B`DPLK`:15PJD?,5/F^`4/PJ+81X&C%U<U9
MOAZ-!D'3;\`OC0;$$:69`$9XECX2'WND?.`>ZT$]U9RD4F.>#O<=KGZ7/-L"
MX&X[S3:8U>'H8_^/4?7(YXZ1HF1K\1BTJU'9DCRX#P""A^5I3V6`>AUL"W,1
M,5&O__\L-NX+`4_Y(G1F/#FVW+B4&]A[1[%*Y:^'<J=6=RGY4484TH0\/S__
MBTREB$<S&")[DYLB\(%"JG*U8=_)IMHIII%,7FBF%$TP)OMUH"#(6&^M:$HX
M]]1J$<-)HT*$L!+,\R7J5[V/>\1A3T_B-./$U@BTS]!D2-BC_,.$S00?<+^D
MT38HP#-^F:+;!>R1?[%B9;@YRY8P9=F:$V8R17&S[6ACO%;]77#5D21=?;U#
MG0N;:L1:JEK0GTNE_P!02P$"%``4````"`!IOS<NJYQL5^T#```'"@``#@``
M```````!`"``MH$`````:'1T<"UT;7`R8V@N<&Q02P4&``````$``0`\````
&&00`````
`
end
---この上まで----

448 :nobodyさん:03/01/24 00:24 ID:???
>>447
ishてまた懐かしい。

449 :nobodyさん:03/01/24 00:28 ID:f7nkT00I
>>439
$char="ABcd";
print pack("C*",(map { $_+10 } unpack("C*",join('',$char))));

別に1行でなくてもよいけれど、、、

450 :貧乏パーラー:03/01/24 00:31 ID:???
>>447
上のuueコード部分をテキストエディタにコピペして(ファイル名http-tmp2ch.uue)

WinZIPでそれを開いてその中に出来ているhttp-tmp2ch.plを適当なディレクトリにコピ
Dos窓開いてhttp-tmp2ch.plをコピーしたディレクトリにcdして

使用方法
perl tmp2ch.pl パソコンのDNSホスト名(もしくはIPアドレス) 任意のポート番号 2ch板ホスト名 80
として起動
そしたらブラウザから
http://パソコンのDNSホスト名:任意のポート番号/2ch板ホスト名以降のアドレス
として見る。

c:\hoge>perl http-tmp2ch.pl Mypc.com 2222 pc.2ch.net 80
ブラウザからここを見る例
 http://Mypc.com:2222/test/read.cgi/php/1042260745/l50
他の2ch板指定したい時この要領でホスト名と別のパソコンポート指定汁。

ためしにパソコンのホスト名をlocalhostとして試しても良し。


451 :449:03/01/24 00:35 ID:???
join('',$char)

$char
に訂正。
無意味だ欝

452 :nobodyさん:03/01/24 00:38 ID:???
>>439
my $char = "ABcd";
$char =~ s/(\w)/chr(ord($1) + 0x10)/ge;
print $char; # > QRst

私はこういう方法で偶に変換してます。。

453 :nobodyさん:03/01/24 01:06 ID:???
Configuration Error
The server encountered an error while processing your request.
Please contact the administrator of the referring document and inform them of the time the error occurred, and anything you might have done that may have caused the error.



--------------------------------------------------------------------------------

The CGI environment at the time of this error was

こんなのが表示されたんですがどうすればよいでしょうか?



454 :nobodyさん:03/01/24 01:12 ID:???
>453
ちゃんとローカルでテストしましょう。
そのエラーメッセージじゃ何もわからんよ。

まずはローカルでテストできる環境を作って、そこでエラーメッセージをちゃんと吐かせる。
そしてエラーメッセージの意味を調べて、スクリプトを修正する。

455 :439:03/01/24 01:13 ID:???
>>449,452
ありがとうございます。
今までネットで探していたら、
452さんも使われているchr関数を見つけましたので
一端ordで変換してchrで戻してみました。

449さんも使われているpackも見てたのですが、
ちょと私にはまだ難しかったみたいです(^^;


456 :nobodyさん:03/01/24 01:17 ID:???
>>454
すみません
ローカルって何ですか?


457 :nobodyさん:03/01/24 01:19 ID:???
>>453
453の:とるにたらない人さん:03/01/24 01:06ID: ???
Configuration Error
コンフィギュレーションエラー
The server encountered an error while processing your request.
あなたのリクエストを処理する間に、サーバーはエラーに遭遇しました。
Please contact the administrator of the referring document and inform them of the time the error occurred, and anything you might have done that may have caused the error.
どうか指名しているドキュメントのアドミニストレーターと連絡を取って、そして(彼・それ)らにエラーが起こった時とエラーを起こしたかもしれないあなたがしたかもしれない何でも知らせてください。


458 :nobodyさん:03/01/24 01:24 ID:???
>>457
よくわからいので初心者でもわかるように説明してもらえないでしょうか?
お手数かけます

459 :nobodyさん:03/01/24 01:34 ID:???
>456
あんたのパソコン。
サーバー上でCGIのテストするな。
後は検索して調べな。
説明ページは探せばいくらでもある。

それ読んで分からないようなら、CGIの改造とか色々考えるな。
改造せずにそのまま設置しようとしてそのエラーなら、配布元の指示に従ってちゃんと行動してないって事。
とにかく書いてある文字を読め。

460 :nobodyさん:03/01/24 06:22 ID:???
>>456
自分のパソコンにPerlをインストールして、それで走らせて
デバッグする。WinでもMacでもあるよ。

461 :nobodyさん:03/01/24 09:10 ID:???
これって2ch掲示板のことじゃ・・・・

462 :nobodyさん:03/01/24 14:56 ID:Mw0EqohX
>>461
read.cgiはcじゃなかったっけ

463 :nobodyさん:03/01/24 15:21 ID:8KdGKoGc
http://jsweb.muvc.net/index.html
 ★こんなサイト見つけました★

464 :nobodyさん:03/01/24 15:49 ID:???
検索フォームから、例えば何らかのperl関数を入力された場合、
CGIが暴走するということはありえるでしょうか?

465 :nobodyさん:03/01/24 15:55 ID:???
>>464
evalなんてバカな関数使ってるならそれなりにありえる。

466 :nobodyさん:03/01/24 16:04 ID:???
>>465
ありがとうございます。安心しました。

467 :free se:03/01/24 16:04 ID:???
まああれだ、好きな音楽を聴きながら仕事している方が効率いいな。
おまえらはどうだ?

468 :nobodyさん:03/01/24 16:15 ID:???
>>467
音楽聴いてるとソース書けない

469 :nobodyさん:03/01/24 16:20 ID:???
>>467
無音に限る

470 :nobodyさん:03/01/24 17:18 ID:???
>>467
集中したい時は耳栓するぞ。
そうすると呼吸の音が気になってくるんだなこれが。

471 :nobodyさん:03/01/24 17:20 ID:???
息止めろ。

472 :nobodyさん:03/01/24 17:25 ID:???
>467
簡単な物は音楽が鳴っていた方がいい。
複雑な物になると鳴ってない方がいい。

473 :467:03/01/24 17:33 ID:???
{解決]
よく考えると俺も472さんと一緒だな。
無音は気持ち悪くて、流石に嫌だけど。

474 :nobodyさん:03/01/24 17:43 ID:i/64hvW7
wwwmailを使ってメール送信フォームを作ったのですが
このように表示されます。

下記のメールを送信しました。ありがとうございました。


--------------------------------------------------------------------------------
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
To: aaa@aaa
From: aaa@aaa
Subject:wwwmailからのメール

氏名 =
住所 =

といった感じなのですが
「下記のメールを〜」の下にそのまま「氏名=」と来たほうが
送信した側もわかりやすいように思うのですが
「Content-Type:〜Subject:wwwmailからのメール」までを
消す(送信者に見えなくする)方法はありますか?
よろしくお願いします。


475 :nobodyさん:03/01/24 17:53 ID:???
ソース見せて (*´д`)ハァハァ

476 :nobodyさん:03/01/24 17:56 ID:???
>>474
これあぶねーな まだこういうの作ってる人いるんだ。
こえー。大丈夫?責任とれるのかな

477 :nobodyさん:03/01/24 17:57 ID:???
>>474
print のところをはずせばいいだけだとおもうが。
でもあぶねぇなぁ。こんなの本当に設置すんの?

478 :474:03/01/24 18:12 ID:i/64hvW7
皆さんレスありがとうございます
すみません、どんな風に危ないんでしょうか?
非常に不安になってきたのでよければ詳しく教えてくれませんか??

479 :nobodyさん:03/01/24 18:22 ID:???
誰でも何処でも何通でも送れるから。

480 :nobodyさん:03/01/24 18:23 ID:???
>>476>>477

危ないって何が?
Toを使用者が指定できるとか?

481 :nobodyさん:03/01/24 18:24 ID:???
ソース見せて (*´д`)ハァハァ

482 :nobodyさん:03/01/24 18:25 ID:???
>>474
設置した場所にBASIC認証かけておいてね。

483 :nobodyさん:03/01/24 18:27 ID:???
>>482
Toを固定するだけでいいと思うけど

484 :nobodyさん:03/01/24 19:34 ID:???
危ないかどうかはソース次第だとおもうけど。
ただ、Toを自分のメアドにしておいてもメールボムとか怖い。

485 :474:03/01/24 19:43 ID:i/64hvW7
すみません初心者なのでソースを出して良いのかどうかの
判断がつきません。wwwmailは「とほほ」にある
メール送信フォームを設置するためのソフトです。
危険でしょうか?

486 :nobodyさん:03/01/24 20:01 ID:???
とほほは危険

487 :nobodyさん:03/01/24 20:05 ID:???
>>485
個人情報(自分のメアドとか)、パスワードとかが入ってるなら、それだけ消してソース出してみ。
ソース見せたくらいじゃどうってことないよ。

488 :nobodyさん:03/01/24 20:13 ID:QLwP0ckk
xreaに12chのスクリプトを置いたのですがどうも書き込み後、index2.htmlに戻るときエラーが発生してしまいます。
たしか、XREA用に何かいじらなければならなかったような気がするのですが思い出せません。

どなたかご存知の方、ご教授願います。

489 :nobodyさん:03/01/24 20:18 ID:???
>>488
xrea.com part28
http://pc.2ch.net/test/read.cgi/perl/1042433690/

こちらへどうぞ。

490 :488:03/01/24 20:20 ID:???
>>489
板違いすんません・・・。では。

491 :474:03/01/24 20:27 ID:i/64hvW7
ソースです。

#!/usr/local/bin/perl
#=====================================================================
# カスタマイズ
#=====================================================================
# ★ perlのパス名
# このファイルの先頭の1行を、あなたが利用するサーバーにインストー
# ルされた perl コマンドのパス名に応じて変更してください。例えば、
# 私が加入している BIGLOBE では、#!/usr/local/bin/perl となります。
# 解らない場合は、プロバイダやサーバの管理者にお問い合わせください。
# 「#!」の前には、空文字や空行や他の文字がはいらないようにしてください。

# ★ 送信先メールアドレス
# $mailto = 'abc@xxx.yyy.zzz'; のようにあなたのメールアドレスに
# 書き換えてください。
$mailto = '';

# ★ サブジェクト(件名)
# 送信されるメールのサブジェクトを指定してください。
$subject = 'WwwMailからのメール';

# ★ メール送信コマンド
# WebサーバーがUNIXの場合はsendmailコマンド、Windows系の場合はBLATJ.EXE
# コマンドのパス名を指定($mailcmd = 'C:\BLATJ\BLATJ.EXE'; など)してく
# ださい。このコマンドが存在しない場合は、WwwMail は動作しません。また、
# 存在していても、メール送信の設定が行われていない場合があります。詳細
# はプロバイダやサーバーの管理者にお問い合わせください。
$mailcmd = '/usr/lib/sendmail';



492 :474:03/01/24 20:28 ID:i/64hvW7
# ★ 送信結果メッセージ(ヘッダ)
# <<END_OF_DATA 〜 END_OF_DATA の間を好みにあわせて変更してください。
$header = <<END_OF_DATA;
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<title>メール送信結果</title>
</head>
<body>
<h1>メール送信結果</h1>
<hr>
<p>下記のメールを送信しました。ありがとうございました。</p>
<hr>
END_OF_DATA

# ★ 送信結果メッセージ(フッタ)
# <<END_OF_DATA 〜 END_OF_DATA の間を好みにあわせて変更してください。
$footer = <<END_OF_DATA;
<hr>
<a href="../index.htm">[戻る]</a>
</body>
</html>
END_OF_DATA



493 :474:03/01/24 20:29 ID:i/64hvW7
#====================================================================
# 自己診断機能。
#====================================================================
# メール送信がうまく動作しない時に、
# http://〜/〜/wwwmail.cgi?test の形式で呼び出してください。
if ($ENV{'REQUEST_METHOD'} eq "GET") {
print "Content-type: text/html; charset=Shift_JIS\n";
print "\n";
print "<html>\n";
print "<head>\n";
print "<title>WwwMail自己診断</title>\n";
print "</head>\n";
print "<body>\n";
print "<p>CGIは正常に動作しています。</p>\n";
unless (-f $mailcmd) {
print "<p>$mailcmd がありません。</p>\n";
}
unless (-x $mailcmd) {
print "<p>$mailcmd が実行可能ではありません。</p>\n";
}
unless (-f "jcode.pl") {
print "<p>jcode.pl がありません。</p>\n";
}
unless (-f "mimew.pl") {
print "<p>mimew.pl がありません。</p>\n";
}
print "</body>\n";
print "</html>\n";
exit 0;
}



494 :nobodyさん:03/01/24 20:30 ID:i/64hvW7
#====================================================================
# 本体
#====================================================================

#
# ライブラリの呼び出し
#
require "jcode.pl";
require "mimew.pl";

#
# 入力値を読み取る
#
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
@a = split(/&/, $query_string);
foreach $x (@a) {
($name, $value) = split(/=/, $x);
$name =~ tr/+/ /;
$name =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert(*name, "jis");
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
$value =~ s/[\r\n]+/\n/g;
&jcode'convert(*value, "jis");
if ($FORM{$name} eq "") {
$FORM{$name} = $value;
$FORM[$cnt++] = $name;


495 :nobodyさん:03/01/24 20:31 ID:i/64hvW7
} else {
$FORM{$name} .= (" " . $value);
}}}

#
# EMAILが正常なメールあどれすかどうか判断する
#
if ($FORM{'EMAIL'} =~ /^[-_\.a-zA-Z0-9]+\@[-_\.a-zA-Z0-9]+$/) {
$mailfrom = $FORM{'EMAIL'};
}

#
# メールヘッダを作成する
#
{
&jcode'convert(*subject, "jis");
$mailhead = "";
$mailhead .= "Content-Type: text/plain; charset=\"iso-2022-jp\"\n";
$mailhead .= "Content-Transfer-Encoding: 7bit\n";
$mailhead .= "MIME-Version: 1.0\n";
$mailhead .= "To: $mailto\n";
if ($mailfrom) {
$mailhead .= "From: $FORM{'EMAIL'}\n";
$mailhead .= "Cc: $FORM{'EMAIL'}\n";
} else {
$mailhead .= "From: $mailto\n";
}
$mailhead .= "Subject: $subject\n";
$mailhead .= "\n";}

496 :nobodyさん:03/01/24 20:33 ID:i/64hvW7
#
# メールボディを作成する
#
{
for ($i = 0; $i < $cnt; $i++) {
$mailbody .= "$FORM[$i] = $FORM{$FORM[$i]}\n";
}

# "." のみの行は ". " に変換する。
# 2回繰り返さないと、2行連続で "." のみの行に対応できない
# "." を ".." に変換する処理が一般的だそうだが、あえて、
# "." を ". " に変換する。
$mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g;
$mailbody =~ s/(^|\n)\.(\n|$)/$1. $2/g;}
#
# メールを送信する
#
if ($mailcmd =~ /sendmail/) {
unless (open(OUT, "| $mailcmd -t")) {
&errexit("メールの送信に失敗しました。(1)");}
unless (print OUT &mimeencode($mailhead)) {
&errexit("メールの送信に失敗しました。(2)");}
unless (print OUT $mailbody) {
&errexit("メールの送信に失敗しました。(3)");}
close(OUT);
} elsif ($mailcmd =~ /BLAT/i) {
&jcode'convert(*subject, "sjis");
$cmd = "$mailcmd";
$cmd .= " -";
$cmd .= " -t $mailto";
$cmd .= " -s \"$subject\"";
if ($mailfrom) {

497 :nobodyさん:03/01/24 20:35 ID:i/64hvW7
$cmd .= " -c $mailfrom";
$cmd .= " -f $mailfrom";}
unless (open(OUT, "| $cmd > NUL:")) {
&errexit("メールの送信に失敗しました。(4)");}
&jcode'convert(*mailbody, "sjis");
unless (print OUT $mailbody) {&errexit("メールの送信に失敗しました。(5)");}
&jcode'convert(*mailbody, "jis");close(OUT);} else {&errexit("メール送信コマンド $mailcmd が存在しません。");}




498 :nobodyさん:03/01/24 20:36 ID:i/64hvW7
#
# ブラウザ画面に送信結果を書き出す
#
{&jcode'convert(*header, "sjis");
&jcode'convert(*footer, "sjis");
$mail = $mailhead . $mailbody;
&jcode'convert(*mail, "euc");
$mail =~ s/&/&/g;
$mail =~ s/"/"/g;
$mail =~ s/</</g;
$mail =~ s/>/>/g;
$mail =~ s/\n/<BR>/g;
&jcode'convert(*mail, "sjis");print "Content-type: text/html\n";
print "\n";
print "$header\n";
print "$mail\n";
print "$footer\n";
}

#
# エラーメッセージを出力して終了
#


499 :nobodyさん:03/01/24 20:36 ID:i/64hvW7
sub errexit {
local($err) = @_;
local($msg);
$msg = "Content-type: text/html\n";
$msg .= "\n";
$msg .= "<html>\n";
$msg .= "<head>\n";
$msg .= "<meta http-equiv=\"Content-type\" content=\"text/html; charset=Shift_JIS\">\n";
$msg .= "<title>メール送信結果</title>\n";
$msg .= "</head>\n";
$msg .= "<body>\n";
$msg .= "<h1>メール送信結果</h1>\n";
$msg .= "<hr>\n";
$msg .= "<p>$err</p>\n";
$msg .= "<p>ブラウザの [戻る] ボタンで戻ってください。</p>\n";
$msg .= "<hr>\n";
$msg .= "</body>\n";
$msg .= "</html>\n";
&jcode'convert(*msg, "sjis");
print $msg;exit(0);}
長くて申し訳ないです。どうでしょうか?

500 :nobodyさん:03/01/24 20:37 ID:???
全部キタ━━━━━━(゚∀゚)━━━━━━ !!!???

501 :nobodyさん:03/01/24 20:42 ID:???
>>499
そこまでやるなら別ファイルにした方がWYSIWYGなエディタで編集出来るし便利だと思うんだが。

502 :nobodyさん:03/01/24 20:56 ID:???
ちゃんと読んでないが、メールの本文に目障りな文が入るってことじゃなくて、
ブラウザに表示される画面をどうにかしたいってことか?

503 :474:03/01/24 21:12 ID:i/64hvW7
>>502
そうなんです。
送信しましたの画面で(この下は474のコピペです)


下記のメールを送信しました。ありがとうございました。


--------------------------------------------------------------------------------
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
To: aaa@aaa
From: aaa@aaa
Subject:wwwmailからのメール

氏名 =
住所 =

といった感じなのですが
「下記のメールを〜」の下にそのまま「氏名=」と来たほうが
送信した側もわかりやすいように思うのですが
「Content-Type:〜Subject:wwwmailからのメール」までを
消す(送信者に見えなくする)方法はありますか?
よろしくお願いします。


504 : :03/01/24 21:14 ID:???
すいません。教えて下さい。
MySQLは3.23.52、PHPは4.2.3PHPです。
はっきり言って初心者なんですが、実用化を目指して勉強がてらデータベースを作ろうとしてスクリプト書いてました。
メモ帳使っての手書きスクリプトですが、アップロードしてみたらソコソコいけそうな感じでした。
ですが、あげたスクリプトを色々いじっているうちに変になってしまい収拾がつかなくなってしまったので全てのテーブル名を確認して
それらを全て削除したいのですが、やり方が分かりません。
色んなホームページを回ってみると出ているのですが、その殆どが個人のPC上で行う方法が多いので、はたしてそのスクリプトが正しいのか分かりません。
実際実験してみてもうまくいかないので、多分ちょっとばっかり違うのでしょう。
TELNET接続も経験がないのと第一に使えないので、そのやり方も採れません。
テーブルを全て見るためのスクリプトと削除のためのスクリプトを教えてもらえないでしょうか?
ちなみに私が色々見て回ってこうかなと思って書いたものは…
<?
$hostname="localhost"; $port="3306"; $database="abcdefg";
$username="abcdefg"; $password="hogehoge";
$conn = mysql_connect($hostname,$database,$password);
mysql($database,"SHOW TABLE");
?>
…で最後の行を色々見たものをコピペって試しています。



505 :nobodyさん:03/01/24 21:44 ID:???
>>503
# ブラウザ画面に送信結果を書き出す
って行があるだろ。その下あたりを修正すりゃいい。つかPerl勉強してこい。

>>504
SHOW TABLESと DROP TABLEを繰り返しするのじゃダメ?
うまくいかないって言われても…

506 :504:03/01/24 22:05 ID:+KMlj8qB
繰り返しても何でも構わないんですが
上に書いたので繋がらないので分からないんですよ。
mysql($database,"CREATE TABLE $table( no int not null AUTO_INCREMENT,
hoge varchar(100),PRIMARY KEY(no))");
でちゃんとテーブル作れるんですがね。

507 :nobodyさん:03/01/24 23:06 ID:???
>>498

$mail = "$mailhead $mailbody"
から"$mailheadを抜く。

508 :nobodyさん:03/01/24 23:36 ID:???
>>495
>$mailhead .= "Cc: $FORM{'EMAIL'}\n";
最低限、この行は抜いてください。

509 :nobodyさん:03/01/24 23:43 ID:???
>504
何度も繰り返しになるが、テストはローカルでやれ。
アップしてテストをするな。

510 :504、506:03/01/24 23:57 ID:???
>509
今となっては同感です。
だからこそ、サーバー上のを見つけて削除したいんです。

511 :nobodyさん:03/01/25 00:18 ID:???
>510
だから、消し方もローカルでテストしてやりなさいって。
まずはローカルで同じ様なデータ作って消すやり方探せばいいでしょ。
ローカルなら、他人への迷惑をあまり考えずに色々と手探りで試せるんだから。
それはやってるのか?

512 :nobodyさん:03/01/25 00:20 ID:???
>>511
あんまり流行ってないよ。

513 :nobodyさん:03/01/25 00:28 ID:???
( ゚д゚)・・・・

514 :504、506、509:03/01/25 00:33 ID:???
諸々の事情でPCでそれを行う事ができません。
サーバー上でしかできないので、サーバーにアップしてやるしかないのです。


515 :nobodyさん:03/01/25 00:50 ID:???
勝手な言い草だな(藁
一生、悩んでなさいってこった。以後放置願います>all

516 :nobodyさん:03/01/25 00:52 ID:???
ここPerlスレなんですが。

PHP + MySQL
http://pc.2ch.net/test/read.cgi/php/983250751/
【PHP】質問スレッド Part6
http://pc.2ch.net/test/read.cgi/php/1038988518/
mysql ヘルプ!
http://pc.2ch.net/test/read.cgi/php/1011683282/

517 : :03/01/25 00:54 ID:???
>516
確かに!(^o^)

518 :ビビオパーラー:03/01/25 01:10 ID:???
>>504
PHPはようしらんが、、
http://search.net-newbie.com/php/ref.mysql.html
ここみたか?
で〜
>$hostname="localhost"; $port="3306"; $database="abcdefg";
>$username="abcdefg"; $password="hogehoge";

>$conn = mysql_connect($hostname,$database,$password);

$conn = mysql_connect($hostname,$username,$password);
mysql_select_db($database)

>mysql($database,"SHOW TABLE");

$result = mysql_query("SHOW TABLES");
while($row=mysql_fetch_row($result)) {
mysql_query("DROP TABLE $row[0]");
}
でダメかな?
ていうかPHPスレで聞け!perlなら
use DBI;
$dsn="DBI:mysqlPP:abcdefg:localhost";
$dbh=DBI->connect($dsn,'abcdefg','hoge');
$sth=$dbh->prepare('SHOW TABLES');
$sth->execute;
while(@row=$sth->fetchrow_array) {
$dbh->do("DROP TABLE $row[0]");
}
かな?

519 :474:03/01/25 01:48 ID:YsIz1kts
皆さん色々勉強させてもらい助かりました。
>>508
助言を見まして検索したところ
&jcode'convert(*subject, "jis");
$mailhead = "To: $mailto\n";
# if ($FORM{'EMAIL'} ne "(unknown)") {       
# $mailhead .= "Cc: $FORM{'EMAIL'}\n";   
# }   

こうすれば問題ないですか?
なんとなくまずいのはわかるのですが
良ければ詳しく教えていただけますか?
                      


520 :nobodyさん:03/01/25 02:05 ID:???
>>519
どこにメールが行くかを考える。
存在しないメールアドレスの場合も調べてね。

521 :nobodyさん:03/01/25 13:31 ID:???

Webデータの取得にLWP::Simpleのget()を使いたいのですけど、
このモジュールはcgiを許可しているフリーのhosting service
には入れてないことの方が多いのでしょうか? あるいは有料の
hosting serviceであれば入ってるでしょうか?

522 :nobodyさん:03/01/25 15:42 ID:???
>>521
何が楽しうてそんなもん入れんといかんのだ。

523 :nobodyさん:03/01/25 17:23 ID:???
>>521
有料のトコなら管理者に頼めば入れてくれるかもしれないけど、
必要なモジュールは基本的には自分でインストールするもの
と考えたほうがいいよ。
http://search.cpan.org/author/GAAS/libwww-perl-5.69/

524 :nobodyさん:03/01/25 17:56 ID:???
>>523
LWPって通信用でしょ?
入れても使えないところが多いと思う。

525 :nobodyさん:03/01/25 18:29 ID:???
個人で入れても使えないようにってどうやってるのかな。
ダミーのモジュールを入れておいて優先順位?

526 :nobodyさん:03/01/25 18:39 ID:???
>>525
単に外へのアクセスを遮断すれば良し。

527 :初心者です。:03/01/25 18:44 ID:WHb7ynpf

CGI.pmを使用してて
perlに -w でCGIを実行すると
$data = param("form_name");
でフォームからデータを受け取って
このデータを下記のように条件式にかけると
if ( $data eq "hoge" ) {
}
ってやると
Use of uninitialized value in string eq at ./test.cgi line 8

ってWARNINGでるんですけど
このWARNINGださないようにするためにはみなさんどうしてます?

528 :nobodyさん:03/01/25 18:48 ID:???
>>527
#! /usr/local/bin/perl

そもそも自分で書くので関係ないという意見もある。

529 :nobodyさん:03/01/25 19:05 ID:J+PAIJA/
>>528
違う。比較演算子は未定義値に使ってはいけない。

file?form_name=
で呼ばれたら、$dataは'' (空文字列?)だけど、
file?hoge=fuga
で呼ばれたら、$dataはundefになる。

つまり、こう書いておけばいい。
$data = '' unless defined $data;

530 :nobodyさん:03/01/25 19:18 ID:???
definedが分かったら、existも知るといいかも。。

おまけ:
undef, '', 0 はifに入れてみるとはみんなFALSEになるんだけど、
違うものだと思え。

よくある間違いで、

if (! $name) { error('名前を入れてちょ'); }

これは、$nameを0にできない。こう書くべきだね。
if ($name eq '') { ... }

531 :nobodyさん:03/01/25 19:19 ID:???
>>530
ぱいじゃさん。しつこいです。

532 :nobodyさん:03/01/25 19:19 ID:???
変な文字が・・修正

入れてみると、みんなFALSEになる

533 :初心者です。:03/01/25 19:27 ID:???
>>529-530
ありがとぅ。


534 :nobodyさん:03/01/25 20:04 ID:???
$data = param("form_name") || '';

普通こうします。。

535 :nobodyさん:03/01/25 20:23 ID:???
>>534
>>530は見た?それだと0が入らない

536 :nobodyさん:03/01/25 20:30 ID:TLIt72nG
サブルーチン内で、

return(next);

ってできますか?

537 :nobodyさん:03/01/25 20:36 ID:???
>>536
できるかどうかは試せば分かる

538 :nobodyさん:03/01/25 20:51 ID:???
質問するとしたら、なんで〜な動作をするのですか?困っているのですが。

みたいな感じになるはずだ。

539 :nobodyさん:03/01/25 21:05 ID:TLIt72nG
できました。

540 : 521:03/01/26 04:49 ID:???
例えばgoogleにアクセスして、検索結果を取得して処理するみたいな
ことをしたいのですけど、LWP::Simpleモジュールを使わなくても
可能でしょうか?

541 :nobodyさん:03/01/26 06:05 ID:???
>>540
そもそも外部と通信できなければ無理だってば。

542 :nobodyさん:03/01/26 10:04 ID:???
えっと、私はCGIでゲームを作っているんですが・・・
ログインができないんです。

if ($USER_DATA[0] eq $PW) {
ログイン完了
}
else {
パスワードちがう
}

とこのようにしているんですが、パスワードが合っていても違うという画面が出てしまいます。
出力して調べてみましたが
もちろん、$USER_DATA[0]と$PWの値は一緒でした(調べたときは両方に'a'という文字列をいれた)。

・・・どうすれば、きちんとした分岐結果が出るでしょうか?
ifの使い方が間違っているんでしょうか

543 : :03/01/26 10:42 ID:???
$USER_DATA[0] eq "$PW"
$PWを""で囲むとか?

544 :nobodyさん:03/01/26 10:44 ID:???
>>542
if文の使い方は合ってるけど……本当に中身は 'a' だけ?
空白とか改行文字が付いてるってことはない?


545 :nobodyさん:03/01/26 10:53 ID:???
>>542
大文字小文字。どちらかに改行コードが残っていないか。など確認。

546 :nobodyさん:03/01/26 11:44 ID:P6Egn5Az
とあるチャットで外部フォームでの発言が流行っているのですが、
文字に改装を加えて投稿するにはどうすれば良いのでしょうか。
タグは使用不可で、スクリプトはCOMCHATです。


もし板違いだったらすいません。

547 :nobodyさん:03/01/26 12:11 ID:???
>>546
スクリプト側で対処しているなら無理でしょう。


548 :nobodyさん:03/01/26 12:18 ID:P6Egn5Az
>>547
他の常連さんが成功してるみたいなので。。

549 :nobodyさん:03/01/26 12:20 ID:???
>>548
常連さんに聞くのはどうでしょう?

550 :nobodyさん:03/01/26 12:30 ID:P6Egn5Az
>>549
あまり喋らないので、気まずい...

551 :nobodyさん:03/01/26 12:47 ID:zx28i3UH
アクセスアップキャンペーン中
http://ginrai.hp.infoseek.co.jp/

552 :nobodyさん:03/01/26 12:58 ID:10NDG8/s
>>543
なんでもかんでもダブルクオートで囲むのはよろしくない。
それに、今はそれは全然関係ない。

>>542
自分が問題だと思っている部分だけじゃなくて、全体を出してみろ。

553 :nobodyさん:03/01/26 16:22 ID:???
cronって何?どうやって設定するんですか?

554 :nobodyさん:03/01/26 17:09 ID:???
>>553
時間を決めて実行するための仕組み。
専用レンタルサーバとかじゃないと使えないから気にしなくていい。
スレ的には、「ある時間にCGIを実行したいんだけど」な気がするから、
「CGIが読み込まれたときに時間をチェックして実行するかどうか決めろ」

555 :nobodyさん:03/01/26 17:56 ID:lX4NK7pu
ジオシティーズのPerlのパスってなんですかぁ??

556 :nobodyさん:03/01/26 18:44 ID:bvYo1DgE
>>555
そもそもCGI使えないだろ

557 :nobodyさん:03/01/26 21:22 ID:???
>>554
仕組みというかただのデーモン(プログラム)。

558 :nobodyさん:03/01/26 22:37 ID:???
$aaaと同じ内容の$bbbを作るにはどうすればよいのですか?

559 :nobodyさん:03/01/26 22:46 ID:???
>>558
$bbb = $aaa;


560 :nobodyさん:03/01/26 23:30 ID:2o0R3o6+
消費税の計算なのですが、
小数点以下切捨てということで、
$tax = int($5*$total/100);
という感じでやっているのですが、
小数点以下四捨五入で・・・とするにはどうしたらいいのでしょうか?
初歩的な質問ですいません・・・。

561 :nobodyさん:03/01/26 23:37 ID:???
>>560
0.5 足してから切り捨て

562 :nobodyさん:03/01/26 23:40 ID:???
>>560
$tax = int(($total * 0.05) + 0.5);

四捨五入は、0.5を足して小数点以下を切り落とす。


563 :560:03/01/26 23:47 ID:???
>>561-562
ありがとうございます!!!
$tax = int(($total * 0.05) + 0.5);
↑ちなみにこの2重括弧はやっぱり付けた方がいいんですか?
$tax = int($total * 0.05 + 0.5);
だけだとだめですか?


564 :nobodyさん:03/01/26 23:51 ID:???
>>563
数学と同じで*は+より先に評価されるのでいらないだろうね。

565 :562:03/01/26 23:52 ID:???
>>563
あー、括弧はなくてもいいです。なんかクセでつけちゃった。


566 :560:03/01/26 23:56 ID:???
ありがとうございます。
0.5足して切り捨て、いわれれば納得!!!
つーか、最初の書き方変でしたね。
$tax = int($5*$total/100);
$5ってなんだ・・・(w
どうもありがとうございました。

567 :nobodyさん:03/01/27 00:31 ID:???
>>566
マッチ演算子にて5番目にマッチした部分。

568 :nobodyさん:03/01/27 05:26 ID:???
perlの掲示板で、書き込み内容の、
>がついてる文章を<BLOCKQUOTE>で括りたいんですが、

$message =~ s/a(.*)\n/<blockquote>$1<\/blockquote>/g;

とすると、

aあいうえお
aかきくけこ
さしすせそ



<BLOCKQUOTE>あいうえお</BLOCKQUOTE>
<BLOCKQUOTE>かきくけこ</BLOCKQUOTE>
さしすせそ

になってしまいます。

<BLOCKQUOTE>あいうえお<BR>
かきくけこ</BLOCKQUOTE>
さしすせそ

にする方法と、aじゃなくて、>で出来る方法(>を使うとなぜかエラーが出ます)
を教えてください。

569 :568:03/01/27 05:27 ID:???
>>568
あ、この方法の欠点見付けました。
>で始まる行でも、改行してなかったら引用と認識しませんね。

>で始まる行の後に、文章を書かない事はないと思いますが、万が一のために、\nがなくてもOKなようにしたいんですが。

570 :568:03/01/27 06:31 ID:???
>の個数だけ<BLOCKQUOTE><P>を頭に追加、行末の\nを<BR>に変換、
>の個数が一個減るたびにその直前に</P></BLOCKQUOTE>をつける、でいいんでしょうかね。

571 :nobodyさん:03/01/27 07:42 ID:x/t6q6bL
1.最初に見つかった引用符(>)を<BLOCKQUOTE>に置換
2.先読みを利用して最後の引用符の行に</BLOCKQUOTE>を追加
3.その他の引用符をすべて消去

http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html

572 :nobodyさん:03/01/27 08:21 ID:Npl77MmW
-------------------------------------------
本日23:00時より祭りを開催いたします。
是非、参加下さいます様、お願いします。
携帯PHS
迷惑メールサイト一斉訪問お祭り開催
http://jbbs.shitaraba.com/news/bbs/read.cgi?BBS=853&KEY=1043335260
-------------------------------------------

573 :568:03/01/27 08:26 ID:???
>>571
原理は分かりましたが、書き方が分からないです。

574 :nobodyさん:03/01/27 08:30 ID:???
>>573
修行不足だな。

575 :568:03/01/27 08:31 ID:???
>>574
すみません。

576 :bloom:03/01/27 08:53 ID:2qTkpcb7
http://www.agemasukudasai.com/bloom/

577 :nobodyさん:03/01/27 15:48 ID:???
すいません、
モジュールは自分で鯖にインストールしないといけないのでしょうか?
例えばLWPなどは一般的にどのような手順を踏めば使えるのでしょうか。

578 :nobodyさん:03/01/27 16:10 ID:???
>>577
前も来てなかった?

一般的にはモジュール配布サイトの指示に従う。だけれど。

579 :nobodyさん:03/01/27 16:11 ID:x/t6q6bL
>568
これが理解出来れば後は余裕かと
$message =~ s|>([^>\n]+)(\n*)(?!>)([^>]+)$|$1</AA>$2$3|s;

>577
場所によるけど良いレンタル鯖だとメジャーなモジュールは
インストール済みだったりする
http://www.zdnet.co.jp/help/tips/linux/l0495.html

580 :577:03/01/27 16:21 ID:???
>>578-579
ありがとうございます。
>前も来てなかった?
もし過去ログにあったなら見逃してました、すみません。

試してみて、また分からなくなったら来ます。
その時もよろしくお願いします。

581 :nobodyさん:03/01/27 16:44 ID:???
>580
LWPのインストールはPerlと関係ないのでもう来ないでください。

582 :nobodyさん:03/01/27 17:00 ID:???
12chというスクリプトを使ってるんですけどmegabbsにある等幅チェックなるものを移植しようとしてます。
どなたか改造するポイントを教えてください。

因みに使っているバージョンは
ttp://mitinoku.jp/script/12ch_2.02.lzh
これです。

bbs.cgiというファイルを改造すればいいみたいです。
動作は、等幅チェックボタンをONにして書き込むと
<tt>「書き込み内容」</tt>
と、こんな風に<tt>タグでカキコの内容をはさむようにしたいです。

では、宜しくお願いいたしますです・・・。

583 :582:03/01/27 17:04 ID:???
megabbsでは等幅チェックの処理をこんな風にやってるみたいです

↓書き込みフォームの等幅チェック部分
等幅<input type=checkbox name=touhaba value=on>

↓$com(コメント)を<tt>ではさむ処理。
if ($email eq "haba" || $email eq "tohaba" ||$FORM{touhaba} eq "on"){$com="<tt>$com</tt>";$tt=1;}



584 :nobodyさん:03/01/27 17:05 ID:???
>>582

【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/


585 :582:03/01/27 17:09 ID:???
>>584
うっ、・・すれ違いすいません・・・。そちらの方で聞いてきます。
すいませんでした。

586 :nobodyさん:03/01/27 18:01 ID:???
海外製などのCGIを使うと、「ポ」など一部の文字で不具合が発生するのですが何故でしょうか。
どなたか分かる方いらっしゃいましたら教えてください。

587 :nobodyさん:03/01/27 18:42 ID:KZuCQWmj
「こういうのがやりたい」と「どうやってもこれができない」にスレッド分割しない?

588 :nobodyさん:03/01/27 21:32 ID:???
>>586
2バイト文字の処理を行っていないから?
とにかく >>1 から始めよ。

>>587
レスの半分近くが誘導になる悪寒ガクガクブルブル

589 :nobodyさん:03/01/27 21:46 ID:???
$sub =~ s/^Re:\[[0-9]+\]\s//g;
の[0-9]+、ようするにその部分に入る数字を
$renoって変数に格納するにはどうしたら?

590 :nobodyさん:03/01/27 21:49 ID:o8/ytwxU
($reno) = $sub =~ /^Re:\[([0-9]+)\]\s/;

591 :nobodyさん:03/01/27 21:50 ID:???
>>589-590

お前ら、\dが泣いています。

592 :nobodyさん:03/01/27 21:52 ID:???
数字を3桁ずつコンマ区切りにするスクリプトを作ってみた。
某有名所のスクリプトと比べると30%ほど速いみたいだけど…
評価してもらえるかな…?
改善点とか、悪いところとか…。
初期値は $old です…。
ドキドキ


$i = 0;
$new = "";
foreach $n (reverse(split //, $old)){
    $n .= "," unless ($i % 3);
    $new = $n . $txt;
    $i ++;
}
$new =~ s/,$//;


593 :nobodyさん:03/01/27 21:54 ID:???
>>592
さっきもっとシンプルなの上がってたじゃん。

594 :nobodyさん:03/01/27 22:02 ID:???
>>590
できました。
ありがとうございました。

595 :nobodyさん:03/01/27 22:09 ID:???
>>593
どこ?
「速さ」より「シンプルさ」を重視すべきかな?

596 :nobodyさん:03/01/27 22:18 ID:???
Perlメモに載ってる

597 :腐れ厨房(゚腐゚):03/01/27 22:58 ID:9+vb6fjV
ダウンロド&あらしスクリプトをperlで書いてんですけどLWPがうまく使えナインでcurlインストルして外部プログラムでポストするよにしタンです。
んで本題なんですけどhtmlファイルの中にポストボタンがあてcurlでポストすると302 foundのhtmlが出力されんです。そん中に書いてあるURLを今度はgetするとちゃんと希望したhtmlが入手できんですけどこれどゆ仕組みですか?
302foundのリンク先をブラウザが読んで飛んでんでしょか?それともヘダにそゆ内緒の跳び先が書いてあんでしょか?ヘダ見たけどごく普通だたと思うんですけど。

598 :f:03/01/27 23:00 ID:???
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 24時間受付  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  hentaimtt@k9.dion.ne.jp
   グローバル探偵事務局 



599 : ◆PerlqhxPVA :03/01/27 23:50 ID:???
>>592
$old = 1225678901;
while($old =~ s/(\d{1,3}?)$//){ unshift(@_,$&); };
print join(',',@_);

ちゅうのはカコ悪いか(w

>>597
Apacheの仕組みを覚えれ。

600 :nobodyさん:03/01/28 00:34 ID:???
>>597
ネタなのかマジなのかよくわからん。

601 :nobodyさん:03/01/28 00:35 ID:???
ttp://www.din.or.jp/~ohzaki/perl.htm
ここがPerlメモ

3桁ごとのカンマはこれが一番シンプルじゃねーかな。

602 :nobodyさん:03/01/28 03:04 ID:???
>>597
Apacheだと、エラー時に好きなページを出力できる。
cgiを起動する事もできたりする。

603 :g:03/01/28 04:31 ID:QDc4rCif
すいません、今本を見ながら一生懸命猿まねしてるんですが、、、
スラッシュの反対向きのやつってどうやって入力するのですか?
それらしきキーを押してるのに「\」が出てきます。
誰か教えてください。

604 :g:03/01/28 04:54 ID:QDc4rCif
>>603
フォントを変えるとできました。
お騒がせしました。

605 :nobodyさん:03/01/28 06:37 ID:???
すみません、ご存知の方いらっしゃれば教えて下さい。

あまり詳しくは言えないので非常に申し訳ないのですが、
ある2つのcgiをWin98(Celeron500)+Apache2+ActivePerl5.8で動かしていて全く問題がなかったのですが、
Win2000(Celeron500)で同じサーバ構成を作り(たぶん)稼動させた所、
1つは非常に快適に動作し、1つは動かないに等しい程おそくなってしまいました。

CGIを自分でかけないので分からない、というのがすでに問題なのですが、
こう言ったことは起こりうると推測出来るでしょうか?

サーバの構築ミスとかも有るかもしれません、、、。

ご教授頂ければ幸いです、、、、。

606 :592:03/01/28 06:47 ID:???
確かに似たようなのあるね
すまそ

607 :腐れ厨房(゚腐゚):03/01/28 07:15 ID:vWtuYxkU
>>602
なるホドです。んでそれをブラウザはどやて認識してんですか?
あよくよくヘダ見たら302fondの時「Location: http://hoge.com/hoge.html」とあたです。これでしょか?

608 :nobodyさん:03/01/28 09:15 ID:???
>>607
帰れ。せめてhttpのRFCぐらい目を通してこい。
あと、日本語も勉強してこような。

609 :nobodyさん:03/01/28 09:19 ID:???
>>605
起こりうる可能性はいくらでもありますね
ソフトウェア的な設定ミスから
ハードウェアやネットワークの障害などなど

ひとまず順を追って用意した環境が間違いないか確認しましょう

>>607
まずは日本語を(ry

610 :605:03/01/28 10:05 ID:???
>>609さん
レスありがとうございます。
そうですね、おちついて順をおってもう一度やってみます。

CGIのプログラムを外注に出しているので、
「おい動かなかったぞ!」と文句つけてみたものの
自分の設定ミスでしたという訳にもいかず(w

ただもともと動いていたCGIなので、どちらかといえば自分の設定ミスの方が
ありえるかな?と、その可能性をあたってみたかったという所です。

いやまったくお恥ずかしい話なんですが。

611 :nobodyさん:03/01/28 10:42 ID:???
ここperl

612 :609:03/01/28 12:15 ID:???
>>610
外注先がコンサルしてくれないって痛いですね
大変だと思いますがガンガってくださいまし

スレ違いネタになってきたのでこの辺で、、

613 :nobodyさん:03/01/28 15:26 ID:???
ここDQN

614 :腐れ厨房(゚腐゚):03/01/28 16:53 ID:vWtuYxkU
>>608
んな難解なヘンテコ文章読むの強要する低脳さんです。乞食が「このくらいの寒さひもじさなんだお前ら根性なし。」と騒いでるみたいです。

ところですべての文字列にマチさしたいんですけど
([.]|[^.])*?
てヤてんですけどカコとパイプだらけでカコ悪いです。もちょとスマトな方法ないですか?
 全能な正規表現
  (??{ code })
  (?{ code })
これ試してみましたけどなんかダメでしたです。Perl5.8です。

615 :nobodyさん:03/01/28 17:02 ID:???
>>614
.*じゃ駄目なのか?

あと、HTTPについては、http://www.studyinghttp.net/
日本語だから読めるでしょ?

とにかく、日本語を書くように。

616 :nobodyさん:03/01/28 17:08 ID:oYLjlQQn
全ての文字列にマッチってなんじゃろ?
.* ということではなくて?

あとLWP::UserAgentはredirectの解決もしてくれるから便利だよ。
curlはよくしらないけど。

617 :nobodyさん:03/01/28 17:09 ID:oYLjlQQn
かぶった。

618 :腐れ厨房(゚腐゚):03/01/28 17:20 ID:vWtuYxkU
.*だと空白とか\nとか\rにマチしナインで都合悪いんです。
あとLWPは何度やてもうまく逝かなかたんで諦めましたです。curlはwgetライクで使い安いです。

619 :nobodyさん:03/01/28 17:39 ID:???
腐れ厨房←他人のコテハン使うの止めろ。
荒らし←どうせ2chだろ。

氏ね

620 :nobodyさん:03/01/28 17:48 ID:???
man perlre読め。
/.*/s

621 :腐れ厨房(゚腐゚):03/01/28 18:42 ID:vWtuYxkU
>>620
ありがとです。たたまたま分かりましたです。

>>619
名無し風情がエラそです。

622 :けんすう ◆mTj9hjLz9w :03/01/28 19:22 ID:???
腐れ厨房さんだ!本物?

623 :nobodyさん:03/01/28 19:46 ID:wCME9ZCu
open(FILEA,"/var/tmp/a");
open(FILEB,"/var/tmp/b");
while ($linea=<FILEA>) {
while ($lineb=<FILEB>){
if ( $linea eq $lineb ){
処理・・・
}
}

見たいな事ってできないんでしょうか?
上記のコードだと FILEAのループが
1行分で終了してしまうのですが・・



624 :nobodyさん:03/01/28 19:53 ID:???
>>623
配列に代入してforeachを使ってみてはどうだろうか

625 :nobodyさん:03/01/28 19:55 ID:???
>>623
goto

626 :nobodyさん:03/01/28 19:57 ID:wCME9ZCu
>>624-625
ほぅほぅ。
とにかく623のコードじゃダメなわけね。
なんでダメなんだろ?理由がわからない。


627 :nobodyさん:03/01/28 20:01 ID:???
>626
ファイルハンドルからのデータ取得は、一度最後まで行ったらseekしないと戻らないから。

628 :nobodyさん:03/01/28 20:07 ID:???
>>627
なるほど!!
じゃぁ1個目のWhile文のなかでFILEBをOPENするか、Seekで先頭にもどすかすれば
だいじょうぶかな?
こんど試してみます。今、環境がないんで。

629 :nobodyさん:03/01/28 20:07 ID:VjdgexrL
>>623
一個目のwhile抜けた後でseek FILEB,0,0でもすれば?


188 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)