【Perl】初心者コーナー Part19

このエントリーをはてなブックマークに追加
1nobodyさん
初めに→「perl」その物のスレです。

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

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

あとは>>2-10にまかせた。
2nobodyさん: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/
3nobodyさん:03/01/11 13:54 ID:???
[過去ログ]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/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
42,3:03/01/11 13:55 ID:???
他、なんかある?
5:03/01/11 13:57 ID:???
>>4
いや。
あrがとう。
6nobodyさん:03/01/11 14:01 ID:???
>>1-
O2
7nobodyさん: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行で書けないもんでしょーか?
8nobodyさん:03/01/11 14:05 ID:???
>>7
リファレンスのデリファレンス
9前スレ993:03/01/11 14:05 ID:???
>>前998
そうですね。
正確に測ったわけではないですが、異常なほど数値が片寄ります。
例えば、1-100までの整数が出るようにした場合、数回連続で同じ数字を取得したり、
同じような条件下では絶対に出ないような数字もあります。

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


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

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

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

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

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

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

また頭が弱いため、見ても理解出来ないと思うので、どのように求めているのかも簡潔に教えてくれると嬉しいです。
12nobodyさん:03/01/11 14:17 ID:???
>9
それってさ、srandを複数回行なってない?
srandは1回行なえばそれでいいんだが。
ソース出して。
13nobodyさん: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を何回もやれば、スタート位置が毎回戻るから、同じ結果にしかならんぞ。
149:03/01/11 14:23 ID:???
ちょいとソースは…無理(一万行近くあるので)

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

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

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

その「ランダムによって分ける」と言う作業自体は非常に単純な処理にしてあるので、
おそらく自分ではあくしていると思います。
で、どんな角度から考えてもやはり原因は「ランダム」が「ランダムじゃない」と言う事にあるようです。
159:03/01/11 14:25 ID:???
>>13
ありがとう。
すごくありがとう。
16nobodyさん:03/01/11 14:30 ID:2PtCQo+x
srandを2回以上やるのは禁止。

srand、randで、1方向ハッシュみたいに使うのも禁止。
それは他に移行してもそのまま動くのか?と。
17nobodyさん:03/01/11 14:32 ID:P/LXfaGE
種が同じなら同じ花しか咲かない
18nobodyさん:03/01/11 14:34 ID:2PtCQo+x
で、種から花を作る、そのアルゴリズムは統一されているのか。ということ。
1916=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')}/){

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

基本的にはスクリプトの頭で1回だけsrandすればいい。
Perl5以降なら、それすらも必要ない。
229:03/01/11 15:13 ID:???
では、ずうずうしいようですが
品質の良い種を皆様から多数頂けないでしょうか?

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

23nobodyさん:03/01/11 15:14 ID:???
>22
品質のいい種は前スレで出てたあれ。
理由は今のあんたに説明してもわからんだろ。
ちゃんと覚えたいなら駱駝本(プログラミングPerl)買え。
249:03/01/11 15:18 ID:???
あと、以下の記述は俺が使う条件下ではあまり品質が合っていないようです。

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

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

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

「平均的に全て出てくる」
と言う条件を満たしたのがグットです。
259:03/01/11 15:19 ID:???
>>22
分かりました。
買います。

26nobodyさん:03/01/11 15:22 ID:???
>>24
> 「連続して同じ数字が出ない」
どんな乱数でもこの条件は満たせないと思うんだがな。
任意の二数を取り出して同じ数字な確率ってほんの1/10000でないかね?
27nobodyさん:03/01/11 15:24 ID:???
>>26
言ってる事が矛盾してないか?
それと1/100だと思うぞ。
28nobodyさん:03/01/11 15:27 ID:???
>>27
あ、1/100だわ。スマン…寝ぼけてたようだ。
矛盾はしてない気がする。千なり一万なり生成して連続して同じ数字が出ない
様な乱数系列ってほとんどあり得ないと思うんだが。
299:03/01/11 15:32 ID:???
>>26と28
ええと、
srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
の記述では、例えばCGIでPERLを使い、1アクセスで1つの数字を求めたとします。

ですが、連打して求めてしまうと同じ数字が返って来る事が非常に多いのです。
当たり前と言えば当たり前なんですが、これをなんとかしたいです。
3026:03/01/11 15:37 ID:???
スマン。とことんまで寝てたらしい。やっと理解した(苦笑)
種ねぇ…その記述よりいいのなんておもいつかんわ。
31nobodyさん:03/01/11 15:42 ID:???
>>29
アクセスカウンタも一緒に与えれば。
329:03/01/11 15:52 ID:???
>>31
アイディアありがとう御座います。
でも、多くの人に連打される状況下にあるのでちょっと難しいかも…


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


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

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

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

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

以上。

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

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

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

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

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

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

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

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

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

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

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

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

そこで提案したのが>>32なのですが、実際の記述方法が分からないため、
2ちゃんねらーの方々の知恵を借りようと思ってやってきました。
389:03/01/11 16:49 ID:???
>>37も自分です。(すみません)

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

連打アクセスでもランダム性が保持出来るのなら、ありがたくちょうだいいたします。
39nobodyさん:03/01/11 16:53 ID:???

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

>>34記述が書けないならレスするな。
1回も答えてないのにしつこいって…。久々にワラタよ。
40nobodyさん:03/01/11 16:54 ID:???
>>38
「$$」は、特殊変数です。
んーPerl関連の書籍とかには載っているかと思うけれど(苦笑)
いわゆる、PID、自身のスクリプトがPerlで実行されたときに付与される起動プロセス番号です。(UNIX系のみ?)
41nobodyさん: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
結構レスしてると思うんだけどね?
439:03/01/11 17:05 ID:???
>>39
いえ、別に答えてないとまでは…

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

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

>>40
ありがとうございます。
その方法を一度テストしてみますm(__)m
449:03/01/11 17:09 ID:???
>>42もありがとうござしますた。

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

ただ、ps とか gzip 起動しているからその分、ちょっとプロセス数を増やして行くと
、Resource temporary unavailableがすぐに出る。
そのときに件の式がどういう挙動しているかはよく分からない。
Perl5自身に任したほうが良いような気がするな。
46nobodyさん: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なりを式に組み込む手もある。
47nobodyさん:03/01/11 17:27 ID:???
>今ちょっと毎秒20hitを模擬してみたが
ってどうやってやるんですか?
F5連打じゃないっすよね?telnet?専用クライアントでもあるんでしょうか?
48yani ◆saNSktNEdQ :03/01/11 17:31 ID:85OU0JtJ
>>47
子プロセス20個起動して、ある時刻に一斉に件の式をprint
49nobodyさん:03/01/11 18:02 ID:???
も、もうちょっと具体的に知りたい。
>子プロセス20個起動
がすでにわからん。これはどういうところ勉強すればいいんでしょう?
50nobodyさん:03/01/11 18:33 ID:???
51nobodyさん:03/01/11 19:47 ID:???
>>9
っていうか掲示板なんだから、自分以外にも利益がある(可能性がある)
ことを書けや。。出来ないなら出て行け。

はっきり言わせてもらうと、おまえより賢いやつはこの板には沢山いる。
自分の間違いに気づけ。そして、勘違い発言を増殖させるな。
52nobodyさん:03/01/11 20:48 ID:L83LO6Ji
正規表現で、例えば<B></B>でくくられた部分をとってくるにはどう書けばいいでしょうか?
例えば、"<B>hoge</B><B>fuge</B>"
っていうので、hogeってとこだけをまず取りたいのですが、何も考えないで書くと
hoge</B><B>fugeが取れてしまって困っています。何か上手い書き方があったら教えて
下さい。
意味不明だったらすみません。
53nobodyさん:03/01/11 20:52 ID:???
>52
正規表現に最小のマッチングというのがある。
調べてみ。

それよりも"<B>hoge<B>hage</B>hige</B>"という文字列だったらどういう処理にするつもり?
それによってかなりやり方が変わるから。
54nobodyさん:03/01/11 20:59 ID:???
>>53
ありがとうございます!
調べた結果、?を一文字つけるだけで解決できました。

 入れ子構造になってるのは・・難しそうだから考えないようにしようかなと思ってます・・。
5554:03/01/11 21:02 ID:???
あ、でも、"<B>hoge<B>hage</B>hige</B>"というものに対して、
hoge<B>hage</B>higeが取れれば、やれることが広がるので、
上手く書く書き方がありましたら教えて頂けると嬉しいです。
56nobodyさん:03/01/11 21:12 ID:???
>それよりも"<B>hoge<B>hage</B>hige</B>"という文字列だったらどういう処理にするつもり?

タグでネストは無いと思いますが…。
# 閉じ忘れはあるかもしれないですが。
57nobodyさん:03/01/11 21:23 ID:???
>>56
<TABLE>の中に<TABLE>とか、<DIV>の中に<DIV>とか。
58nobodyさん:03/01/11 21:40 ID:???
>>57
おー、なるほど。
<div><p><div></div></p></div>とか、ありですね。
599: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`);
#最後にこれを置いて完成。

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

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

60nobodyさん: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
プログラマーはユーザーがどんな意表をついた入力をしても大丈夫なようにシステムを考えないといけない。
そういうところで気を抜くとセキュリティホールができたりしちゃうからね。
61nobodyさん:03/01/11 22:05 ID:???
すべての入力を、例外なく処理できないならば、それはバグである。
みんなが、まともなブラウザ、まともな思考回路を持っているとは限らない。

あと、一番忘れやすいのは、$ENV{HTTP_*}は汚染されているということ。
$ENV{HTTP_USER_AGENT}とかは特に。これをタグの無効化をせずにHTMLでの
出力に使ったりすると、クロスサイトスクリプティングちゅーやつが発生する。
62nobodyさん: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に、ビットのローテートできる演算子ってあるのかな?無いのかな?
63nobodyさん:03/01/11 23:39 ID:???
>>62
びっとのローテートは >> << だよん。
$unko>>1 で、1さんに……じゃなくて、$unkoを右に1ビットシフト。空いたビットは0で埋め立て。

しかしまぁ、以前にも「完全な乱数は無理」ってレスがあったはずなのに、しつこいのがいるね。
コンピューターの作る乱数なんぞ「計算」で求めてるにすぎないのだから、いくら種を工夫した
ところで、分布に偏りができてしまうのは仕方が無い。
649は必ず読むこと。:03/01/12 00:07 ID:pN++dQ77
/dev/randomを、Perlから使いたいなと思ってちょっと調べてみた。一番簡単な方法は、
Crypt::Randomになるのかな。他にもあるかも。

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

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

FreeBSDなら、rndcontrolでIRQを設定しておかないと、/dev/randomのエントロピープール(?)
がなかなかたまらないから注意すること。
65nobodyさん: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 生成ルーチンの中で、こんなことをやっているのがありますた。
参考程度に。
66nobodyさん:03/01/12 00:30 ID:pN++dQ77
あぁ。Math::Random::MTはseedに32bit以上の数を渡す事ができない・・
これでは満足できないでしょ。
67nobodyさん: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で起動し
試したい式を入れれば評価結果が表示猿。
69nobodyさん:03/01/12 07:21 ID:???
>>58
> <div><p><div></div></p></div>
pはインライン要素のみ
とか、揚げ足とってみる。
70nobodyさん: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 になるの?
71nobodyさん:03/01/12 12:19 ID:tUI5W5YD
画像アップ掲示板を改造しているのですが、
フルパスからファイル名だけを取り出す方法が分かりません。
OSによって:\/など区切りが違いますけど
どうやって取り出せばいいのでしょうか?
72nobodyさん:03/01/12 12:21 ID:???
>>70
myで宣言した変数が$Package::varnameで参照できるの??
初耳だYO
73nobodyさん: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にでも人数を表示するということはできませんか?
もしそういうことができるなら誰かアドバイスください★
74nobodyさん:03/01/12 12:30 ID:???
>>71
$fullpath = 'c:\hoge/hoge:hoge\aaa.ccc';
($file) = $fullpath =~ m|([^:\\/]*$)|;
print $file;
75nobodyさん:03/01/12 12:40 ID:???
>>73
マルチで書き込むのはやめてYO
76nobodyさん:03/01/12 12:54 ID:pN++dQ77
>>70
our $a;なら、そうなる。
779:03/01/12 12:57 ID:???
>>64

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

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


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

とても勉強になりました。(イロイロな意味で)
7871:03/01/12 13:01 ID:tUI5W5YD
>>74
ありがとうございました。
無事取得できました。
79nobodyさん:03/01/12 13:12 ID:???
>>63
> $unko >> 1 で、1さんに……じゃなくて、$unkoを右に1ビットシフト。空いたビットは0で埋め立て。
いやあのそのそれだと「ビットシフト」なのではないかと(苦笑)
01001011 RightRoll.b ===> 10100101
なんて具合になるのがあればと(苦笑)@キャリーフラグが立ってもよい(笑)

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

>>77
エロエロがんばってくらさいです(^-^)
80nobodyさん:03/01/12 13:28 ID:eJ8Igs3E
>>73
すみません。
マルチポストってマナー違反ってしりませんでした。
ごめんなさい。
81nobodyさん:03/01/12 13:34 ID:5wjAToqi
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://web2001.kakiko.com/koma/
8258:03/01/12 13:54 ID:???
>>69
まったくその通りでした。
<div><div><div></div></div></div>
<div><div><p></p></div></div>
等が正しいです。
83nobodyさん:03/01/12 14:09 ID:???
>>80

わかったらもうくんな低脳
8463:03/01/12 22:24 ID:???
>>79
うわっ!おっしゃる通り、シフトとローテートを勘違いしてますた!(恥ずかしい…)
ビット演算子を駆使すればローテートは実現可能だけど、あんまりスマートじゃない。
Perlにもキャリーフラグがあればなあ(w
85nobody:03/01/13 11:10 ID:CGEjRZ/e
初めまして。
質問させてください。

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

どなたか、上手い方法をご教授願えますでしょうか。
86nobodyさん:03/01/13 11:26 ID:???
参照で渡せば
87nobodyさん:03/01/13 11:27 ID:eXLsypXq
88nobodyさん: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
}
89nobodyさん: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";
}
90nobodyさん: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 ]); #コピーを作って渡す
91nobodyさん:03/01/13 13:20 ID:???
>>90
ぉぉ、なるほど!
-wオプション考慮も良いですね〜
勉強になりますm(_ _)m
92nobodyさん:03/01/13 14:26 ID:???
open で失敗した時に
open(〜)||〜;
で後者には $hogehoge = 1; とかは掛けないのでしょうか?
一応自分でやった限りは dieとexit と &hogehoge 等のサブルーチン
しか使えませんでした。
93nobodyさん:03/01/13 14:41 ID:???
>>92
||
じゃなく
or
をどうぞ
94nobodyさん:03/01/13 14:48 ID:???
>>92
ちなみに優先順位の違いです
open(〜) || $hogehoge = 1;

(open(〜) || $hogehoge) = 1;
となり
orは=より優先順位が低いので
open(〜) || ($hogehoge = 1);
と同じになります。。
95nobodyさん: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の方とは別の処理になるのでしょうか?
よろしくお願いします。
96nobodyさん:03/01/13 21:48 ID:7xzy2NEr
   ______________
 /:\.____\
 |: ̄\(∩´∀`) \  <先生!こんなのがありました!
 |:在  |: ̄ ̄ U ̄:|
http://saitama.gasuki.com/mona/
97nobody: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

----ここまで
99yani ◆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整数になることだが、、、なぜだ???
100yani ◆saNSktNEdQ :03/01/13 23:34 ID:ziR7v8Q2
× # Time::HiRes, Digest::MD5とも perl5では標準モジュール
◯ # Time::HiRes, Digest::MD5とも perl5.8では標準モジュール
10190: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;
}
10290:03/01/13 23:42 ID:???
で、やってること自体は88と同じ。自分は拡張性が低い方法を書いてるだけ。・・
103nobodyさん:03/01/13 23:43 ID:???
>>98
解凍でけたけど、できなくって困ってるのだったら
「できますか」なんてきくなよ。
104nobodyさん:03/01/14 00:21 ID:uaEPu1zE
画像ファイルをアップロードしたり書き換えたりする
プログラムを書いているのですが、
初めてアップロードする場合はよいのですが、
ファイルを書き換える(上書き)時、
どうも、ブラウザのキャッシュが悪さをしているようで
ファイル上では書き変わっているのに、ブラウザ表示上では
以前の画像ファイルが表示されてしまう事があります。
(この場合何度かリロードしないと本来のファイルを表示してくれません)

これを、書き換えた後はキャッシュを利用しないようには出来ないでしょうか?
105nobodyさん:03/01/14 00:25 ID:yqTa2j5Q
106yani ◆saNSktNEdQ :03/01/14 01:29 ID:HMXRNLis
>>99
事故レス
当たり前だった。
107貧乏パーラー:03/01/14 02:44 ID:???
>>98.103
長いスクリプト貼り付ける時つかったらて思いますがいかがでしょう?
108nobodyさん: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 等を無視してくれよるのもおるから。
109104:03/01/14 03:54 ID:???
>>108
ほぉほぉなるほど!!
それならば、別ファイル(?)として扱われるわけですね。

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

今日は遅いので明日にでも試させて頂きますー。
110NOBODYたん: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);
--
111nobodyさん:03/01/14 04:58 ID:/jKmOe0i
他鯖のhtmlを読むにはどうすればいいですか?
112nobodyさん:03/01/14 05:00 ID:???
socketとかconnectとかreadとか。
113NOBODYたん: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/
114nobodyさん:03/01/14 05:45 ID:KVuhYobl
MXなどで集めた動画をみんなでココにUPしよう!
http://www6.ocn.ne.jp/~endou/ten.html
115nobodyさん:03/01/14 06:42 ID:/jKmOe0i
>>113
ありがとうございます。
LWPを使って読めるようになりました。
作っているのは、よくある○○弁変換みたいな奴なんですが、
読み込むサイズによって過負荷になってしまいますよね。
サイズのチェック(一定量処理したらやめるような)は
どうすればいいのでしょうか。
Simpleのheadを使ってみたのですが
yahooさえcontent-lengthを返さないのでダメでした。
116111:03/01/14 06:53 ID:???
ん、UserAgentのmax_size([$bytes]) 、これでできそうですね。
117nobodyさん:03/01/14 07:19 ID:ea2A6+p/
>>115
あまりに時間がかかりすぎるようなら、サーバーが500を返して勝手に止まるから、
それでいいじゃねえか
118nobodyさん:03/01/14 10:37 ID:???
おいおい、過負荷で止まって「いいじゃねぇか」は
ないだろ。そういうCGIが増殖するから、あんまり
CGIがまともにつかえそうなところがなくなるんだよ。
119nobodyさん: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;

120nobodyさん: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をいれる。
122nobodyさん: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' );

とやればいけるのですが、使いたい文字をアクセサリの「文字コード表」
から拾ってきても「?」になってしまいます。
文字コードはわかるからそこから指定できるのではないかと思いますが
その指定方法がわかりません。
どのように指定したらいいでしょうか?
123104:03/01/15 01:59 ID:???
>>108
無事非キャッシュ成功いたしました。
ありがとうございました。
124nobodyさん:03/01/15 02:08 ID:ybtk15GB
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はこういう制限があるという事でしょうか?宜しくお願いします。
127nobodyさん:03/01/15 07:39 ID:???
$str = "1234";を最初の2文字"12"にしたいのですが、
どうすればよろしいでしょうか。

今は、chop $str;chop $str;でやっています。
VBAでいう、left(string,2)の様な関数?はありますか?
128nobodyさん:03/01/15 07:59 ID:???
substr($target_str,0,2)
VBAは良く知らんがN88BasicのMIDの感じだな。
129127:03/01/15 09:02 ID:???
>>128
サンクス
130nobodyさん:03/01/15 09:56 ID:2BGcsgzZ
>>126
作者日本人メール汁
131nobodyさん: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ファイルは生成されていないようです。

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

あと、ここはPerlスレだからCGIに関する質問はできるだけ他のスレでやってな。
133131:03/01/15 11:00 ID:???
>>132
すみません、CGIスレに移動します。
13485:03/01/15 12:12 ID:lPFUjXcR
>>110,101
ありがとうございます。
参照は初級者向けじゃないみたいで、例文に参照以外の
わからない箇所が多いので地道に勉強中。

ソース丸写し以外で使えるよう頑張ります。
135山崎渉:03/01/15 13:31 ID:???
(^^)
136nobodyさん:03/01/15 14:07 ID:???
perlスクリプト中で
新たなPATHを追加したいと思ったんですけど
$ENV{'PATH'} .= ';c:\hogehoge';
ではうまく行きませんでした どうやればいいのでしょうか?
137nobodyさん:03/01/15 15:38 ID:5j+QQZeA
ご近所さんみたいなメール転送の仕組みを作りたいんですが...
色んなアカウントに送られてきたメールを片っ端からDBに登録したいのです。
なんかいい参考書やサイトを知りませんか?

よろしくおながいしますm(_ _)m
138vvv:03/01/15 15:42 ID:ZNHQB8hs
http://www6.ocn.ne.jp/~endou/index2.html
    ★YAHOOOプロフィール★
139nobodyさん:03/01/15 18:26 ID:???
>>137
スレ違い
140nobodyさん:03/01/15 19:13 ID:POOF/+eY
カテゴリで検索可能なサーチエンジンやリンク集などのデータファイルは、
下記の場合、どちらが効率的なのでしょう?

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

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

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

141nobodyさん:03/01/15 20:20 ID:mlzRLcDE
@tbl[100][100];
じゃ二次元テーブルってできないのですか?
アルゴリズムを教えてください。
142nobodyさん:03/01/15 20:23 ID:???
>>141 自己レス
すいません、二次元配列で検索した直ぐに分かりました・・・
はぁ・・・容易にはできないのですね。がんばって作ります。
14358:03/01/15 21:20 ID:???
$tbl[100][100] = 'Hello?';
print $tbl[100][100];
144nobodyさん:03/01/15 22:04 ID:???
>>141
中身的にはリファレンスの配列になるけど、単にそれだけで使うなら
普通にそうやって書くだけで二次元配列になると思うが。
145144:03/01/15 23:45 ID:???
さすがに書けるよな…<連書規制に引っかかってた
リストの二次元配列だから面倒だわ、忘れてくれぃ。
146nobodyさん:03/01/16 07:53 ID:RDhobq0J
-$aaa=>[$bbb,$ccc]
っていうのがあるのですがこの"[]"は何をやってるのですか?
147nobodyさん:03/01/16 13:09 ID:???
148nobody: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が空文字になってしまいます。
超初歩だとは思いますがどなたか解決法を教えてくださらないでしょうか。
149nobodyさん:03/01/16 19:43 ID:???
$body = qq(<body bgcolor="$bgcolor" background="$background" text="$text" link="$link" vlink="$vlink" alink="$alink">);

$bodyが消える理由はわからんが。
スコープ外とかいうオチじゃないかな?
150nobodyさん:03/01/16 20:00 ID:???
>>148
つうかなんのスクリプトよ。
話はそこからだろ?
151nobodyさん:03/01/16 20:46 ID:???
阿呆?
152nobodyさん:03/01/16 21:02 ID:???
>>148
つうかなんちゅうスクリプトの描き方だよ。
149氏のように書き換えてみてから実行して美奈代
153143:03/01/16 21:23 ID:???
>>147
ども、読破しました。
ところで@a->[1];の書き方ってありでしょうか。
素直に$a[1];と書けばいいんでしょうけど…。
154nobodyさん: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には何が入って
どういう意味で使ってるかわかりません。
教えて下さい。よろしくお願いします。
156nobodyさん:03/01/16 22:27 ID:t/gkHHSA
>>155
expireの意味知ってますか?
クッキーの有効期限設定してるんだろ
expireなしなら、セッション間のみ有効なクッキー
CGIの話ね
157nobody:03/01/16 22:30 ID:6WICp0JY
>>149
ありがとうございました。
それをコピペしたら普通にできました。

原因はじっくり解明したいと思います…。
158nobodyさん:03/01/16 22:45 ID:Tl7JXy0h
mod_perl 用にソースを改造してんだけど、
ほとんどのサイトでは

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

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

mod_perl で動かすときって何か他にやらなきゃいけないことってあるん?
例えば eval 使ってはだめとか、
オブジェクトはちゃんとDESTORYしないとだめとか。
159nobodyさん:03/01/16 22:49 ID:rmmrK9en
exitを使わない。require ... で読み込んだ物に注意する。
160nobodyさん:03/01/17 00:43 ID:???
ファイルをOpenして
その中にある hoge 言う文字がいくつあるかカウントしたいんですが
どうすればいいんでしょう?
open (HOGE,"hoge.txt");
?????
close(HOGE);
161nobodyさん: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;

これでいいような気がする。
162nobodyさん:03/01/17 02:19 ID:???
$count += map {1} /(hoge)/g while <HOGE>;
163nobodyさん:03/01/17 02:32 ID:???
>>160
Cだとものすごく簡単だけど、Perlだとそんなに難しいのか?
164nobodyさん:03/01/17 15:03 ID:l3uVFji3
オブジェクト指向Perlを始めたのですが、
メソッド(サブルーチン)の引数が正しくない
(引数の数が正しくないとか、数字であるべきところが文字列だったとか)
の場合、どうすればいいのでしょうか?

エラーを表示?
エラーを返して終了?
単にreturn?
165nobodyさん:03/01/17 15:27 ID:???
>>164
エラーコードを返す。
166nobodyさん:03/01/17 15:34 ID:???
>>164
他人の書いたコードも見てみるといいよ。
あと、標準の Carp モジュールも調べてみたら。
167nobodyさん:03/01/17 18:46 ID:95w9V4FK
煮詰まっています。画像アップ掲示板を
設置しようとしています。
とりあえず入り口は出来たのですが、肝心の出口がどうやら設定がおかしい
ようで"画像をアップできません"とエラーが出ます。
恐らく下記の設定方法を間違えているのでエラーが出るのだと思います。

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

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

色々調べたのですが、ここの部分だけハッキリ答えが出せません。
どうか出口の設定方法を教えてください。
168nobodyさん:03/01/17 19:00 ID:zt5lo6Y5
# に書いてあるとおりにやればいいんじゃ?
今どう設定してあってエラーでてるの?
てか何を悩んでるの?
169nobodyさん:03/01/17 19:01 ID:???
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
て書いてくれ。

下げてみるテスト(鬱
170nobodyさん:03/01/17 19:10 ID:mT3lwUSe
MAC OS10.2.3でFTPにアップロードするとファイルが
壊れて0バイトになってしまいます。
使用ソフトはTransmitとNetFinderです。
アップするファイルはCGIのためアスキーモードで転送しています。
でもファイルが壊れてしまいます。
9だとうまくアップできるんですが・・・
どなたか詳しい人教えて下さい
171nobodyさん: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";
172nobodyさん:03/01/17 20:06 ID:???
ログを追記式にしていたのですが
ファイルがかなり大きくなってきて
ファイルを全て読み込まず
ファイルの末尾から一行ずつ読み込みたいのですが、
どうしたらいいのでしょうか?
173nobodyさん:03/01/17 20:22 ID:???
>>172
無理です。日毎、週毎などでログファイルを切っていきましょう。
174nobodyさん:03/01/17 20:26 ID:???
でもtailみたいなプログラムもあるのですから可能なのではないですか?
175nobodyさん: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
過去ログに似たようなのがあったような記憶が・・・
176nobodyさん:03/01/17 20:30 ID:???
>>174
んぢゃ tail を使う。
print `tail -n $num logfilename`;
177173:03/01/17 20:31 ID:???
>>174
tailを知っていたのなら、ソース読んじゃえばいいのに。
全部読み込んでいるよ。まあ、細かく言えばPerlのようには
読んではいないけど、全てを読み込まないのに最後を知る
方法はないです。
178nobodyさん:03/01/17 20:44 ID:GSBryIjf
>>177おまえはあほか。seekすれば、読まなくても飛べる。あと、便利なモジュールがある。File::ReadBackwards
179173:03/01/17 20:47 ID:???
seekは読み込んでいないとでも?
180nobodyさん:03/01/17 20:56 ID:GSBryIjf
場所を指定しただけ。読むっていうのはもちろん中身を読み込むって意味でしょ?


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

ってこれでいいのか?(スクリプトが別鯖にある場合は不可)
182143:03/01/17 21:12 ID:???
>>154
その文だと{}で無名のハッシュをつくり、
\でリファレンスしませんか?
(\@a)->[1];がまっとう(?)ですので、@a->[1];は使うべきでは無いようですね。
ありがとうございました。
183nobodyさん:03/01/17 23:05 ID:???
>>165-166
レスありがとうございます。

にしてもOOP Perlはサパーリ和歌欄買った。
184173:03/01/17 23:14 ID:???
>>180
指定して飛ぶときに、全然読んでないわけ?OSも
185nobodyさん:03/01/17 23:14 ID:xM0Mt5EA
PerlでもRubyでもそうだけど、
class Person {
 int age;
 String name, tel;
 URL homepage;
}
みたいなメンバ変数の型みたいな考え方無しのオブジェクト指向って
のが理解できなくて立ち往生してるのですが、どうやればすんなり
受け入れられますか?
186nobodyさん: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を入れたらいいのですか?
188nobodyさん:03/01/17 23:37 ID:???
>187
そのCGIスクリプトの説明を読むか。
配布されているサイトで聞いてください。
ここはPerlのコーディングの話をするスレッドです。
189nobodyさん:03/01/17 23:43 ID:???
>>185
多重ハッシュに慣れろ
190超初心者:03/01/17 23:55 ID:???
>>188
説明書にも何も書いていなくサイトの管理人にメールを出したけど
返事がずっとないんで…
191nobodyさん:03/01/17 23:57 ID:???
Perlは分かるの?
親切な人が説明してくれても分からなかったらしょうがないでしょ。
192185:03/01/18 00:07 ID:???
>>189
例えば
$self->{'age'}
って変数があっても、
$self->{'age'}='nobodyさん' とか $self->{'age'}='http://www.2ch.net'
ってすることができるわけで、
いくつかモジュールを読んでみたけど
たんにメソッドの詰め合わせ的な意味しかないようが気がするんです。
193nobodyさん:03/01/18 00:20 ID:O9FxKTGG
来客者は書き込めるが、他の来客者が書いたものは見られないようなcgiってありますか?
194nobodyさん: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
196nobodyさん: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
198nobodyさん:03/01/18 14:51 ID:???
perlプレビュー機能のあるエディタってありますか?
perl Builderぐらいしかないのでしょうか?
199HOGE: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;
200nobodyさん:03/01/18 15:56 ID:???
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
201HOGE:03/01/18 16:05 ID:5ALQn0gp
1:冗長なフォーマット部分を別のファイルにしようと思いマスタ。
2:Webで調べていると、require文を使えば、
「その場所にかかれているかのように
スクリプトを取り込むことができる」と知りました。
3:でも、$hogeの部分は空のままです。
require文の解釈が間違っていることは自覚しています。
名前空間のせいで、変数が受け渡されていないのかもしれません。
しかし、今の私には具体的にどうすればいいかがわかりません。
質問に2レスもつかってすみません。どうか教えてください。
202vvv:03/01/18 16:09 ID:+GEyyv8c
http://www6.ocn.ne.jp/~endou/index2.html
     ★YAHOOOプロフィール★
203nobodyさん:03/01/18 16:28 ID:???
>>201
our $hoge = 'hoge';

print <<HOGE;
204nobodyさん:03/01/18 17:08 ID:lJXENDzT
質問です。
和鳥の無料WebスペースにCGIのカウンタを置こうと思い、探して来ました。
見つけてきたそのCGIは、説明書きによるとcgi-bin以下に画像ファイルを置いて、
それを引っ張り出してくるものらしい。
けど、和鳥には、「セキュリティ上の都合から、cgi-bin以下に画像ファイルを置いても
表示されないので、別の場所に置いてくれ。」との旨が書いてあり、そのままではうまくいかなかった。
そこで、画像ディレクトリを別の場所へ移したわけなのですが、、、えーと、そしたら
「$imgdir = './Gif/';」の部分は、このままではダメなのでしょうか?
試しにそのままやってみたらエラーになったので、省略せずにURLそのまま入れてみたりしたのですが、
やはりだめでした。
画像自体はちゃんとうpされていたので、私的にはその部分になにか間違いがあるのかなと
思ったのですが。。
どしたら良いでしょうか。すいません、どなたか教えて下さいです。
205nobodyさん:03/01/18 17:11 ID:???
>204
1:パスが間違っている(HTMLの勉強しろ)
2:パーミッションが間違っている(パーミッションの勉強しろ)
3:そもそもperlの話じゃないからココではスレ違い(常識を勉強しろ)
4:配布元か、和鳥スレで聞け
206nobodyさん:03/01/18 17:15 ID:???
>>199
#!usr/local/perl も不安といえば不安だな

>>204
URLで入れたら動きそうな気がするが、大文字小文字は間違ってない?
ここで言ってるURLは http:// から始まるやつね
207204:03/01/18 17:25 ID:lJXENDzT
>>205
スイマセン スイマセン スイマセン

>>206
ありがとです。
んー、でも大文字小文字はあってるような。。
208204:03/01/18 17:26 ID:???
下げ忘れてしもた。。ごめんサイ。。
209 ◆PxAOHU.zVE :03/01/18 19:16 ID:???
>>164
エラーフラグ立てた上で、オブジェクトを返しておいて
is_error,error_message等のメソッドを用意するってのは?
210nobodyさん:03/01/18 22:39 ID:???
>>206-207
CGIが画像ファイルを直接読むんだろ。URLじゃ駄目に決まってるじゃねーか。
211nobodyさん:03/01/18 22:42 ID:???
>>210
最低でもSocketか。
212nobodyさん:03/01/19 00:27 ID:???
>>208
質問はageで
213nobodyさん:03/01/19 06:35 ID:5v4SEFP4
配列についてなのですが、配列名に変数って使えないのでしょうか?
@hoge$iっていう配列を使いたいのですがうまくいきません。
214nobodyさん:03/01/19 06:49 ID:???
>213
@{$i}
215nobodyさん:03/01/19 08:10 ID:???
>>213
$hoge[$i]
216nobodyさん:03/01/19 08:26 ID:???
>213
@{"hoge$i"}
217nobodyさん: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を取得するための、
スマートな方法はありませんでしょうか。
220nobodyさん:03/01/19 16:17 ID:???
if ($ENV{QUERY_STRING} !~ /=/) {
...
}
221219:03/01/19 16:23 ID:???
>>220さん回答ありがとうございます。できました。うれしいです。
222nobodyさん:03/01/19 17:24 ID:???
いや、適当に考えただけだけど、これくらいしか手段が無いような気がするから・・
223nobodyさん: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:中のホスト名をチェックしているからね。
227nobodyさん:03/01/19 18:20 ID:xgcJy6Dh
聞くべきか悩みましたがすみませんが質問させていただきます。
cgiの画像アップ形式掲示板ってありますよね?
サーバーの容量もあるとは思いますが、大体みなさん設置
するに当たって"最大投稿データ量"ってどれくらいに設定されてますか?
後"最大投稿数"はどれくらいで適切なんですか?
変な質問ですみません。

228bbb:03/01/19 18:44 ID:TK7ESc1C
http://www6.ocn.ne.jp/~endou/index2.html
         YAHOOO情報
229nobodyさん:03/01/19 22:30 ID:???
>>227
ここが何のスレか分かってる?
230nobodyさん:03/01/19 22:37 ID:hs+tYJ37
データベース系のCGIをwakwakサーバに設置したいのですが、
cgi-binの中にhtmlファイルを入れると呼び出すことができません。

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

こういうサーバではhtmlを使うcgiは置けないのでしょうか?
231nobodyさん:03/01/19 23:23 ID:???
>>230
スレ違い

ここはCGIの質問スレではありません。
232nobodyさん: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("現在サーバが投稿を受け付けません。");

234nobodyさん: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";
です。宜しくお願い致します。<(_ _)>
236nobodyさん:03/01/20 01:00 ID:???
ファイル名が14バイト制限を受けているとか。
それはないか…。
237nobodyさん:03/01/20 01:07 ID:???
niftyってルートに独自ディレクトリ作って
OKでしたっけ?

$workdir = "./";
にしてみるとか。
238nobodyさん: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";

とりあえず。
239nobodyさん:03/01/20 15:53 ID:emhs1xha
初歩的な質問かもしれませんが、よろしくお願いします。
あるファイルoutput.txtの内容が次のようだったとします。
02あいうえお
01あかさたな
00かきくけこ
このファイルの先頭に1行つけたして、
03たちつてと
02あいうえお
01あかさたな
00かきくけこ
としたいのですが、どうすればいいでしょうか?
ファイルの末尾に付け足すのはかんたんなのですが・・
seek(OUT,0,0);をやて書き込んでも、一部、上書きになって
消える部分があるし 困っています。
240nobodyさん:03/01/20 16:00 ID:???
>>239
unshift
241239:03/01/20 16:05 ID:emhs1xha
>>240
ありがとうございます unshiftを調べたところ
配列を扱うもののようです。いったん配列に取り込まないと
いけないということでしょうか?そうだとすれば
while(<IN>) {
$mes .= $_;
}
print OUT $newmes . $mes;
とするのと同じで、メモリをくってしまいますので、
だめっぽいです。
242nobodyさん: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 $!;
243nobodyさん:03/01/20 16:39 ID:???
>>239
この質問は過去に何度か出ていた気がする。
その時の回答は確か
*書きこむ時は普通に追記して、読み出すときにreverseかける
*テンポラリファイルを作ってリネームする
の二つ。
前者は読み出す時に配列に入れなきゃならないし、
後者は排他制御が面倒な予感。
もっと良い方法があるなら俺も知りたい。
244nobodyさん: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 がすでに存在するときは上記の操作を行わない。

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

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

この方法の問題点は、中途半端な状態で残ったoutput.txt.tmpをどう扱うか、にある。
246nobodyさん:03/01/20 19:43 ID:8rfuT7oA
ファイル中の文字数を数えようと思い、次のように書きましたが、全角が2文字部としてカウントしてしまいます
半角全角問わずに一文字ずつ数えたいのですがどうしたらいいでしょうか
foreach(<LOG>){
@str1 = split //,;
$total += @str1;
}
247劉邦:03/01/20 20:09 ID:QoYi51kG
良いperlの入門サイト教えてください。
248nobodyさん:03/01/20 20:10 ID:???
>>247
ここ。
249nobodyさん: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.つくって
実行してみたんですけど、アドレスが表示されないんですよね・・・
我慢できなくなって、解答を参照したところそう違いはなく、その
解答をコピーしてやってみたんですが、それもうまくいきません。
何が原因だと思いますか?
251nobodyさん:03/01/20 21:29 ID:???
>>250
とりあえず藻前の書いたスクリプト書いてみ。
ちなみに解答そのままだと、address.txtからは読めないぞ。
252nobodyさん:03/01/20 21:48 ID:???
>>250
解答が1つしかないのが気にいらないなぁ・・・
無駄でももっといろんな解法があると思うのに。
253nobodyさん: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
標準入力から直接入力した場合はちゃんと機能するようですが・・・
256251:03/01/20 22:27 ID:???
>>255
ファイルオープンしてごにょごにょ。そのページだと9かね。
ま、一通り読んでみ。
257劉邦:03/01/20 22:30 ID:QoYi51kG
9すか・・?!
入門者に対するイジメじゃないですかね・・・(^-^;A
258nobodyさん:03/01/20 22:31 ID:qfdWUXSE
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/hiroyuki/
259劉邦:03/01/20 22:39 ID:QoYi51kG
入門サイトかえることにしますた。
260nobodyさん:03/01/20 23:43 ID:???
しかし、このページって著作権とか大丈夫なんかねぇ?
初めてのperl第一版そのままっぽいんだけど翻訳元とか全く書いてないし
訳されたと言う日付の時点で既に第二版すら出版されてるわけだが。

というわけで、サイトの中身そのものはそう悪くないぞ。
れっきとした書籍のほとんどそのままだからな(笑)
ま、当然本屋で本物を買ってきた方が良いけど。三千円ね。
261nobodyさん:03/01/21 00:39 ID:???
>>260
てか、今更Perl4もねえだろ。使ってる鯖が古いならともかくさ。
本気でやろうと思ったら、最新の駱駝を買うのが一番だろ。
262nobodyさん: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:締切]としたいのです。

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

ここで質問したいなら、ソースくらい出しなさい。
264nobodyさん: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;}


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



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

$opoentime = join("", @daydata); → $opentime = join("", @daydata);
266nobodyさん: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
267nobodyさん:03/01/21 02:23 ID:???
>>246
JPerl使わないとムリじゃない?
268nobodyさん:03/01/21 02:43 ID:???
      ,一-、
     / ̄ l |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ■■-っ < >>267 んな こたァない
    ´∀`/    \__________
   __/|Y/\.
 Ё|__ | /  |
     | У..  |
269nobodyさん: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";
270nobodyさん:03/01/21 07:25 ID:???
質問です
if($a =~ /(aaa|bbb)/){⊂}
と同じように
if($a eq /(aaa|bbb)/){⊂}
という書き方はOKでしょうか?
271nobodyさん:03/01/21 07:35 ID:???
>>270
NG。
正規表現の部分が、上は $a を評価するのに対して、下は $_ に対して評価した値と
$a を文字列として比較するので、わけわからん結果になる。
272za:03/01/21 10:02 ID:???

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

失礼。「&#??????;」です。(^^;
274nobodyさん: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
にあります。よろしくお願いします。
275herm:03/01/21 13:07 ID:???
>>274
そのスクリプトが入ってるdirectoryに
「AddDefaultCharset EUC-JP」と書いた「.htaccess」を入れるとか。
276274:03/01/21 13:13 ID:f7zzet+E
>275
いれてみたら出来ました!本当にありがとうございました!
277246:03/01/21 14:09 ID:NhrI/baV
>>269
できました!!
jcode使ったりいろいろ悩んだのですがこれで解決しました。ありがとうございました。
278nobodyさん:03/01/21 15:01 ID:???
>>274
ファイルを保存するときに文字コードを間違っているだけだろ。
279262: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; }
280nobodyさん:03/01/21 15:21 ID:???
>>279
恐ろしい計算方法だね。。
281nobodyさん:03/01/21 15:27 ID:???
>>279
>>264はアフォだって気づかなかったんだな(w
282nobodyさん:03/01/21 15:55 ID:???
でも多分当分戻ってこないよ。
283nobodyさん:03/01/21 16:16 ID:???
264ともどもにずっともどってくんな!
284nobodyさん:03/01/21 18:40 ID:???
質問です。
自分も初心者ですが>274のスクリプトが気になったんで
設置してみたんですが、記事を投稿はできても記事の削除をすると
500 Internal Server Errorが出てしまいます。
どうすれば削除することができますか?
285nobodyさん: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);
}

でも追加しとけ!
後はしらねーーー
286nobodyさん:03/01/21 19:57 ID:owIuUjTB
Perlを作るテキストソフトは秀丸で十分でしょうか?
287286:03/01/21 19:59 ID:owIuUjTB
それともう一つ質問なのですが、
ネット上にある講座などの知識だけで上達できますか?
参考書がないと歯が立たないものなんですか?
288nobodyさん:03/01/21 20:03 ID:???
>>286
あやしい言葉づかいだねぇ。
秀丸を使いこなしているのなら、もちろん十分でしょう。。

>>287
もちろんネット上のテキストだけで上達できる!
色々プログラミングしまくってくれ!!
289nobodyさん:03/01/21 20:25 ID:???
>>287
でも、一冊辞書みたいな本があると能率が上がるのも確か。
紙って発明品は偉大だよ。
290nobodyさん:03/01/21 20:57 ID:???
>>289
よい辞書をおしえてください
291nobodyさん:03/01/21 21:22 ID:???
>290
参考書籍スレに逝ってください。
292nobodyさん:03/01/21 21:25 ID:???
紙降臨
293nobodyさん:03/01/21 21:35 ID:???
寒いスレだな・・・
294nobodyさん:03/01/21 21:44 ID:???
そういえばPerlの本って一度も読んだこと無いな。漏れ。。
295239:03/01/21 22:02 ID:???
ファイルの先頭に追加の件ですが、ありがとうございました。
根本的な解決法はなかったのですね・・・

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

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

なんかサーバサイドとクライアントサイドの区別が未だに付いてない予感。
297nobodyさん:03/01/21 22:19 ID:???
>>296
アフォキタ━━━━(゚∀゚)━━━━!!!!!!
298nobodyさん:03/01/21 22:20 ID:???
歴代のこのスレで「ファイルの先頭に追記したい」という質問はよく出てきた。
そういった時の返答は大体決まってる。

ファイルの先頭に追記するのではなく、ファイルの末尾に追記して、読み込みの時にreverseしろ。
299nobodyさん:03/01/21 22:22 ID:???
>>297
アフォキタ━━━━(゚∀゚)━━━━!!!!!!
300nobodyさん:03/01/21 22:26 ID:???
なんだ? ホンとに阿呆がいるYO
301nobodyさん:03/01/21 22:28 ID:???
みんなで阿呆ゥ!
302239:03/01/21 22:49 ID:???
>>296
携帯電話側はdocomoのやつなのでjavaでiアプリを作ってます。
ある程度そっちができたので、次はサーバーサイドを作っています。
本当はサーバーサイドもjavaでいこうとしていたのですが、
今までperlを使ったことがあったのと、実装の簡単さでperlのcgiに
しました。

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

チャットにおいて、
サーバー側に持っておくログを50行までと決めておけば、
リバースでよいかな
303nobodyさん:03/01/21 22:52 ID:???
>>302
全部配列に読み込んでunshiftと言うのは?
304239:03/01/21 23:16 ID:???
>>303
はい。結局reverseもunshiftもリストに読み込む
tmpはリストは使わないがファイルアクセス

なんですよね。まずはファイルアクセスのほうを試してみます。
305nobodyさん: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";
306nobodyさん:03/01/21 23:57 ID:???
>>305
sprintfの?の部分は&#。ampersandとsharpが表示されていない。
307nobodyさん: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って、配列に読み込むっていう意味じゃなくて、ひっくり返して読む
っていうだけだと思う。が。(そうじゃないと異常にもったいない)

頻繁に先頭に追加が発生するなら、データ構造の設計がおかしい。
308nobodyさん:03/01/22 00:09 ID:NkPjRdCp
げ、途中だった。

開始時刻も、time()の戻り値の形式でいれておくこと。
適当なモジュールを使えば作れる、と思う。
309239:03/01/22 00:16 ID:???
>>307
ありがとうございます。
モジュールがあるのですね。今度調べてみようとおもいます。
普通にseekすると上書きになちゃうので・・
下から読むのも行ごとによめればいいけどそうでもなかったので

チャットなので発言ごとに毎回ファイルの先頭に追加したいので、
データ構造の設計がおかしいのですね・・
310nobodyさん:03/01/22 00:36 ID:NkPjRdCp
>>309
チャットなら、保存する量を制限する、だろうから、単純な追記では良くないね。
おそらく、50行くらいなら、メモリーに入れて処理したほうが速いと思う。(ベンチマークしてみよう!)
具体的には、@lines = <IN>; unshift(@line, 新しい行); pop(@line);
311nobodyさん:03/01/22 00:38 ID:NkPjRdCp
少し間違ってるけどわかる。だろう。・・
ベンチマークは、Benchmarkっていうモジュールが標準で付いてるから、
それをつかってやればいい
312nobodyさん: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;}
313za:03/01/22 03:21 ID:???
>>305

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

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

もともとかかれたソースコードは、jperl -Leucのオプションを使って起動させるものです。よろしくお願いいたします。
315nobodyさん: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」
です
317nobodyさん: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;
318nobodyさん:03/01/22 07:55 ID:q2TbMzAT
SSIで表示させようと以下のようなものを入れたのですが、なぜか表示されませんでした・・・

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

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

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

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

もし解られる方がいらっしゃいましたらよろしくお願い致します
319nobodyさん:03/01/22 08:00 ID:???
>>318
echo以外対応しないとか言うさーばも。
320nobodyさん:03/01/22 08:45 ID:???
私は、
フォームなどで入力された文字をまず
eucにして処理(ファイルに保存や正規表現にかけるなど)
そしてクライアントに返す寸前にeucをsjisなどに変換して
printしているのですが、
この場合、半角カナが送られてくると文字化けが起こってしまいます。
jcode.plにz2hなどの関数があるのですが、
半角は半角、全角は全角のままあつかいたいので、
なにかよい方法はありませんでしょうか?
321nobodyさん:03/01/22 09:01 ID:???
>>320
全部UTF8にする。
322bloom:03/01/22 09:06 ID:pcyTRh0d
323nobodyさん:03/01/22 09:16 ID:???
>>320
入力された文字列で漢字コードを判別している限り無理。
Shift_JISの半角カタカナ2個はeuc-jpの漢字と判別される。

>>321
わけが分かっていないなら回答しないこと。
理由は上に書いた通り、utf-8に変換しようにも元の文字列の
漢字コードがわからない限り無理。euc-jpにも半角カタカナは
一応用意されている。
324nobodyさん:03/01/22 09:22 ID:???
>>323
>入力された文字列で漢字コードを判別している限り無理。

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

ShiftJIS文字255個にEUC漢字1個。これをEUCと判断するバカはいないわけで。
325nobodyさん: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.

たすけてやってください
326nobodyさん:03/01/22 09:52 ID:???
>>315
$hoge =~ s/\[change\](.+)\[\/change\]/&kaeru($1)/eg;

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

以前は失敗したようなきがするけど、思い違いかなぁ
328nobodyさん:03/01/22 11:56 ID:???
>>327
フォームから送られてくることが前提なら、hiddenでチェック用の文字を一つ送って、
判別するとかね。昔よくやったよ。
最近のブラウザは、フォームのページの文字コードで送ってくるから、
明示的に文字コード指定しても大丈夫だと思う。
あと、最近はFORMタグでも送信する文字コード指定できるようだ。
329nobodyさん:03/01/22 11:58 ID:???
>>326
(.+?)の方がよさげ
330nobodyさん:03/01/22 12:27 ID:9ZZh+FcB



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

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

$hoge =~ s/.*(cd12.*)\n[.\n]*/$1/;
こうするしかないのでしょうか?
333nobodyさん:03/01/22 13:53 ID:???
>>331
何がしたいの?
334nobodyさん:03/01/22 14:36 ID:???
>>331
そもそもそれ動くんですか?
335nobodyさん:03/01/22 14:37 ID:???
>>326 >>329
ありがとうございました。
これで試してみます。
336nobodyさん:03/01/22 14:39 ID:???
$hoge =~ s/^.*(cd12[^\n]*)/$1/;
337336:03/01/22 14:43 ID:???
$hoge =~ s/(cd12[^\n]*)/$1/;
で十分か。

cd12と聞くと、LINNの240万円のCDプレーヤーが頭に浮かぶわけだが
338nobodyさん:03/01/22 14:49 ID:???
>>331
Can't modify scalar chop in scalar assignment
339336:03/01/22 14:58 ID:???
$hoge = $hoge =~ /^.*(cd12[^\n]*)/ ? $1 : $hoge;
あーこうか
340336:03/01/22 15:00 ID:???
$hoge = $1 if $hoge =~ /(cd12[^\n]*)/;
何度も失礼...
341nobodyさん:03/01/22 15:03 ID:???
>>336
サンクス そういう書き方ができるんですね。
342nobodyさん:03/01/22 17:04 ID:0PCOHlDz
オブジェクトのハッシュ値にファイルを読み込むには、
$this=shift;
$this->{fdata}=<パッケージ名::IN>;
でいいの?

$this->{fdata}[$nline]

みたいにしてアクセスしたいんだけど・・・
これだとハッシュ値しか戻ってこない。
343nobodyさん:03/01/22 17:04 ID:???
おっと、パッケージ名::INはファイルハンドルね。
344246: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.
のようなエラーが出てしまいます。これはどういった意味なのでしょうか?
345nobodyさん:03/01/22 18:23 ID:???
perl1行でgrepと同じ事する方法キボンヌ。

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

というのも、とあるテキスト書換えソフトでgrep出来たらいいなと。
346nobodyさん:03/01/22 18:28 ID:???
>>345
なにがダメなのかわからん。
マルチポストもやめてくれ。
347nobodyさん:03/01/22 18:30 ID:???
>>342
ハッシュ変数に配列をそのまま格納する事はできません。
配列変数のリファレンスを格納するか
その都度、無名配列を作成し、そのリファレンスからアクセスしてください。
348kazu:03/01/22 19:04 ID:dkolKxk/
教えてください。
携帯サイトをやっているのですが、
index.cgiとhtaccessで機種の特定を行い、それにあったトップページに自動転送するというシステムをやっております。
i-modeで接続した場合に、「サイトが移動しました」という表示が出ます。
これを解決する方法はないのでしょうか?
349nobodyさん:03/01/22 19:06 ID:???
>>348
index.cgiで出力結果をかえるとか。
350kazu:03/01/22 19:09 ID:dkolKxk/
全然わからないんですが、どうやって出力結果をかえるんですか?
351nobodyさん:03/01/22 19:16 ID:???
>>349が言ってるのは、
index.cgi内で携帯ごとに違うページを表示するんじゃないかな。
index.cgi -> UA判別 -> UAに対応したページを出力。

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

自分で書いたヤツじゃないとか中身を理解していないなら、そのCGIの配布元のURLを出した方がいいよ。
352nobodyさん: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:

 テスト


ソース自体が間違ってるのでしょうか? どなたか教えてください。
354nobodyさん:03/01/22 19:54 ID:???
>>353
print("Content-Type: text/html\r\n\r\n");
355nobodyさん:03/01/22 20:04 ID:NW1Un2Sy
>>348
機種にあったトップページに転送するんじゃなかったのですか?
なんでそうなるんですか?
356質問です。:03/01/22 20:35 ID:H1d15TWe
>>354
ありがとうございます。
うまくいきました。\nとか\rとかの意味がいまだにわかりませんが、
調べたほうがいいのでしょうね。
とにかく助かりました。ありがとう!
357nobodyさん:03/01/22 21:14 ID:TWTRYmp3
あの、クソ初心者なんですけど、、、
CGIって拡張子のファイル(web上の)を他人が見ることってできないのですか?
HTMLでもTXTでもJPGでも何でも普通ファイルの中身が返されますよね。
CGIの場合は実行結果しか絶対に返ってこないの?
358nobodyさん:03/01/22 21:18 ID:???
>>357
httpサーバの設定に激しく依存。
359nobodyさん:03/01/22 21:23 ID:TWTRYmp3
>>358
えっと、具体的にはどういう設定だとどうなるのですか?
360nobodyさん:03/01/22 21:35 ID:???
>>359
CGI専用のディレクトリに入れていたり、CGIスクリプトとして実行するように設定された拡張子をつけていれば実行結果しか返されない。
それでもウェブサーバーを介さないでアクセスされたら覗かれるけどネ
361nobodyさん:03/01/22 21:35 ID:???
Options +ExecCGI
AddHandler cgi-script .cgi
362nobodyさん:03/01/22 21:35 ID:???
>>360
>CGI専用のディレクトリに入れていたり
そのディレクトリに画像ファイルなんて入れたら大騒ぎだな。
363nobodyさん:03/01/22 21:36 ID:???
>>361
Apacheの場合。と書かないと語弊があるぞ。
364nobodyさん:03/01/22 21:37 ID:???
>>362
ForbiddenかInternal Server Error(実行権を与えていた場合)になるだけだろ。
365nobodyさん:03/01/22 21:43 ID:TWTRYmp3
どの拡張子がCGIスクリプトとして実行すると決めておくのがサーバー設定ってことですか?
WEBサーバーを通さないってことはFTPでってことですか?
かなり初心者なんですいません。
366nobodyさん:03/01/22 21:45 ID:???
>>365
>WEBサーバーを通さないってことはFTPでってことですか?
など、そのサーバのファイルシステムに然るべき権限でアクセス出来るプログラムがあればいい。
367nobodyさん:03/01/22 21:46 ID:???
>>365
> どの拡張子がCGIスクリプトとして実行すると決めておくのがサーバー設定ってことですか?

そう

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

別に何でもいい。FTPじゃ無理だと思うが。
たとえばis○ebのようにセキュリティの甘いところはCGIスクリプトを使って他人のファイルを覗ける
368nobodyさん:03/01/22 21:58 ID:???
>>367
アホか。
369nobodyさん:03/01/22 22:00 ID:???
>>368
なんか間違った?(^_^;)
370nobodyさん:03/01/22 22:08 ID:NkPjRdCp
>>368
お前には課題だ。調べておけ。

suEXEC setuid ファイルの所有者 パーミッション
371nobodyさん:03/01/22 22:11 ID:???
>>370
>>367の間違い?
それくらい知っているけど(^_^;)
共用サーバにも関わらずそれをやっていないからis○ebはセキュリティが甘いと言ったんだけど。
372nobodyさん:03/01/22 22:17 ID:???
>>328
submitタグのvalueに漢字を使う手も。
373nobodyさん:03/01/22 22:32 ID:???
>>357
CGIのみの話題はスレ違い
374nobodyさん:03/01/22 22:42 ID:TWTRYmp3
みなさん、ありがとうございました。

>>373
そうなんですか?それすらもよくわからなくて。
ごめんなさい。
375nobodyさん:03/01/23 00:46 ID:???
本とかにはopenではよく or dieと組み合わせてありますが、
私の場合openが失敗したからといってスクリプトを終了させるわけ
には行かないので
if(open(IN,"temp.txt")){
opend lines
} else {
canto open lines
}
のようにしているのですが、
こういうことはしないのでしょうか?大丈夫でしょうか?
376nobodyさん:03/01/23 00:48 ID:???
>>375
open(IN, "temp.txt") or { cannot open file }
377nobodyさん:03/01/23 00:49 ID:???
>>375
じゃ、warnを使えば?
378375:03/01/23 00:56 ID:???
ありがとうございます
376の方法もいいなとおもいました
379nobodyさん:03/01/23 01:15 ID:IkRppvEj
ただ単にファイルをアップロードだけのCGIありませんか?
クライアントからのデータをサーバに保存できさえすれば良いんですが。
380nobodyさん:03/01/23 01:20 ID:???
半角文字、ダメです・・・シフトjisとeucだと確定していうるので
送られてくる→&jcode'sjis2euc(\$mes)→内部処理
内部処理→&jcode'euc2sjis(\$mes)→送り返す
としても、半角はおかしくなってしまいます。

なにか解決方法はないでしょうか><
381nobodyさん:03/01/23 01:22 ID:???
>>380
\→*
とか。
382nobodyさん:03/01/23 01:56 ID:8ePVO3RC
ファイルを開いて内容を配列に収めて配列要素を追加するなり並べ替えるなりしてまたファイルに書き出したら、次に開いたときに各要素の頭(単純にファイルを開いた場合は各行の先頭)に半角スペースが付いてるの。
2回同じことやれば半角スペースが2つ、3回なら3つって具合にどんどん増えてしまう。
なんで?
どうやったら回避できるの? 
何か根本的なこと間違ってる?
383nobodyさん:03/01/23 02:04 ID:???
>>380
そもそも「半角カナは文字化けするから使わないように」っていうのがネットの常識じゃなかったか?
2chみたいに、半角カナが堂々と使える掲示板のほうが特殊なのかもしれないぞ。

>>382
ソースきぼんぬ
384380:03/01/23 02:19 ID:/gwtZ2Vt
>>381
ありがとうございます!
\$ を * にしたらなりました
昔は*を使っていたのですが、\$のほうがいいとか、同義だと
かおもっていて、結果が違うとはおもいませんでした。
*$とうのもあるのですか?
私もまだまだ勉強不足ですね・・
ありがとうございました。
385380:03/01/23 02:28 ID:???
なんか、ポートがどうとかいわれて書き込めなかった。。
今度は大丈夫かな

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

掲示板で使えるところがあるので、どうにかがんばればできるんだろうなぁ
とか思ってやってました。
文字コードを変換しなければ問題はおこりにくいのかな
386nobodyさん:03/01/23 02:37 ID:???
2chは書き込みボタンのキャプションの文字コードを調べて
SJIS以外なら、エラーを返して書き込めないようにしている。
結果として、文字コードの変換処理を省略している。
PC向けならこれで、問題ないように思える。

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

携帯の場合はどうなんだろう。。ちと気になる。。
387nobodyさん:03/01/23 02:42 ID:???
>>385
携帯ならShiftJISだけで処理すればいいんでない?
半角カナOKな掲示板も、内部ではShiftJISだけで処理してるのがほとんどだよ。
388nobodyさん: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;

こんなんです。
これだけでもどんどんスペースが増えていきます。
なんででしょう?
389380:03/01/23 02:49 ID:???
みなさん、ありがとうございます。

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

半角文字に関しては今のところうまく動いているので、
もしある程度出来上がったらiappliのお金がかかりにくいように
作ったチャットをここで公開しますね
390nobodyさん:03/01/23 02:52 ID:???
>>389
かいつまみすぎてわからん。それだけ見れば異常はないけど、
配列の最初の要素にどういうものをいれているんだ?
print "$data[0]syori syuuryou";
とかでみてみた?
391nobodyさん:03/01/23 03:17 ID:j5CbC/3T
>>390
えっと私(382=388)へのレスということでいいですよね。
データの内容は会員リスト(氏名だとか住所だとか電話番号をカンマ区切りにしているもの)です。
拡張子はtxtですがためしにcsvとかでやっても同じでした。
data.txtのファイルをブラウザで見ると2つ目以降のデータの頭にどんどん半角スペースがくっついていくんです。
csvにした場合は2行目以降の1列目の各データの頭にスペースが付いていきます。
本当は配列に入れた後、追加だとか並べ替えだとかやりたいんですけどそれ以前の段階でつまづきました。
392390:03/01/23 03:28 ID:???
>>391
改行コードの違いとかはだいじょうぶ
ファイルをどうやってみてるのかとかわかんないしなぁ

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

見たいな感じなの?
393nobodyさん:03/01/23 03:31 ID:???
>>391
こうすると直るよ。

print FILE "@data\n";
    ↓
print FILE @data;
394nobodyさん:03/01/23 03:37 ID:j5CbC/3T
>>392
えっと、そんな感じです。

>>393
えっ、ちょっとやってみます。
395nobodyさん:03/01/23 03:42 ID:j5CbC/3T
わ、わ、わわわ!
本当だ!
ありがとうございます。(^^)
凄い晴れやかな気分。半日苦しんだから。
でもなんだか恥ずかしくなってきた。
受け売りって言うかよそから拾ってきたものを見本に猿まねで訳もわからず作ってたから。
ところで何でこうなるんですか?
(by 382)
396393: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; のようにダブルクォートせずに書こう。
397390:03/01/23 04:12 ID:???
>>396
そうそう。おれはそれが言いたかった。
変わりにかいてもらってスマソ
398nobodyさん: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です。

八方塞がりの状況です。教えていただけませんでしょうか。
399nobodyさん:03/01/23 11:09 ID:???
>>398
.plのパーミッションは普通 644 or 604 だよ。それはOK?
400nobodyさん:03/01/23 11:13 ID:xJWtHdWY
sub hoge{
my %aaa;
my @bbb;
# それぞれになんか値を入れる動作する
return(%aaa,@bbb);
}
(%AAA,@BBB) = &hoge;
こうすると@BBBに値が入ってないんですけど、なぜでしょうか。
401398:03/01/23 11:19 ID:???
>>399
mimew.plのパーミッションは644です。
apacheのログを見たところ、

Undefined subroutine &mimew::mimeencode

と表示されていました。
mimew.plにはmimeencodeが存在しています。
(コマンドラインからは実行されますし)
何か他にチェックするべき点はあるでしょうか。よろしくお願いします。
402nobodyさん:03/01/23 11:21 ID:???
>>398
もしも、mimew.plが読み込まれていないと心配なら
eval ( require "mimew.pl" );
で、きちんと読み込まれているかチェックしてみたら
どうでせう?

>>399
0755にしなきゃいけないファイルを0644にしていたら問題だけど、
普通0644にするべきファイルを0755にしていても、問題じゃない
でそ?
403nobodyさん:03/01/23 11:35 ID:E5MYBiOX
>>400
my @AAA=&hoge;
%AAA=$AAA[0];
@BBB=$AAA[1];
404398:03/01/23 11:56 ID:???
>>402
evalでチェックを行ったところ、
mimew.plはきちんと読み込まれていました。
しかし、あいかわらず

Undefined subroutine &mimew::mimeencode

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

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

sub hoge {
my ($aref, $bref) = @_;
$aref->{hage} = "ccc";
$bref->[0] = "ddd";
}
406nobodyさん:03/01/23 12:15 ID:???
>>398
バッファリングしないようにすれば動く。
407nobodyさん:03/01/23 12:53 ID:???
例えば単純変数や配列変数を使う時、
1.作業用の配列を使いまわす事がある
2.分かり易いように名前を決めて、1つの項目しか入れない
場合によって、違うかもしれないけど、貴方はどっち派?
408390:03/01/23 13:00 ID:???
>>407
おれは2
今の時代、よっぽど負荷がきになるときいがい
2にして、わかりやすいソースを書いたほうがマシ
409nobodyさん: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を実行しました。
そうしたところ、上手く作成できたので、今度は外部から試してみました。
そしたらやっぱり内部サーバエラーになってしまうんです。
どこがまずいのか分かりません。
乱文になってしまいましたが、どなたか私の間違いを
指摘して下さいませんか?よろしくお願いします。
410nobodyさん:03/01/23 13:18 ID:???
>>409
print "\r\n\r\n";を加えれば動くでしょう。
411nobodyさん:03/01/23 13:25 ID:jz3+5dSU
>>409
Apacheにヘッダーを送れ。
print "Content-type:text/plain\n\nファイル作成しますた。\n";
412409: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;
というふうにしてみたんですが、今度はダウンロードしますか?の
ダイアログが出てきてしまいました。どうなってるんでしょうか?
413nobodyさん:03/01/23 13:38 ID:???
ダイアログが出たということは、正常に動作しています。

PerlをCGIで動かす場合には、HTTPヘッダを出力する必要があります。
CGIで動かした時にHTTPヘッダがなければ、>>409のようにエラーで動きません。
それだけです。
414398:03/01/23 13:46 ID:???
>>406
申し訳ございません。
おっしゃる意味が分からないのですが・・・。
415nobodyさん:03/01/23 13:54 ID:Ah3Ym1t7
質問します。

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

と言う風に変換したいのですが、上手くできません。
どなたかご教授ください。
よろしくお願いします。
416nobodyさん:03/01/23 13:55 ID:???
>>414
プログラム的に説明すると、$|=1;を先頭の方に加える。
バッファの意味は辞典なり検索なりして調べてください。
417nobodyさん: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";
418nobodyさん:03/01/23 14:36 ID:???
>>417
おっと、いけねぇ、ミスってもうたわい。まっ、いいか。
419nobodyさん:03/01/23 14:47 ID:???
s!#(\d{3,6})!<a href="http://hoge.com/hoge/$1">#$1</a>!g;

補完
420398:03/01/23 14:47 ID:???
>>416

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

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

mimew.plは正常に読み込んでいるようなのですが・・・。
421398:03/01/23 14:52 ID:???
ちなみにjcode'jisは正常に呼び出せています。
422nobodyさん:03/01/23 15:03 ID:Ah3Ym1t7
>>417-419
ありがとうございました。
上手くいきました。

423nobodyさん:03/01/23 15:15 ID:???
>>421
mimew.plのエラーじゃないだろ。冷静になってよく考えろ。
424nobodyさん:03/01/23 15:19 ID:???
>>409
さっさと411をためせよ
425nobodyさん:03/01/23 15:21 ID:???
>>398
だから、なんでアホみたいにprint MAIL なんとか
でやるの?バッファリングするなっていわれてるのに
$mess にぜんぶメールいれといて
system (,"|/usr/sbin/sendmail -t -i , $mess);
かなんかでポンとやれよ。
ファイルハンドルの意味わかってんの?
426398:03/01/23 15:28 ID:???
解決しました。
mimew.plを見たら、パッケージ名がMIMEと設定されていました。
呼び出しミスでした。お騒がせ致しました。

ただ、jcode.plの場合はrequireするだけで良かったって言う、理由が、よくわからないままです。
よろしければご教授ください。
427nobodyさん:03/01/23 15:30 ID:???
>>426
mimew.plのあたまのほうは?
おれはrequireするだけでうごいてるけど
428nobodyさん:03/01/23 15:41 ID:???
>>426
あんたのmimew.plにmain'mimeencodeサブルーチンが欠けているか
main以外のパッケージ空間を使用しているからでしょ。。
429426:03/01/23 15:46 ID:???
>>423,425,427,428
ありがとうございました。
がんばります。ごめんなさい。
430nobodyさん:03/01/23 17:27 ID:kDsUWLbm
>>406 >>416 >>425
今回の問題にバッファリングは関係ない。closeしているから。
なんでも$|=1って書けばいいものじゃない。あほか。
431nobodyさん:03/01/23 17:34 ID:kDsUWLbm
もしMAILに対してバッファリングをしないように設定したいのであれば、
select(MAIL); $| = 1; select(STDOUT);
こうするべき。この辺りはわかって言ってるんだよね?
432409:03/01/23 18:06 ID:???
>>411さん,>>413さん,>>424さん
ありがとうございます。上手く動きました。
何度試してもずっと内部サーバエラーですが出力されていたのですが、
ブラウザを閉じてもう一度アドレスを入力したら動きました。
なんだかふに落ちないのですが、ひとまず動いたのでよしとします。
一時ファイルとかそんなのが問題になってるんでしょうかね?
433nobodyさん:03/01/23 18:19 ID:???
そうですね。
434nobodyさん:03/01/23 19:02 ID:0ikp7K62
モジュールをwinxpでインストールしたいのですが
解説書などを見ても意味がわかりません。
$su が最初に出てくる画面は何のアプリを使ってるのでしょうか?
435nobodyさん:03/01/23 19:26 ID:/BytM6mn
>>434
Linux
FreeBSD
cygwin
436nobodyさん:03/01/23 21:01 ID:???
>>435
UNIX系と言えば丸く済むような。
437nobodyさん:03/01/23 22:30 ID:CHeIi8Oa
会社のネットワークからだと、
制限かかってて見れないページがあるんですが、
自宅のwebサーバーを経由して、見れるようにする
方法ってないでしょうか?

438nobodyさん:03/01/23 22:33 ID:vGzRwfzk
>>437
串じゃあかんの?
439nobodyさん: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);
}
--------------------------------
440nobodyさん:03/01/23 22:51 ID:KCPQ5bMl
>>439
$c += 10;
441438:03/01/23 22:54 ID:???
>>440
そうやると$cに数字の10が入ってしまうんですけど・・・
442439:03/01/23 22:55 ID:???
↑失礼
ハンドル間違えました。
443440:03/01/23 22:59 ID:KCPQ5bMl
$c++;
を必要なだけ繰り返す。
444nobodyさん:03/01/23 23:07 ID:???
>>441
char型は整数型なんだけどね。
445nobodyさん: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
---この上まで----
448nobodyさん:03/01/24 00:24 ID:???
>>447
ishてまた懐かしい。
449nobodyさん: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として試しても良し。
451449:03/01/24 00:35 ID:???
join('',$char)

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

私はこういう方法で偶に変換してます。。
453nobodyさん: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

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

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

まずはローカルでテストできる環境を作って、そこでエラーメッセージをちゃんと吐かせる。
そしてエラーメッセージの意味を調べて、スクリプトを修正する。
455439:03/01/24 01:13 ID:???
>>449,452
ありがとうございます。
今までネットで探していたら、
452さんも使われているchr関数を見つけましたので
一端ordで変換してchrで戻してみました。

449さんも使われているpackも見てたのですが、
ちょと私にはまだ難しかったみたいです(^^;
456nobodyさん:03/01/24 01:17 ID:???
>>454
すみません
ローカルって何ですか?
457nobodyさん: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.
どうか指名しているドキュメントのアドミニストレーターと連絡を取って、そして(彼・それ)らにエラーが起こった時とエラーを起こしたかもしれないあなたがしたかもしれない何でも知らせてください。
458nobodyさん:03/01/24 01:24 ID:???
>>457
よくわからいので初心者でもわかるように説明してもらえないでしょうか?
お手数かけます
459nobodyさん:03/01/24 01:34 ID:???
>456
あんたのパソコン。
サーバー上でCGIのテストするな。
後は検索して調べな。
説明ページは探せばいくらでもある。

それ読んで分からないようなら、CGIの改造とか色々考えるな。
改造せずにそのまま設置しようとしてそのエラーなら、配布元の指示に従ってちゃんと行動してないって事。
とにかく書いてある文字を読め。
460nobodyさん:03/01/24 06:22 ID:???
>>456
自分のパソコンにPerlをインストールして、それで走らせて
デバッグする。WinでもMacでもあるよ。
461nobodyさん:03/01/24 09:10 ID:???
これって2ch掲示板のことじゃ・・・・
462nobodyさん:03/01/24 14:56 ID:Mw0EqohX
>>461
read.cgiはcじゃなかったっけ
463nobodyさん:03/01/24 15:21 ID:8KdGKoGc
http://jsweb.muvc.net/index.html
 ★こんなサイト見つけました★
464nobodyさん:03/01/24 15:49 ID:???
検索フォームから、例えば何らかのperl関数を入力された場合、
CGIが暴走するということはありえるでしょうか?
465nobodyさん:03/01/24 15:55 ID:???
>>464
evalなんてバカな関数使ってるならそれなりにありえる。
466nobodyさん:03/01/24 16:04 ID:???
>>465
ありがとうございます。安心しました。
467free se:03/01/24 16:04 ID:???
まああれだ、好きな音楽を聴きながら仕事している方が効率いいな。
おまえらはどうだ?
468nobodyさん:03/01/24 16:15 ID:???
>>467
音楽聴いてるとソース書けない
469nobodyさん:03/01/24 16:20 ID:???
>>467
無音に限る
470nobodyさん:03/01/24 17:18 ID:???
>>467
集中したい時は耳栓するぞ。
そうすると呼吸の音が気になってくるんだなこれが。
471nobodyさん:03/01/24 17:20 ID:???
息止めろ。
472nobodyさん:03/01/24 17:25 ID:???
>467
簡単な物は音楽が鳴っていた方がいい。
複雑な物になると鳴ってない方がいい。
473467:03/01/24 17:33 ID:???
{解決]
よく考えると俺も472さんと一緒だな。
無音は気持ち悪くて、流石に嫌だけど。
474nobodyさん: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からのメール」までを
消す(送信者に見えなくする)方法はありますか?
よろしくお願いします。
475nobodyさん:03/01/24 17:53 ID:???
ソース見せて (*´д`)ハァハァ
476nobodyさん:03/01/24 17:56 ID:???
>>474
これあぶねーな まだこういうの作ってる人いるんだ。
こえー。大丈夫?責任とれるのかな
477nobodyさん:03/01/24 17:57 ID:???
>>474
print のところをはずせばいいだけだとおもうが。
でもあぶねぇなぁ。こんなの本当に設置すんの?
478474:03/01/24 18:12 ID:i/64hvW7
皆さんレスありがとうございます
すみません、どんな風に危ないんでしょうか?
非常に不安になってきたのでよければ詳しく教えてくれませんか??
479nobodyさん:03/01/24 18:22 ID:???
誰でも何処でも何通でも送れるから。
480nobodyさん:03/01/24 18:23 ID:???
>>476>>477

危ないって何が?
Toを使用者が指定できるとか?
481nobodyさん:03/01/24 18:24 ID:???
ソース見せて (*´д`)ハァハァ
482nobodyさん:03/01/24 18:25 ID:???
>>474
設置した場所にBASIC認証かけておいてね。
483nobodyさん:03/01/24 18:27 ID:???
>>482
Toを固定するだけでいいと思うけど
484nobodyさん:03/01/24 19:34 ID:???
危ないかどうかはソース次第だとおもうけど。
ただ、Toを自分のメアドにしておいてもメールボムとか怖い。
485474:03/01/24 19:43 ID:i/64hvW7
すみません初心者なのでソースを出して良いのかどうかの
判断がつきません。wwwmailは「とほほ」にある
メール送信フォームを設置するためのソフトです。
危険でしょうか?
486nobodyさん:03/01/24 20:01 ID:???
とほほは危険
487nobodyさん:03/01/24 20:05 ID:???
>>485
個人情報(自分のメアドとか)、パスワードとかが入ってるなら、それだけ消してソース出してみ。
ソース見せたくらいじゃどうってことないよ。
488nobodyさん:03/01/24 20:13 ID:QLwP0ckk
xreaに12chのスクリプトを置いたのですがどうも書き込み後、index2.htmlに戻るときエラーが発生してしまいます。
たしか、XREA用に何かいじらなければならなかったような気がするのですが思い出せません。

どなたかご存知の方、ご教授願います。
489nobodyさん:03/01/24 20:18 ID:???
>>488
xrea.com part28
http://pc.2ch.net/test/read.cgi/perl/1042433690/

こちらへどうぞ。
490488:03/01/24 20:20 ID:???
>>489
板違いすんません・・・。では。
491474:03/01/24 20:27 ID:i/64hvW7
ソースです。

#!/usr/local/bin/perl
#=====================================================================
# カスタマイズ
#=====================================================================
# ★ perlのパス名
# このファイルの先頭の1行を、あなたが利用するサーバーにインストー
# ルされた perl コマンドのパス名に応じて変更してください。例えば、
# 私が加入している BIGLOBE では、#!/usr/local/bin/perl となります。
# 解らない場合は、プロバイダやサーバの管理者にお問い合わせください。
# 「#!」の前には、空文字や空行や他の文字がはいらないようにしてください。

# ★ 送信先メールアドレス
# $mailto = '[email protected]'; のようにあなたのメールアドレスに
# 書き換えてください。
$mailto = '';

# ★ サブジェクト(件名)
# 送信されるメールのサブジェクトを指定してください。
$subject = 'WwwMailからのメール';

# ★ メール送信コマンド
# WebサーバーがUNIXの場合はsendmailコマンド、Windows系の場合はBLATJ.EXE
# コマンドのパス名を指定($mailcmd = 'C:\BLATJ\BLATJ.EXE'; など)してく
# ださい。このコマンドが存在しない場合は、WwwMail は動作しません。また、
# 存在していても、メール送信の設定が行われていない場合があります。詳細
# はプロバイダやサーバーの管理者にお問い合わせください。
$mailcmd = '/usr/lib/sendmail';

492474: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

493474: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;
}

494nobodyさん: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;
495nobodyさん: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";}
496nobodyさん: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) {
497nobodyさん: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 が存在しません。");}


498nobodyさん: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";
}

#
# エラーメッセージを出力して終了
#
499nobodyさん: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);}
長くて申し訳ないです。どうでしょうか?
500nobodyさん:03/01/24 20:37 ID:???
全部キタ━━━━━━(゚∀゚)━━━━━━ !!!???
501nobodyさん:03/01/24 20:42 ID:???
>>499
そこまでやるなら別ファイルにした方がWYSIWYGなエディタで編集出来るし便利だと思うんだが。
502nobodyさん:03/01/24 20:56 ID:???
ちゃんと読んでないが、メールの本文に目障りな文が入るってことじゃなくて、
ブラウザに表示される画面をどうにかしたいってことか?
503474: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");
?>
…で最後の行を色々見たものをコピペって試しています。

505nobodyさん:03/01/24 21:44 ID:???
>>503
# ブラウザ画面に送信結果を書き出す
って行があるだろ。その下あたりを修正すりゃいい。つかPerl勉強してこい。

>>504
SHOW TABLESと DROP TABLEを繰り返しするのじゃダメ?
うまくいかないって言われても…
506504:03/01/24 22:05 ID:+KMlj8qB
繰り返しても何でも構わないんですが
上に書いたので繋がらないので分からないんですよ。
mysql($database,"CREATE TABLE $table( no int not null AUTO_INCREMENT,
hoge varchar(100),PRIMARY KEY(no))");
でちゃんとテーブル作れるんですがね。
507nobodyさん:03/01/24 23:06 ID:???
>>498

$mail = "$mailhead $mailbody"
から"$mailheadを抜く。
508nobodyさん:03/01/24 23:36 ID:???
>>495
>$mailhead .= "Cc: $FORM{'EMAIL'}\n";
最低限、この行は抜いてください。
509nobodyさん:03/01/24 23:43 ID:???
>504
何度も繰り返しになるが、テストはローカルでやれ。
アップしてテストをするな。
510504、506:03/01/24 23:57 ID:???
>509
今となっては同感です。
だからこそ、サーバー上のを見つけて削除したいんです。
511nobodyさん:03/01/25 00:18 ID:???
>510
だから、消し方もローカルでテストしてやりなさいって。
まずはローカルで同じ様なデータ作って消すやり方探せばいいでしょ。
ローカルなら、他人への迷惑をあまり考えずに色々と手探りで試せるんだから。
それはやってるのか?
512nobodyさん:03/01/25 00:20 ID:???
>>511
あんまり流行ってないよ。
513nobodyさん:03/01/25 00:28 ID:???
( ゚д゚)・・・・
514504、506、509:03/01/25 00:33 ID:???
諸々の事情でPCでそれを行う事ができません。
サーバー上でしかできないので、サーバーにアップしてやるしかないのです。
515nobodyさん:03/01/25 00:50 ID:???
勝手な言い草だな(藁
一生、悩んでなさいってこった。以後放置願います>all
516nobodyさん: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]");
}
かな?
519474: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";   
# }   

こうすれば問題ないですか?
なんとなくまずいのはわかるのですが
良ければ詳しく教えていただけますか?
                      
520nobodyさん:03/01/25 02:05 ID:???
>>519
どこにメールが行くかを考える。
存在しないメールアドレスの場合も調べてね。
521nobodyさん:03/01/25 13:31 ID:???

Webデータの取得にLWP::Simpleのget()を使いたいのですけど、
このモジュールはcgiを許可しているフリーのhosting service
には入れてないことの方が多いのでしょうか? あるいは有料の
hosting serviceであれば入ってるでしょうか?
522nobodyさん:03/01/25 15:42 ID:???
>>521
何が楽しうてそんなもん入れんといかんのだ。
523nobodyさん:03/01/25 17:23 ID:???
>>521
有料のトコなら管理者に頼めば入れてくれるかもしれないけど、
必要なモジュールは基本的には自分でインストールするもの
と考えたほうがいいよ。
http://search.cpan.org/author/GAAS/libwww-perl-5.69/
524nobodyさん:03/01/25 17:56 ID:???
>>523
LWPって通信用でしょ?
入れても使えないところが多いと思う。
525nobodyさん:03/01/25 18:29 ID:???
個人で入れても使えないようにってどうやってるのかな。
ダミーのモジュールを入れておいて優先順位?
526nobodyさん: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ださないようにするためにはみなさんどうしてます?
528nobodyさん:03/01/25 18:48 ID:???
>>527
#! /usr/local/bin/perl

そもそも自分で書くので関係ないという意見もある。
529nobodyさん:03/01/25 19:05 ID:J+PAIJA/
>>528
違う。比較演算子は未定義値に使ってはいけない。

file?form_name=
で呼ばれたら、$dataは'' (空文字列?)だけど、
file?hoge=fuga
で呼ばれたら、$dataはundefになる。

つまり、こう書いておけばいい。
$data = '' unless defined $data;
530nobodyさん:03/01/25 19:18 ID:???
definedが分かったら、existも知るといいかも。。

おまけ:
undef, '', 0 はifに入れてみるとはみんなFALSEになるんだけど、
違うものだと思え。

よくある間違いで、

if (! $name) { error('名前を入れてちょ'); }

これは、$nameを0にできない。こう書くべきだね。
if ($name eq '') { ... }
531nobodyさん:03/01/25 19:19 ID:???
>>530
ぱいじゃさん。しつこいです。
532nobodyさん:03/01/25 19:19 ID:???
変な文字が・・修正

入れてみると、みんなFALSEになる
533初心者です。:03/01/25 19:27 ID:???
>>529-530
ありがとぅ。
534nobodyさん:03/01/25 20:04 ID:???
$data = param("form_name") || '';

普通こうします。。
535nobodyさん:03/01/25 20:23 ID:???
>>534
>>530は見た?それだと0が入らない
536nobodyさん:03/01/25 20:30 ID:TLIt72nG
サブルーチン内で、

return(next);

ってできますか?
537nobodyさん:03/01/25 20:36 ID:???
>>536
できるかどうかは試せば分かる
538nobodyさん:03/01/25 20:51 ID:???
質問するとしたら、なんで〜な動作をするのですか?困っているのですが。

みたいな感じになるはずだ。
539nobodyさん:03/01/25 21:05 ID:TLIt72nG
できました。
540 521:03/01/26 04:49 ID:???
例えばgoogleにアクセスして、検索結果を取得して処理するみたいな
ことをしたいのですけど、LWP::Simpleモジュールを使わなくても
可能でしょうか?
541nobodyさん:03/01/26 06:05 ID:???
>>540
そもそも外部と通信できなければ無理だってば。
542nobodyさん: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を""で囲むとか?
544nobodyさん:03/01/26 10:44 ID:???
>>542
if文の使い方は合ってるけど……本当に中身は 'a' だけ?
空白とか改行文字が付いてるってことはない?
545nobodyさん:03/01/26 10:53 ID:???
>>542
大文字小文字。どちらかに改行コードが残っていないか。など確認。
546nobodyさん:03/01/26 11:44 ID:P6Egn5Az
とあるチャットで外部フォームでの発言が流行っているのですが、
文字に改装を加えて投稿するにはどうすれば良いのでしょうか。
タグは使用不可で、スクリプトはCOMCHATです。


もし板違いだったらすいません。
547nobodyさん:03/01/26 12:11 ID:???
>>546
スクリプト側で対処しているなら無理でしょう。
548nobodyさん:03/01/26 12:18 ID:P6Egn5Az
>>547
他の常連さんが成功してるみたいなので。。
549nobodyさん:03/01/26 12:20 ID:???
>>548
常連さんに聞くのはどうでしょう?
550nobodyさん:03/01/26 12:30 ID:P6Egn5Az
>>549
あまり喋らないので、気まずい...
551nobodyさん:03/01/26 12:47 ID:zx28i3UH
アクセスアップキャンペーン中
http://ginrai.hp.infoseek.co.jp/
552nobodyさん:03/01/26 12:58 ID:10NDG8/s
>>543
なんでもかんでもダブルクオートで囲むのはよろしくない。
それに、今はそれは全然関係ない。

>>542
自分が問題だと思っている部分だけじゃなくて、全体を出してみろ。
553nobodyさん:03/01/26 16:22 ID:???
cronって何?どうやって設定するんですか?
554nobodyさん:03/01/26 17:09 ID:???
>>553
時間を決めて実行するための仕組み。
専用レンタルサーバとかじゃないと使えないから気にしなくていい。
スレ的には、「ある時間にCGIを実行したいんだけど」な気がするから、
「CGIが読み込まれたときに時間をチェックして実行するかどうか決めろ」
555nobodyさん:03/01/26 17:56 ID:lX4NK7pu
ジオシティーズのPerlのパスってなんですかぁ??
556nobodyさん:03/01/26 18:44 ID:bvYo1DgE
>>555
そもそもCGI使えないだろ
557nobodyさん:03/01/26 21:22 ID:???
>>554
仕組みというかただのデーモン(プログラム)。
558nobodyさん:03/01/26 22:37 ID:???
$aaaと同じ内容の$bbbを作るにはどうすればよいのですか?
559nobodyさん:03/01/26 22:46 ID:???
>>558
$bbb = $aaa;
560nobodyさん:03/01/26 23:30 ID:2o0R3o6+
消費税の計算なのですが、
小数点以下切捨てということで、
$tax = int($5*$total/100);
という感じでやっているのですが、
小数点以下四捨五入で・・・とするにはどうしたらいいのでしょうか?
初歩的な質問ですいません・・・。
561nobodyさん:03/01/26 23:37 ID:???
>>560
0.5 足してから切り捨て
562nobodyさん:03/01/26 23:40 ID:???
>>560
$tax = int(($total * 0.05) + 0.5);

四捨五入は、0.5を足して小数点以下を切り落とす。
563560:03/01/26 23:47 ID:???
>>561-562
ありがとうございます!!!
$tax = int(($total * 0.05) + 0.5);
↑ちなみにこの2重括弧はやっぱり付けた方がいいんですか?
$tax = int($total * 0.05 + 0.5);
だけだとだめですか?
564nobodyさん:03/01/26 23:51 ID:???
>>563
数学と同じで*は+より先に評価されるのでいらないだろうね。
565562:03/01/26 23:52 ID:???
>>563
あー、括弧はなくてもいいです。なんかクセでつけちゃった。
566560:03/01/26 23:56 ID:???
ありがとうございます。
0.5足して切り捨て、いわれれば納得!!!
つーか、最初の書き方変でしたね。
$tax = int($5*$total/100);
$5ってなんだ・・・(w
どうもありがとうございました。
567nobodyさん:03/01/27 00:31 ID:???
>>566
マッチ演算子にて5番目にマッチした部分。
568nobodyさん: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じゃなくて、>で出来る方法(>を使うとなぜかエラーが出ます)
を教えてください。
569568:03/01/27 05:27 ID:???
>>568
あ、この方法の欠点見付けました。
>で始まる行でも、改行してなかったら引用と認識しませんね。

>で始まる行の後に、文章を書かない事はないと思いますが、万が一のために、\nがなくてもOKなようにしたいんですが。
570568:03/01/27 06:31 ID:???
>の個数だけ<BLOCKQUOTE><P>を頭に追加、行末の\nを<BR>に変換、
>の個数が一個減るたびにその直前に</P></BLOCKQUOTE>をつける、でいいんでしょうかね。
571nobodyさん:03/01/27 07:42 ID:x/t6q6bL
1.最初に見つかった引用符(>)を<BLOCKQUOTE>に置換
2.先読みを利用して最後の引用符の行に</BLOCKQUOTE>を追加
3.その他の引用符をすべて消去

http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html
572nobodyさん:03/01/27 08:21 ID:Npl77MmW
-------------------------------------------
本日23:00時より祭りを開催いたします。
是非、参加下さいます様、お願いします。
携帯PHS
迷惑メールサイト一斉訪問お祭り開催
http://jbbs.shitaraba.com/news/bbs/read.cgi?BBS=853&KEY=1043335260
-------------------------------------------
573568:03/01/27 08:26 ID:???
>>571
原理は分かりましたが、書き方が分からないです。
574nobodyさん:03/01/27 08:30 ID:???
>>573
修行不足だな。
575568:03/01/27 08:31 ID:???
>>574
すみません。
576bloom:03/01/27 08:53 ID:2qTkpcb7
577nobodyさん:03/01/27 15:48 ID:???
すいません、
モジュールは自分で鯖にインストールしないといけないのでしょうか?
例えばLWPなどは一般的にどのような手順を踏めば使えるのでしょうか。
578nobodyさん:03/01/27 16:10 ID:???
>>577
前も来てなかった?

一般的にはモジュール配布サイトの指示に従う。だけれど。
579nobodyさん: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
580577:03/01/27 16:21 ID:???
>>578-579
ありがとうございます。
>前も来てなかった?
もし過去ログにあったなら見逃してました、すみません。

試してみて、また分からなくなったら来ます。
その時もよろしくお願いします。
581nobodyさん:03/01/27 16:44 ID:???
>580
LWPのインストールはPerlと関係ないのでもう来ないでください。
582nobodyさん:03/01/27 17:00 ID:???
12chというスクリプトを使ってるんですけどmegabbsにある等幅チェックなるものを移植しようとしてます。
どなたか改造するポイントを教えてください。

因みに使っているバージョンは
ttp://mitinoku.jp/script/12ch_2.02.lzh
これです。

bbs.cgiというファイルを改造すればいいみたいです。
動作は、等幅チェックボタンをONにして書き込むと
<tt>「書き込み内容」</tt>
と、こんな風に<tt>タグでカキコの内容をはさむようにしたいです。

では、宜しくお願いいたしますです・・・。
583582: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;}

584nobodyさん:03/01/27 17:05 ID:???
>>582

【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
585582:03/01/27 17:09 ID:???
>>584
うっ、・・すれ違いすいません・・・。そちらの方で聞いてきます。
すいませんでした。
586nobodyさん:03/01/27 18:01 ID:???
海外製などのCGIを使うと、「ポ」など一部の文字で不具合が発生するのですが何故でしょうか。
どなたか分かる方いらっしゃいましたら教えてください。
587nobodyさん:03/01/27 18:42 ID:KZuCQWmj
「こういうのがやりたい」と「どうやってもこれができない」にスレッド分割しない?
588nobodyさん:03/01/27 21:32 ID:???
>>586
2バイト文字の処理を行っていないから?
とにかく >>1 から始めよ。

>>587
レスの半分近くが誘導になる悪寒ガクガクブルブル
589nobodyさん:03/01/27 21:46 ID:???
$sub =~ s/^Re:\[[0-9]+\]\s//g;
の[0-9]+、ようするにその部分に入る数字を
$renoって変数に格納するにはどうしたら?
590nobodyさん:03/01/27 21:49 ID:o8/ytwxU
($reno) = $sub =~ /^Re:\[([0-9]+)\]\s/;
591nobodyさん:03/01/27 21:50 ID:???
>>589-590

お前ら、\dが泣いています。
592nobodyさん: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/,$//;
593nobodyさん:03/01/27 21:54 ID:???
>>592
さっきもっとシンプルなの上がってたじゃん。
594nobodyさん:03/01/27 22:02 ID:???
>>590
できました。
ありがとうございました。
595nobodyさん:03/01/27 22:09 ID:???
>>593
どこ?
「速さ」より「シンプルさ」を重視すべきかな?
596nobodyさん: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のリンク先をブラウザが読んで飛んでんでしょか?それともヘダにそゆ内緒の跳び先が書いてあんでしょか?ヘダ見たけどごく普通だたと思うんですけど。
598f:03/01/27 23:00 ID:???
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 24時間受付  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  [email protected]
   グローバル探偵事務局 

599 ◆PerlqhxPVA :03/01/27 23:50 ID:???
>>592
$old = 1225678901;
while($old =~ s/(\d{1,3}?)$//){ unshift(@_,$&); };
print join(',',@_);

ちゅうのはカコ悪いか(w

>>597
Apacheの仕組みを覚えれ。
600nobodyさん:03/01/28 00:34 ID:???
>>597
ネタなのかマジなのかよくわからん。
601nobodyさん:03/01/28 00:35 ID:???
ttp://www.din.or.jp/~ohzaki/perl.htm
ここがPerlメモ

3桁ごとのカンマはこれが一番シンプルじゃねーかな。
602nobodyさん:03/01/28 03:04 ID:???
>>597
Apacheだと、エラー時に好きなページを出力できる。
cgiを起動する事もできたりする。
603g:03/01/28 04:31 ID:QDc4rCif
すいません、今本を見ながら一生懸命猿まねしてるんですが、、、
スラッシュの反対向きのやつってどうやって入力するのですか?
それらしきキーを押してるのに「\」が出てきます。
誰か教えてください。
604g:03/01/28 04:54 ID:QDc4rCif
>>603
フォントを変えるとできました。
お騒がせしました。
605nobodyさん:03/01/28 06:37 ID:???
すみません、ご存知の方いらっしゃれば教えて下さい。

あまり詳しくは言えないので非常に申し訳ないのですが、
ある2つのcgiをWin98(Celeron500)+Apache2+ActivePerl5.8で動かしていて全く問題がなかったのですが、
Win2000(Celeron500)で同じサーバ構成を作り(たぶん)稼動させた所、
1つは非常に快適に動作し、1つは動かないに等しい程おそくなってしまいました。

CGIを自分でかけないので分からない、というのがすでに問題なのですが、
こう言ったことは起こりうると推測出来るでしょうか?

サーバの構築ミスとかも有るかもしれません、、、。

ご教授頂ければ幸いです、、、、。
606592:03/01/28 06:47 ID:???
確かに似たようなのあるね
すまそ
607腐れ厨房(゚腐゚):03/01/28 07:15 ID:vWtuYxkU
>>602
なるホドです。んでそれをブラウザはどやて認識してんですか?
あよくよくヘダ見たら302fondの時「Location: http://hoge.com/hoge.html」とあたです。これでしょか?
608nobodyさん:03/01/28 09:15 ID:???
>>607
帰れ。せめてhttpのRFCぐらい目を通してこい。
あと、日本語も勉強してこような。
609nobodyさん:03/01/28 09:19 ID:???
>>605
起こりうる可能性はいくらでもありますね
ソフトウェア的な設定ミスから
ハードウェアやネットワークの障害などなど

ひとまず順を追って用意した環境が間違いないか確認しましょう

>>607
まずは日本語を(ry
610605:03/01/28 10:05 ID:???
>>609さん
レスありがとうございます。
そうですね、おちついて順をおってもう一度やってみます。

CGIのプログラムを外注に出しているので、
「おい動かなかったぞ!」と文句つけてみたものの
自分の設定ミスでしたという訳にもいかず(w

ただもともと動いていたCGIなので、どちらかといえば自分の設定ミスの方が
ありえるかな?と、その可能性をあたってみたかったという所です。

いやまったくお恥ずかしい話なんですが。
611nobodyさん:03/01/28 10:42 ID:???
ここperl
612609:03/01/28 12:15 ID:???
>>610
外注先がコンサルしてくれないって痛いですね
大変だと思いますがガンガってくださいまし

スレ違いネタになってきたのでこの辺で、、
613nobodyさん:03/01/28 15:26 ID:???
ここDQN
614腐れ厨房(゚腐゚):03/01/28 16:53 ID:vWtuYxkU
>>608
んな難解なヘンテコ文章読むの強要する低脳さんです。乞食が「このくらいの寒さひもじさなんだお前ら根性なし。」と騒いでるみたいです。

ところですべての文字列にマチさしたいんですけど
([.]|[^.])*?
てヤてんですけどカコとパイプだらけでカコ悪いです。もちょとスマトな方法ないですか?
 全能な正規表現
  (??{ code })
  (?{ code })
これ試してみましたけどなんかダメでしたです。Perl5.8です。
615nobodyさん:03/01/28 17:02 ID:???
>>614
.*じゃ駄目なのか?

あと、HTTPについては、http://www.studyinghttp.net/
日本語だから読めるでしょ?

とにかく、日本語を書くように。
616nobodyさん:03/01/28 17:08 ID:oYLjlQQn
全ての文字列にマッチってなんじゃろ?
.* ということではなくて?

あとLWP::UserAgentはredirectの解決もしてくれるから便利だよ。
curlはよくしらないけど。
617nobodyさん:03/01/28 17:09 ID:oYLjlQQn
かぶった。
618腐れ厨房(゚腐゚):03/01/28 17:20 ID:vWtuYxkU
.*だと空白とか\nとか\rにマチしナインで都合悪いんです。
あとLWPは何度やてもうまく逝かなかたんで諦めましたです。curlはwgetライクで使い安いです。
619nobodyさん:03/01/28 17:39 ID:???
腐れ厨房←他人のコテハン使うの止めろ。
荒らし←どうせ2chだろ。

氏ね
620nobodyさん: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:???
腐れ厨房さんだ!本物?
623nobodyさん: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行分で終了してしまうのですが・・

624nobodyさん:03/01/28 19:53 ID:???
>>623
配列に代入してforeachを使ってみてはどうだろうか
625nobodyさん:03/01/28 19:55 ID:???
>>623
goto
626nobodyさん:03/01/28 19:57 ID:wCME9ZCu
>>624-625
ほぅほぅ。
とにかく623のコードじゃダメなわけね。
なんでダメなんだろ?理由がわからない。
627nobodyさん:03/01/28 20:01 ID:???
>626
ファイルハンドルからのデータ取得は、一度最後まで行ったらseekしないと戻らないから。
628nobodyさん:03/01/28 20:07 ID:???
>>627
なるほど!!
じゃぁ1個目のWhile文のなかでFILEBをOPENするか、Seekで先頭にもどすかすれば
だいじょうぶかな?
こんど試してみます。今、環境がないんで。
629nobodyさん:03/01/28 20:07 ID:VjdgexrL
>>623
一個目のwhile抜けた後でseek FILEB,0,0でもすれば?
630腐れ厨房(゚腐゚):03/01/28 20:53 ID:EPPQeVDF
>1個目のWhile文のなかでFILEBをOPENするか
僕の環境だとそれで逝けましたです。なんかネストしたらシクしないて不良品てカンジイです。

>>622
僕です。
631nobodyさん:03/01/28 20:57 ID:???
板違いかもしんないけからsageで・・・
フォームのサブミットボタンに表示させる文字って
VALUE=" "に書くやんかぁ?
でボタンにダブルクォート自体を表示させたい場合ってどうするん?
どうするん?
どうなん?
632 ◆PerlqhxPVA :03/01/28 21:03 ID:???
>>631
value='"こんなん"'
633nobodyさん:03/01/28 21:07 ID:???
>>632
ほぉー!
なるほど。

じゃぁじゃぁ シングルクォートとダブルクォート両方を表示したい時は??
634nobodyさん:03/01/28 21:08 ID:???
635nobodyさん:03/01/28 21:12 ID:???
>>634
ほぉー!
なるほど。

いやぁ実はPerlでCGI作ってて、フォームで入力してもらった文字列を
表示させる部分があるんですが、そのまんま表示してるんで < とか ”とか
入力されたら困ってたんですよね。

ほー!
こういうのを自動でチェック、変換してくれるよかモジュール知らんですか?
636nobodyさん:03/01/28 21:15 ID:???
>>633
"'&quot;"
こうする
637nobodyさん:03/01/28 22:57 ID:???
>>633
qq{}
638nobodyさん:03/01/28 23:22 ID:???
>636 それHTMLだけだろ

637の方法以外に \" \'
639nobodyさん:03/01/28 23:26 ID:0+yLIxs1
640nobodyさん:03/01/28 23:28 ID:???
これでなんで動かないんですか?

#!/usr/bin/perl
print"Content-type:text/html\n\n";
print<<EOF;
<html>
<body>
あああ
</body>
</html>
EOF
641nobodyさん:03/01/28 23:38 ID:6cWKDFOV
>>640
#!/usr/bin/perl

#!/usr/local/bin/perl
にしてみた?
642nobodyさん:03/01/28 23:39 ID:???
>>640
最後の行の「EOF」の後に
半角スペースが入っている。
643nobodyさん:03/01/28 23:45 ID:???
>>640
具体的にどう動かないのかちゃんと書いてくれ。
ちなみにうちの環境では期待する動作をした。
644640:03/01/28 23:49 ID:???
>>641
サーバーは#!/usr/bin/perlなんです。
念のため#!/usr/local/bin/perl にしましたがダメでした。

>>642
>>640の書きこみはスペース入ってますが実際はスペースはありません。
一応書きなおしましたがダメでした。

#!/usr/bin/perl
print"Content-type:text/html\n\n";
print"あああ";

だと動きますが、

#!/usr/bin/perl
print"Content-type:text/html\n\n";
print<<EOF;
あああ
EOF

だと動きません。
645nobodyさん:03/01/28 23:50 ID:???
EOF
の次の行に
;
とか。
改行コードがおかしいとか。
646640:03/01/28 23:51 ID:???
>>643
実行するとInternal Server Errorとでます。
647640:03/01/28 23:53 ID:???
>>645
最後の行に";"を入れたら動きました!!
ありがとうございました!!!!
648640:03/01/28 23:54 ID:???
最後に";"を入れないと動かないサーバーもあるんですか。
知りませんでした。
649nobodyさん:03/01/29 00:07 ID:???
>>647
それはPerlの構文的にヘンだなぁ。(俺が知らないだけかもしれんが)

ヒアドキュメントの終端文字列は << "EOF"; みたいにダブルクオートで括ったほうがいいよ。
650640:03/01/29 00:13 ID:???
>>649
おぉ!!
<<"EOF";にしたら
最後の行に";"を入れなくても動きました!
基本的な事ですがかなり勉強になりました。
っていうか今まで全然プログラムが動かなかったのもこのせいか・・・
651nobodyさん:03/01/29 00:13 ID:???
>>646
Internal Server Error ってのはCGIからの出力が来ないときにブラウザが出す
エラーだから、これを書かれても根本的な原因は一切分からないんだよ。

コマンドラインで実行させた結果を書いてくれるとすぐ分かる。
たとえばこんなの。(うちでは最後の行に ; をつけたらこう出た)

Can't find string terminator "EOF;" anywhere before EOF at test.cgi line 3.
652651:03/01/29 00:17 ID:???
あ、なんだ、EOFの次の行か…
まあいいか。
653nobodyさん:03/01/29 00:39 ID:???
EOFの最終行に改行が足りていなかった予感。
654nobodyさん:03/01/29 00:43 ID:???
>>653
そ、それは盲点だ
655640:03/01/29 00:44 ID:???
>>653
その通りでした。感謝!
656nobodyさん:03/01/29 01:29 ID:???
日曜スクリプティングで、素人ながらも何とか基本的なコマンドを
使って掲示板くらいは1から自分で作れるレベルになったのですが、
まだ色々無駄があったりすると思うのです。

それで、コーディングが奇麗な、参考になる(初心者にも比較的読み
やすい)スクリプトは、どこかに公開されてないでしょうか?
657nobodyさん:03/01/29 02:51 ID:???
KENT-WEB
658nobodyさん:03/01/29 03:04 ID:HsIeKX/p
結構くだらない質問です・・・
下記の様にそれぞれの変数に、同じ文字列を連結して
$a.='<table border="0">';
$b.='<table border="0">';

途中で処理が加わり$a,$bに違う値が連結され・・・

最後に下記の様に連結して締めようかと思います。
$a.='</table>';
$b.='</table>';

質問というのは同じ文字列を違う変数連結する場合、
1行にできないのかという事です。
($b,$a).='<table border="0">'; #イメージ・・・$bにだけ連結して駄目でしたが・・・



659nobodyさん:03/01/29 03:30 ID:KC7FDxMH
>>658
期待してる回答とは違うとは思うが
map {$_ .= '<table>'} ($stringA,$stringB);
とか。

あと、$a,$bは普段から使うの避けといた方がいいかもね。
sortで使うから。
660nobodyさん:03/01/29 09:25 ID:???
>KENTの悪いところ
>1.スクリプトが冗長だから省略するのに慣れてる人には読みにくい
>2.メモリの利用効率が悪く、スクリプトも速くないからサーバに負荷をかける
>3.CGIは起動コストがかかるのでHTMLファイルを生成した方がよい

メモリの利用効率というのは、スクリプト書く時に
どういうことに気をつければ良いのでしょう?

掲示板なんかだと、出力は極力HTMLファイルとして細かに保存していった方が良いのでしょうか?
661nobodyさん:03/01/29 09:41 ID:zyXgtkRr
662nobodyさん:03/01/29 11:16 ID:tPWI6izk
>KENTの悪いところ
>1.スクリプトが冗長だから省略するのに慣れてる人には読みにくい
>2.メモリの利用効率が悪く、スクリプトも速くないからサーバに負荷をかける
>3.CGIは起動コストがかかるのでHTMLファイルを生成した方がよい
↑ほんと難癖だなw

1.ある程度一般的な書き方だと思うし、もともとperlは制約が少ないんだから仕方ないべ。単に自分の書き方と違うから気に食わないだけだろw
2.ソースは?w
3.馬鹿の一つ覚えだな。
663nobodyさん:03/01/29 12:34 ID:???
引用元はこの古い投稿です。
http://pc2.2ch.net/test/read.cgi/php/997199513/96
664nobodyさん:03/01/29 13:01 ID:22PcLDQj
>>659
なるほど、なんとなくすっきりしました。
もっと一般的な簡単な方法があるのかなと思っておりました。

$aはたまに使ってますね・・・
気をつけます。
665nobodyさん:03/01/29 13:28 ID:???
メモリーの利用効率ねぇ・・・Perlで細かくメモリー管理ができるのかしら。
666nobodyさん:03/01/29 13:31 ID:???
書き方どうこうよりクロスサイトスク(以下略
667nobodyさん:03/01/29 16:39 ID:???
>>666
サーバサイド言語のスレでわざわざ語ることではないけどな。
668nobodyさん:03/01/29 16:54 ID:XF7MERR2
CGIの出力でファイルを新規に作成した場合
FTPソフトなどで作成したファイルを削除・変更しようとしても
権限がなくて実行ができなくなってしまいます。

ファイルを新規作成するときに何か特別な処理が必要なのでしょうか
もちろん調べまくったのですが原因がよくわからないのです。
よろしければ教えていただけないでしょうか?
669nobodyさん:03/01/29 16:59 ID:19DeFoXE
>>668
ファイルの所有者がnobodyとかapacheとかwwwとか、
とにかく自分のものではない場合CGIで作ったファイルはCGIで削除しないといけません。
670nobodyさん:03/01/29 17:05 ID:v+6haFSn
flockがうまくいきません。教えてください。

if (open(MBOX, ">>".$votename)) {
 print "ファイルを開きました。<br>\n";
} else {
 print "ファイルを開けません。<br>\n";
 die "Can't open mailbox: $!";
}
if (flock(MBOX,$LOCK_EX)) {
 print "ファイルをロックしました。<br>\n";
} else {
 print "ファイルをロックできません。<br>\n";
}
この結果、
ファイルを開きました。
ファイルをロックできません。
になりました。
671nobodyさん:03/01/29 17:08 ID:???
>>670
初回時ロックを解除しないで終了しました?
672nobodyさん:03/01/29 17:14 ID:19DeFoXE
>>670
$LOCK_EX = 2;
が無い可能性大。
または、flock(MBOX,2)でどうよ
673670:03/01/29 17:17 ID:???
>>671
レスありがとうございます。
closeしてるから大丈夫だと思ってます。

ISPはinfoseekです。
674670:03/01/29 17:20 ID:???
よく見たらcloseしてませんですた
スレ汚しすまそ
675670:03/01/29 17:22 ID:???
>>672
レスサンクス、逝ってきます
676nobodyさん:03/01/29 17:27 ID:XF7MERR2
お答えありがとうございます
全削除のCGIでもいそいそと作成します
677nobodyさん:03/01/29 18:00 ID:???
正しくは、

use Fcntl qw(:DEFAULT :flock);
flock(FILE,LOCK_EX);

な。
LOCK_EXはおおえす依存だから、シソボルはインポートするのが良い。
678nobodyさん:03/01/29 18:16 ID:zyXgtkRr
679nobodyさん:03/01/29 22:35 ID:???
外部から受け取った変数をファイル読み込みの変数に使うにはどうすればいいのですか?
$bufferという変数に"./hoge.dat"みたいな文字列を渡したのですが、
open(IN, "$buffer");
とやっても上手く開いてくれません
680nobodyさん:03/01/29 23:07 ID:???
外部って何から入力するの?

環境変数なら %ENV、
コマンドライン引数なら @ARGV、
標準入力なら<STDIN>

お好きなのをどうぞ。
681貧乏パーラー:03/01/29 23:08 ID:???
>>553 plala規制で亀レススマソ
シンプルcrond perl板、以下のUUEコードを開いてcrond.plが出来てるから
begin 666 crond.zip
M4$L#!!0````(`+.*.BZ8A!N!J`,``,8'```(````8W)O;F0N<&R555MOTT@4
M?HY_Q2$QQ%8=7](4[28UE(IRD1!")>*ES0K7GC2S./8P,Z98D/WM>\Y,'!)1
MJ<)JW9ES^<YW;N[@4=0H&=WP*A),EDZC&,SYFDVG[^H\*V'F",DK#:>G\[?S
M<[P.X`/:02[KJH#S%MZ$NO[":AC'\7&41,E3<`8KK<4TBN[N[D)V*^M&J#"O
MPW]%M.0E4]%%=3LZ-^'F7*CH1:-K<S"8$480B>$`+]D2\A7+O\!)VK),!I-T
M75?!<5ID;3!.5W4C@R1=\RJ(4\5R\AS#1YU)#1K]%[email protected]\8GCR8%@J
M&)49$)5K5[09OM8UOHIL"%P9>8O/>ET4Z*4TKVY]!,+'`!EB2F=K`=\RJ:9@
M==UC("&UMH:SP=\*D+U>!2989X.I'""0=M5LE29#`N"I]>=5HYDBD6)6A'D3
MA2LQ^8T?EH])ALW#O$=_G4SBF!(<)=N0X@3*^M:T1+"<+UM3GV?/#$Z(*I.V
M>+K`FDBE"10+JYB&5V\O/\XA=&@D'-7<P`>,^AH5/YS>N@6WP+ZEH%9\J7%B
M2.2YR#-PJ54N)A6XU$&7FNFVF?2MD2LTNE'G2IH]S[SI2GI2'J4$C9<'X%+8
MN7KHY\](>I0F?\?QC*SP2(@H))IFP)=>_W$\*?H[/F1WJ!V3%J5&BP'OT:+4
M:)'3/5J46F1^+S*WR-30W[4H):UDNI'5`^ECS3?.6:ETNBO#S''-=DG=+M/X
MX)8$]K+$B4H"N^W]5Z;C-`C751_X$AOXXO+UIZN31?I?](_I?X1\[E8X/5[B
M4^-5R9C`,[(\$X>Q>P3@L6_84Q=I75FL>+'PX1%.NI&+`[G_\Z>WH^4;_-XO
MFIA`;Q_ST!?2#M.(DGTTRG@+USNL2*\W&-A/AY!U3GK"90$M7T`K&=#6TK4.
M:,=QR+93[^T%.\9@,^O\P(1VSK&UW];]`BL^M5#CQ75%MA%Y16;@"&E*F%-"
MQ\YT7^<^;?W(;/WH4R:G1+"C:D@;^B81Q8P?Y7]#@V;(#X&V^`>XLJ05_#P,
M.P[;PV01#N'S#+KY>^[/-D-_!H335/@%43@A9]O"]ER6UP5+GV`$$VF;':&'
M_2[\'Y>HJ]%C2P)L%/B3:A&*&6;KRK[",!YVK/<'(K&VNY!PR;1LX3W[KO$+
MFZM?'\-P![RA]\:4A)7X;]2B%IQ!/Z]E582BA`LI:PG(>+S79>M/[OB+/TLT
M\5R.4^GR4]HE_'MTY%-_S/;P!?;(#CT>9QMG\S]02P$"%``4````"`"SBCHN
MF(0;@:@#``#&!P``"``````````!`"``MH$`````8W)O;F0N<&Q02P4&````
/``$``0`V````S@,`````
`
end
そいで毎朝8時に自分の携帯におはようメール送る例が以下
./crond.pl 2 8 'perl mailsnd.pl SMTPServer from-mailaddr "$pmo月$pda日おはよう" "8時です!"'
と打ってmailsnd.txtに自分の携帯メルアド入れとくこと
682nobodyさん:03/01/29 23:10 ID:???
>>679
それだけじゃ分からんよ……

「外部」ってどこ?
「上手く開かない」って、どう上手く開かないの?
エラーが出てるならその内容も書いて欲スィ。
(Internal Server Error は書いても無駄なのでよろしこ)
683nobodyさん:03/01/29 23:34 ID:Fxyvk81T
すまんです、
文字コードの変換のプログラムをいじくってたら
&jcode'sjis2jis(*value);
↑こんなのあったんですが、これってどういう意味ですか?

必要な情報が少ないかもしれませんがよろしくおねがいします。
684nobodyさん:03/01/29 23:40 ID:???
685679:03/01/29 23:41 ID:???
すみません、外部というのはFLASHのことです。
FLASHがCGIを呼び出す時に"./hoge.dat"という文字列を渡し、
それをCGIが$bufferという変数に受け取ったのですが・・・。
下のようにしてFlashにmyDataとmyBufferという変数を返してみると、
myDataの中身は空っぽでmyBufferの中身は"./hoge.dat"という文字列でした。

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
open(IN, "$buffer");
$toFlash = <IN>;
close(IN);
print "Content-type: text/plain\n\n";
print "myData=$toFlash&myBuffer=$buffer";


ちなみに下のようにPerlに直接ファイル名を書けばちゃんとmyDataにファイルの一行目が表示されました。
$buffer = "./hoge.dat"
686nobodyさん:03/01/29 23:42 ID:???
jcode.pl(だと思うが)で $value を sjis から jis に変換している。
687nobodyさん:03/01/29 23:48 ID:???
>>685
>$toFlash = <IN>;

$toFlash = join('', <IN>);
にしてみる。
688nobodyさん:03/01/29 23:48 ID:???
>>684
>>686
ありがとうございますー!
689nobodyさん:03/01/29 23:53 ID:???
>>688
ahoka
690nobodyさん:03/01/29 23:55 ID:???
>>685
FLASHからのCGI呼び出しがいまいちよくわかんないけど、
GETメソッドで来てるってことはない?
そのソースだとPOSTでしか受け取れないよ。
$ENV{REQUEST_METHOD} の中身はどうなってる?
691679:03/01/30 00:08 ID:???
>>687
やってみたのですが相変わらず何も返ってきませんでした…。
>>690
POSTで送りました、$ENV{REQUEST_METHOD}の中身もPOSTになっていました。
692nobodyさん:03/01/30 00:18 ID:???
>>685
>myDataの中身は空っぽでmyBufferの中身は"./hoge.dat"という文字列でした。
>print "myData=$toFlash&myBuffer=$buffer";
$bufferの内容はカラだったの?
693nobodyさん:03/01/30 00:31 ID:???
$bufferの内容:myBuffer=./hoge.dat
なら、
(undef, $buffer) = split(/=/, $buffer, 2);
かな。
Flashの仕様が判らないんで、すまそ。
(そうだとしたら、きちんと処理した方がいいと思う。)
694679:03/01/30 01:25 ID:???
>>692
>>693
$bufferの内容:./hoge.dat
です。
すみません、実はCGIは勉強し始めてまだ数日なので基礎からなっていません。
もう少し自分でなんとかしてみます。
暫くは適当な値を送ってそれをCGIでif(あればcase)で判定し
その中に直接ファイル名を書いておきます。
(これだとファイルを加えたり名前を変えるたびにPerlを書き換えないといけないのですが・・・)
695nobodyさん:03/01/30 01:28 ID:???
chomp;
696nobodyさん:03/01/30 01:37 ID:???
chomp $buffer;
697nobodyさん:03/01/30 06:56 ID:???
改行がついてるという可能性もあるかもね。
>>695,696はそれが言いたいはず)
表示して確認するときは、前後に " なんかをつけてみるといいかも。
非表示文字がついてるかもしれないから、length で長さを表示して
見た目の長さと一致するか確認するという手もある。
698nobodyさん:03/01/30 07:02 ID:???
$tmp = "./hoge.dat"
として、$bufferと比較してみては
if($tmp eq $buffer){print "OK<br>";}
else{print "NG<br>";}
699nobodyさん:03/01/30 13:25 ID:???
なんか、かわいいな<>>695,696
700nobodyさん:03/01/30 14:28 ID:NtdcRjvu
くだらない質問かもしれませんが、
変数名とかハッシュ名を変数で与えることって出来るんでしょうか?

for($i=0;$i<=$#avs;$i++) {
if ($avs[$i] =~ /^###(.+)_PROCESSING$/) {
$process_id = $1;
$process_id2 = "\L$process_id\E";
$avs[$i] = "${$process_id}{${$process_id2}}\n";
}
}

みたいな感じで、

###DEDOT_PROCESSING っていう行を、

$DEDOT{$dedot} で置き換えたいんですが、うまくいかないです。
何か根本的に勘違いしてますでしょうか?
jperl 5.005 です。
701nobodyさん:03/01/30 14:45 ID:???
$avs[$i] = "\$${process_id}{\$$process_id2}\n";
702700:03/01/30 18:34 ID:tRX1dMh1
>>701
それだと $DEDOT{$dedot} っていう「文字列」にしかならんのでは...
私の書き方もアレでしたが、%DEDOT の $dedot の値で置き換えたいわけで....
703679:03/01/30 18:46 ID:???
解決しました。
lengthで$bufferを調べてみたところ、
"./hoge.dat"だから10でなければいけないのに16になっていました。
chompを使ってみたのですが値は変わらなかったので、substrで1文字目を削ってみると
"2E/hoge.dat"という値が返ってきました。もしかしたらと思い4文字目までを削ると
"2Fhoge.dat"が、11文字目までを削ると"2Edat"が返ってきました。
どうも"."は"\2E"、"/"は"\2F"としてFLASHから送られていたようです(最初の文字が\かどうかは分かりませんが…)。
結局FLASHからは"hoge"だけを送り、CGIで
$buffer = "./$buffer.dat";
とすることで正常にファイルを読み込むことが出来ました。
本当にどうもありがとうございました。
704nobodyさん:03/01/30 20:53 ID:XHYONXXP
CGIを使ってWebからサーバの管理をしてるんだが、
CGIで行ってる処理が重すぎて処理が終わるまでに
ブラウザがタイムアウトしてしまいます。

そのためブラウザがタイムアウトしないように、
CGIで処理をしている間、ブラウザに30秒に1回データを送るとか
そんな方法でブラウザがタイムアウトするのを防げないですか?
705nobodyさん:03/01/30 20:57 ID:???
>>704
作ってみれば?
706nobodyさん:03/01/30 21:01 ID:???
>>705
処理が重いところってsystem関数でOSのコマンドを実行してて、
この1回のsystem関数を実行してる間にブラウザがタイムアウトするんです。
で、system関数でOSコマンド動かしながら同時にブラウザにデータ送れますか?
わかんないね!
707nobodyさん:03/01/30 21:24 ID:???
>>706
fork pipe nph-
708nobodyさん:03/01/30 23:30 ID:???
>>702
$hashname="myhash";
$keyval="key1";
%myhash=( key1=>"key1value",);
$val = "${$hashname}{$keyval}\n";
print ":$val";

で 
:key1val
と表示されたがこれじゃダメなのか?
709nobodyさん:03/01/30 23:54 ID:???
>>700
シンボリックリファレンスを使いたいっていうことだね。

まず、これを理解しろ。
$a = 'DEDOT';
${$a}{key} = 1;
print $DEDOT{key};

で、本題に戻ると、$dedotが正体不明なんだけど、
$avs[$i] =~ s/^###(.+)_PROCESSING$/${$1}{lc $1}/;
もしかしてこうしたいとか?激しく意味不明だけど
710nobodyさん:03/01/30 23:56 ID:???
>>702
それより気になるのがその処理内容なんだが……。
1つのハッシュに1つのキーしか入れないのでは、ハッシュの意味がないと思うんだけど。
あくまで例としてなら別にいいんだが、そうじゃないなら処理内容を見直したほうがいいかもよ。
711 :03/01/31 04:10 ID:???
翻訳掲示板を作っています。書き込みは、例えば日本側なら英語訳、英語側なら
日本語訳も記録して、日英かかわらず全ての投稿を母国語で閲覧でき、コミュニ
ケートできる、というような感じのものです。

で、掲示板スクリプト自体は簡単にできるのですが、やはり翻訳がネックとなって
います。自分で翻訳ソフト用意して、高価なサーバーをレンタルしたり、自宅で
専用線でサーバー立てたりすると、かなりの金額がかかってしまうと思うのです
(非商用の個人サイト運営程度には)。

できれば、オンラインの翻訳サービスを自分のスクリプト内で利用したいのですが、
個人で翻訳機能だけレンタルすると幾らくらいかかるんでしょう? 無料でウェブ
翻訳、テキスト翻訳を公開しているところもありますが、そういう用途に
使うのは断り書きを出してもやはり不味いですかね?
712nobodyさん:03/01/31 06:28 ID:/ObcG1bj
>>711
全然Perlと関係ないじゃん。
AMIKAIが翻訳サービスOEMの老舗だけど相当高そうだね。
自分で翻訳ソフト買ってもサーバとして使うにはライセンス料が
えらく高くなる。
結局のところ掲示板を見てもらうときにexcite翻訳を通して見てもらう
しかないのでは?掲示板に入る時にexcite翻訳へのリンクを作るとか。

自作CGIで勝手にexcite翻訳を使って翻訳することも可能だけど、
exciteの広告が表示されない利用方法は問題があるからやめた方がいい。
713nobodyさん:03/01/31 07:08 ID:6uKSmBl3
http://www6.ocn.ne.jp/~endou/index2.html
      ★こんなサイト見つけました★
714 :03/01/31 07:52 ID:???
>>712
すいません。掲示板自体はperlで作っていたもので。
私の方では無論、広告やそのサイトのバナーを掲示板に表示させることは
まったく構わないのですが、向こうの方でそういう利用法を了承するかは、
やはり難かしいですかね。

翻訳は、例えばフリーのテキスト翻訳サービスを利用すると、form getを
使ってurlに投稿文を含ませたのを送って(trans.cgi?text=$body&lang=....)、
帰って来た翻訳をまたPERLで処理して出力する、という感じです。
単なる個人サイトなので、値段が年1万円を超えるようだと少し辛いです…

好きな様に利用できる本当にフリーの翻訳サイトは何処かに無いでしょうかね。
企業が無料公開しているようなのではなくて、教育機関や個人がGNUライセンスで
作ったような…
715nobodyさん:03/01/31 07:58 ID:0xsv6W8Z
http://www.kenmon.net/

これってアリ?


716nobodyさん:03/01/31 08:00 ID:/ObcG1bj
>>714
http://www.excite.co.jp/world/agreement/
他のサービスでもたぶん同じ規約でしょう。

韓日混在の掲示板というのは見たことあるから、英日混在っていいうのも
探せばあるかも。そこがどういうやり方でやっているか。
技術的には易しいけど、翻訳サービスを安く利用するというのが難しそう。
717712:03/01/31 08:05 ID:???
>ユーザーは当該私的利用の範囲を超えて、例えば営利目的のために
>本サービスによる翻訳結果を公表、引用、改変等により使用する
>ことはできません。

勿論、「営利目的」ではないですが、個人サイトの掲示板で使用するというのは
「私的利用」の範囲を超えるのか…個人利用する分にはCDコピーはいい(?)けど、
Napsterとかで公開するのはまずい、という感じに近いのか…。
718712:03/01/31 08:29 ID:???
http://www.amikai.com/company/customers.jsp
あ、スタンフォード大学にもありますね。
教育機関だし、どんなもんかな、、、
719nobodyさん:03/01/31 08:35 ID:???
>>704
CGIでサーバ管理するな。
720nobodyさん:03/01/31 10:13 ID:NKGtpjno
掲示板を作っているのですが、
&を&amp;に変換したいんですよ。

でもそうすると、&hearts;とわざわざ入力したときに
&amp;hearts;となってしまいハートとかを出せなくなってしまう。

どういう変換方法にすれば、
&→&amp;
>→&gt;
<→&lt;
&hearts;→&hearts;(変換されない)

こういういい感じになるんでしょうか?

ちなみに2ちゃんはどうなってるんのかわかりますか?

よろしくお願いします。
721nobodyさん:03/01/31 10:20 ID:???
>>720
s/&\[^([a-zA-Z].;)]/&/g
722nobodyさん:03/01/31 10:21 ID:???
>>721
s/&\[^([a-zA-Z].;)]/&amp/g
723nobodyさん:03/01/31 10:21 ID:???
s/&\[^([a-zA-Z].;)]/&amp/g
724720:03/01/31 10:31 ID:???
はげしくどうもです!
あまりにスマートな回答に感動しました。
私はまだまだ修行がたりないようです。

またどうしてもわからなくなったら相談させてください。
725nobodyさん:03/01/31 10:45 ID:???
>>724
試してないからテストしてね。
726nobodyさん:03/01/31 10:46 ID:???
ごめん、&の後ろの¥もいらない。

2chの特殊文字変換に翻弄されまくっている私。
727nobodyさん:03/01/31 11:16 ID:5ww5eJFm
ここの
http://www.salut.ne.jp/bf/wmh/seminar/c010/index.php3
この
http://www.salut.ne.jp/bf/wmh/seminar/c010/enquetesys.txt

このプログラムを動かしたのだが、シンタックスえらーがでて困ってます。
728720:03/01/31 11:17 ID:???

じゃぁつまり、
$value =~ s/&[^([a-zA-Z].;)]/&/g;

でOKですか?
セミコロンはエスケープしなくていいんですよね?

聞く前にとりあえず試してみます。
729720:03/01/31 12:10 ID:???
すいません・・・

動きません。

これでは
$value =~ s/&[^([a-zA-Z].;)]/&amp;/g;
エラーになります

&^([a-zA-Z].;)
だとエラーになりませんが変換されないし・・・

さっぱりです。
730720:03/01/31 12:12 ID:NKGtpjno
↑は一応しつもんなのでageさせていただきます
731 ◆PerlqhxPVA :03/01/31 12:21 ID:???
>>729
$value =~ s/&(?![\#0-9a-zA-Z]+;?)/&/g;
でどぉだ?
732 ◆PerlqhxPVA :03/01/31 12:23 ID:???
>>731
$value =~ s/&(?![\#0-9a-zA-Z]+;?)/&amp/g;
エスケープ忘れスマソ
733 :03/01/31 12:33 ID:???
Strictを使った時にエラーが出ない様に、
冒頭でour ($aaa,$bbb)って感じで大量に
global variablesを列記してるのですけど、
これってやる意味あるのでしょうか? 
書かなくてもStrict外せばscript自体は動くのですが。
734720:03/01/31 12:37 ID:???
>>732
完璧です。泣ける。
すでに私には理解できない正規表現になっちゃってますが・・・。
勉強してきます。

ついでに、こういうときって、不明な実体参照をいれても
もちろんそのままになりますよね。

これは掲示板の仕様として正しいのでしょうか?

それともちゃんとした実体参照なのかどうかのチェックをいれてあげる
べきなのでしょうか。

ちょっとスレ違い気味の質問かも。
735nobodyさん:03/01/31 12:57 ID:???
>>733
グローバル変数を極力使わないようなコーディングを心がけるべし。
736nobodyさん:03/01/31 13:14 ID:???
>>732

a = j&p;

737 :03/01/31 13:38 ID:???
くだらない質問ですが
「data」に書きこむ際に「http://〜」の文字を送ると「http//〜」のように「:」が抜けて
「data」に書きこまれるんですがなんでかわかりません。どうしてでしょう?
738nobodyさん:03/01/31 13:39 ID:???
>>737
それだけで分かれと言う方が無理。
739nobodyさん:03/01/31 14:03 ID:???
>>737
まぁ、データのセパレーターか何かでコロン使ってるんじゃないの?
スクリプト中で消されてるんだろ。
740nobodyさん:03/01/31 14:14 ID:???
>>737
そもそも "data" って何だ?ファイル名か?ファイルハンドルか?
ファイルハンドルは大文字使ったほうがいいぞ。
ただし DATA ファイルハンドルは予約されてるから注意な。

とりあえずソース晒せ。
741nobodyさん:03/01/31 14:20 ID:???
お前ら、このアホがPerlなんぞ書けるとでも思ってるのか?
742nobodyさん:03/01/31 14:27 ID:Q0yPIF7u
MS-DOS上でPerlを動かしているのですが、
My Documentsのようにスペースの入ったフォルダのなかまでglobでファイル一覧を得ることはできないのでしょうか?
なるべくならワークディレクトリを移動せずに相対パスで指定したいのですが。

print glob("dc\\My Documents\\*");
743nobodyさん:03/01/31 14:40 ID:???
>>742
ファイル名をMS-DOS形式で記述してみては?
My Documents → MYDOCU~1 とか。
744nobodyさん:03/01/31 14:48 ID:???
すいません…
やってみましたが、WinMEなのでプロパティにはDOS形式のファイル名が表記されていませんでした。
あと、深いディレクトリまで自動探索していくバックアップ系ツール(のヘタレ品)なので、globで得たディレクトリ名を自動的にDOS形式のファイル名に変換するというのも漏れの技術では少々難ありです…

なんでか、ロングファイル名でglobに引っかかるんですよね。
745nobodyさん:03/01/31 14:51 ID:???
>>744
dirコマンドのオプションを確認。
746744:03/01/31 14:56 ID:???
>>745
globでdirコマンドのオプションが使えるということでしょうか?
dir /? してみたところ、 /p w a o s b l v 4 の各オプションがあるようですが、旧ファイル名で表示するオプションは見当たりませんでした…。
747nobodyさん:03/01/31 14:56 ID:6uKSmBl3
http://www6.ocn.ne.jp/~endou/index2.html
      ★こんなサイト見つけました★
748 :03/01/31 15:02 ID:???
>>735
ああ、つまりglobal関数は極力控える方が良いコーディングになる
ということなんですかね。
749nobodyさん:03/01/31 15:03 ID:???
>>744
globじゃなくて、readdirでディレクトリ内を取得してみたら?
これでディレクトリを移動する処理を組んだけど、スペース入りディレクトリも
ちゃんと辿っていけたよ。
750744:03/01/31 15:05 ID:???
なるほど!!readdirですか!Σ( ̄Д ̄;)
さっそく試してみます。ありが沌でした!
751nobodyさん:03/01/31 20:42 ID:???
>>734
すべて変換して実態参照を無効化する。必要なものは元に戻す。ってすればいい。

つまり、
s/</</g;
s/>/>/g;
s/&/&/g;
s/&hearts;/♥/g;

&hearts(セミコロンを忘れたもの)は無効なものとして処理しておけばいいじゃろう。
752nobodyさん:03/01/31 20:48 ID:???
>>751
で、すべての実体参照にその論理で対応するわけか。ブルーだな。
753nobodyさん:03/01/31 21:09 ID:???
>>752
そのぐらい工夫してよ。。
一番簡単で安全だと思ったから書いたんだけどー、
自分では分からなかったから悔しいのかな?

$text =~ s/</&lt;/g;
$text =~ s/>/&gt;/g;
$text =~ s/&/&amp;/g;

@allow = qw(hearts ... ...);
foreach my $str (@allow) {
 $text =~ s/&amp;$str;/&$str;/;
}
754nobodyさん:03/01/31 21:21 ID:???
>>753
>@allow = qw(hearts ... ...);
これがダサいと言ってるんだが・・・。
755nobodyさん:03/01/31 21:27 ID:???
じゃあ速くて格好いいのを書いてください。
756727:03/01/31 21:49 ID:5ww5eJFm
require 'cgi-lib.pl';
&ReadPlarse(*form);
require 'jcode.pl';
&jcode'convert(*form,'sjis');
$data = $form{'name'}\n$form{'mail'}$form{'sex'}\n$form{'ryori'}\n$form{'message'}\n\n
open(ENQ, ">>$enqdata.dat")||do{print "ERR";exit;};
#flock(ENQ, 2);
print ENQ $data;
#flock(ENQ, 8);
close(ENQ);
print "Content-type:text/html\n\n";
print >> "END_OF_HTML";
<HTML>
<HEAD>
<TITEL>有難う御座いました</TITLE>
</HEAD>
<BODY>
アンケートは送信されました!<BR>
またのお越しをお待ちしています
</BODY>
</HTML>
END_OF_HTML

これを動かしたらシンタックスえらーがでたけどなんで?
公開されているプログラムなのに。
http://www.salut.ne.jp/bf/wmh/seminar/c010/index.php3
757nobodyさん:03/01/31 22:14 ID:1gqujj9y
>>756
またおまえか。馬鹿かお前は。
エラーが出たんならどんなエラーがさらさんとわからんだろうが。
本気で答えて欲しいのならそれなりの情報を出せこの厨房が。
758nobodyさん:03/01/31 22:17 ID:???
>>734
確か、&はいっさいCGI側で変換しない方がいいよ、
っていう文章を読んだことがある気がしたんだけどソース失念。

もし&ltr;のように封じたい文字参照があれば
狙い打ちでエスケープすれば済むし。
759not754:03/01/31 22:25 ID:???
>>753
my %refchr = qw(hearts & clubs & diams & spades &);
$text =~ s/&(\w+?);/($refchr{$1} or '&')."$1;"/ge;
もちっとマシな書き方があるかも。

>>756
エラーをコピペ。
500 Inter(略は無意味だからね。
760751:03/01/31 22:37 ID:???
自分が想定しないゲロい実体参照を入れられる事が、危険だと考えるなら、
有効だと思うんだけどなぁー

>>759
&aaaaaみたいなものの&がそのまま残る可能性があるから、ブラウザに拡大解釈
される可能性が残るので良くない。
これに対処しようとすると、その方法だと異常にやることが増えて、>>751に書いた(変だけど)
単純な置換の方が圧倒的に速くなる、はず。
761759:03/01/31 22:49 ID:???
ほんとだ。
あちらを立てればこちらが立たず。
762nobodyさん:03/01/31 23:32 ID:???
# 安全
s/&(?!(?:amp|#(?:[Xx][0-9A-Fa-f]+|[0-9]+));)/&/g;
s/"/"/g;
s/</</g;
s/>/>/g;

# 便利
s/&(?!#(?:[Xx][0-9A-Fa-f]+|[0-9]+);)/&/g;
s/&(?:amp;)([0-9A-Za-z]+;)/&$1/g;
s/"/"/g;
s/</</g;
s/>/>/g;
763nobodyさん:03/01/31 23:34 ID:???
あー。

# 安全
s/&(?!(?:amp|#(?:[Xx][0-9A-Fa-f]+|[0-9]+));)/&amp;/g;
s/"/&quot;/g;
s/</&lt;/g;
s/>/&gt;/g;

# 便利
s/&(?!#(?:[Xx][0-9A-Fa-f]+|[0-9]+);)/&amp;/g;
s/&(?:amp;)([0-9A-Za-z]+;)/&$1/g;
s/"/&quot;/g;
s/</&lt;/g;
s/>/&gt;/g;
764nobodyさん:03/02/01 01:11 ID:PH6PPkmG
↑にも出てるけど・・エラーメッセージってどうやって出すんですか?
俺今までInternalServerErrorがでると1行1行チェックしてた・・・・

誰かアホな俺に教えてくれ。。
765nobodyさん:03/02/01 01:21 ID:???
>>756
スクリプトの記述ミス発見したところだけ
これ以上はしらん。後は自分で探してくれ。

誤:&ReadPlarse(*form);
正:&ReadParse(*form);

誤:print >> "END_OF_HTML";
正:print <<"END_OF_HTML";
766nobodyさん:03/02/01 01:33 ID:???
767 ◆PerlqhxPVA :03/02/01 01:43 ID:???
うちの鯖は 500 鰓の時、エラー内容の出力をさせています。
でも、ディレクトリ構造がばれるのでこあいです(w

♪なんだか & 処理が加熱しているねぇ、、、
 そこまで何にも考えていなかった、、、スマソ
768764:03/02/01 01:49 ID:ofCxo2ei
>>766

ありがと〜
769nobodyさん:03/02/01 02:27 ID:???
test
770nobodyさん:03/02/01 11:59 ID:E95fdX8s
mod_perl で動かすとApacheのエラーログに
サブルーチンがなんたらかんたらと出ます。
なんでかな?

Subroutine main redefined at /usr/local/apache/perl/main.cgi line 16 (#1)
(W redefine) You redefined a subroutine. To suppress this warning, say

{
no warnings;
eval "sub name { ... }";
}
771nobodyさん:03/02/01 12:16 ID:0/Z0vaJ7
772nobodyさん:03/02/01 12:23 ID:???
>>770
コード出せハゲ。
773nobodyさん:03/02/01 12:23 ID:???
>>770
関数の2重定義してない?
774nobodyさん:03/02/01 12:27 ID:E95fdX8s
>>772
やだ。
>>773
それはないです。
perl -c で実行してもOK。
CGIで起動した時もOK。
mod_perl環境の時にだけエラーでる。
775nobodyさん:03/02/01 12:27 ID:???
>>772
やだ。
>>773
それはないです。
perl -c で実行してもOK。
CGIで起動した時もOK。
mod_perl環境の時にだけエラーでる。
776nobodyさん:03/02/01 12:33 ID:???
やだ?なら質問するな。
777nobodyさん:03/02/01 13:00 ID:???
mod_perl(Apache::Registry)で動かしたいと思うなら、真面目に書かないと無理なんだよ。坊や。
778nobodyさん:03/02/01 15:48 ID:???
Perlの入門書を見て勉強中ですが、
$|=1;
としてバッファを・・・・
とか言われるのですが
そもそもバッファとはなんぞや?
と初心者の私は疑問をもつわけで・・
その辺をうまく説明していただけないでしょうか?
779nobodyさん:03/02/01 15:51 ID:???
>>778
ダムだよ。ダム。

ちょろちょろとしか来ないデータをある程度貯めておいて一気に取り出したり、
速い流れを取りあえずせき止めておいて自分のペースでゆっくり処理したり。

そう言うことに使う入れ物だ。
780nobodyさん:03/02/01 16:26 ID:???
>>778
「おーい、ちょっと倉庫からこけし100本持ってきてくれ。あ、一度に渡すのは1本でいいから」

倉庫に行って1本持って戻ってきて渡す。これを100回繰り返す。(バッファなし)
一旦倉庫から100本まとめて近くの机の上に持ってきて、そこから1本ずつ手渡す。(バッファあり)

この「近くの机の上」に相当するのがバッファ。
781778:03/02/01 16:47 ID:???
バッファあり、なしの違いはなんとなくわかったけど
プログラムを組む上で
バッファありとなしとでなんか変わりますか?
たとえばsysread()とread()で、
結局読み出すんなら一緒だと初心者の私は思ふ。
そこらへんプログラムを書く人はどのように
使い分ける必要があるんだろ?
782nobodyさん:03/02/01 16:56 ID:???
速度が数倍から数十倍違う。
こういうことに気をつけることをせずにプログラムを組んでいくと
いずれ、「遅いぜっ!ヴァニラアイス!」
という感じで、体中を串刺しにされる運命を辿ることになる。
783nobodyさん:03/02/01 17:00 ID:???
>>781
速度が全然違うよ。
バッファなしなんて遅すぎて使い物にならない。
……っていうのは、8ビット時代のお話。

Perlの場合、既にプラットフォーム上(UNIXなりWinなり)でバッファリングしてくれて
いるので、Perl自身がバッファリングしなくてもそれほど体感的な差はないと思う。
でも、バッファの考え方自体は覚えておいたほうがいいと思うよ。
ファイルを一旦リストに読み込んで処理…なんてのもバッファ的なやり方だし。
784nobodyさん:03/02/01 17:09 ID:???
>>781
Socketを使う時はリアルタイムにやりとりが必要になるんで、
バッファを回避しないとまずい。
785nobodyさん:03/02/01 17:24 ID:???
Perlで任意の時点でバッファをフラッシュする方法がわからん・・・fflushなんて関数もないし。
しかたないからunbufferedにしちゃっているけど。
786nobodyさん:03/02/01 17:56 ID:???
$fh->flush;
787nobodyさん:03/02/01 18:17 ID:???
>>785
私も知りませんでした。
>>786
FileHandleモジュールで、いいでしょうか。
調べたところIO::Handle由来の機能っぽいですね。
(FileHandleのドキュメントに無かった…)

旧来の書き方なら flush FH; とかですか。
788nobodyさん:03/02/01 18:49 ID:???
IO::Fileじゃないと使えないぽい。

でも最近のFileHandleはIO::Fileを使うようになってるから、FileHandleでも使えるかも。
789nobodyさん:03/02/01 20:01 ID:???
>>783
差が出る使い方すれば差が出る。
790nobodyさん:03/02/01 20:24 ID:???
>>782
ちなみにバッファリング あり、なし
でどっちが速いの?
791nobodyさん:03/02/01 20:58 ID:???
>>790
人の話聞けよ。
792nobodyさん:03/02/01 21:32 ID:DN2rKwgG
当方、ActivePerl5.6とApacheHTTPServer2.0.43で自鯖を構築したのですが、
掲示板スクリプトを自鯖にUPしたところ、bbs.cgiが表示されません。
真っ白です。なぜでしょうか?
ちなみに、管理モードに入るためのパスとログイン名入力のページは表示されます。
しかし、そこから、bbs.cgiに行っても、やはり真っ白です。
793nobodyさん:03/02/01 21:40 ID:???
bbs.cgiなんてどこにでもあるようなものじゃわからん。
それにスレ違い。
ここはPerlのコーディングについてのスレッド。
794nobodyさん:03/02/01 21:44 ID:???
>>793
板違いだよ。
795nobodyさん:03/02/01 21:47 ID:DN2rKwgG
>>793
うっせぇぼけ。仕立てにでりゃ調子こいてんじゃねぇぞ。
答えれないだけだろ低スキル野郎。てめぇはチンカスほじって寝てろや。
796nobodyさん:03/02/01 21:47 ID:DN2rKwgG
>>794
違げえよばーか。
797nobodyさん:03/02/01 22:00 ID:???
>>792
(・∀・)ニヤニヤ
798b:03/02/01 22:18 ID:???
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 24時間受付  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  [email protected]
   グローバル探偵事務局 

799nobodyさん:03/02/01 22:29 ID:???
ここで熱くならずに無視できたら大人!
800nobodyさん:03/02/01 22:32 ID:???
>>799
(・∀・)ニヤニヤ
801nobodyさん:03/02/01 23:03 ID:???
悔しかったら自分で調べること。誰も怒らないから。
802nobodyさん:03/02/01 23:24 ID:???
>>792.795.796
プププ
哀れだね
803nobodyさん:03/02/01 23:33 ID:???
>>802
ここで熱くならずに無視できなかったから子供?
804nobodyさん:03/02/01 23:42 ID:???
>>803
よくご存じで。
805nobodyさん:03/02/01 23:42 ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < ファイルテスト演算子
 (ニE(#つo⊂#)

ファイルテスト演算子は、こんなことができる演算子だよ。
・このファイルがあるかどうかチェック (-e)
・ファイル(ディレクトリ)が読めるかどうかチェック (-r)
・ファイル(ディレクトリ)に書けるかどうかチェック (-w)
・ファイルかどうかチェックする (-f)
・ディレクトリかどうかチェックする (-d)
・ファイルのバイト数をチェックする (-s)

これくらい知ってるといいね。
実例だよ。

if ( -e "test.txt" ) { print "ファイルがあるよ"; }
else { print "ファイルないよ"; }

if ( -r "test.txt" ) { print "ファイルから読めるよ"; }
else { print "ファイルから読めないよ"; }

if ( -f "test.txt" ) { print "通常ファイルだよ"; }
else { print "通常ファイルじゃないよ"; }

$size = -s "test.txt";
print "$sizeバイト";

他にもいろいろあるんだけど、また必要になりそうだったら説明するね。
ややこしい説明はなるべく避けたいからね。。

じゃあ次回は、他の文字列処理関係の関数を勉強するよ
806nobodyさん:03/02/02 01:13 ID:???
>>805
誤爆か……
807厨房:03/02/02 07:09 ID:45tlaHB9
置換に関する質問です。

$a = "aaa"; $b = "aa";
$a = ~s/^$b//;
print "$a\n";

これを実行すると
a
という実行結果になると思うのですがなぜか
4294967295
という実行結果が出ました。。 なぜでしょう?
perlのバージョンは
5.005_03 built for i386-freebsd
です。。
808マリモーマ ◆r6PDGT6Xd2 :03/02/02 07:20 ID:m/KRriEG
^$bのせいでは?
809nobodyさん:03/02/02 07:23 ID:???
$a =~ s/^$b//;
810厨房:03/02/02 07:27 ID:45tlaHB9
あー
>>809さんの指摘通りでした。。
>>808さん>>809さん、ありがとうございました。
811nobodyさん:03/02/02 09:20 ID:mV23mEyN
自分でライブラリを作るんだけど、

package MYLIBRARY;
sub new {
  ・・・
}

とか書きますよね。
んで、このソースにも、ちゃんと my のチェックをしたいので、use strict を書こうと思うんですが、

use strict;
package MYLIBRARY;
sub new {
  ・・・
}

とすべきか

package MYLIBRARY;
use strict;
sub new {
  ・・・
}

とすべきか迷ってます。
package よりも前に書くのと後に書くのはいっしょなんですか?
それとも、なんか違うんですか?
812 ◆PerlqhxPVA :03/02/02 10:38 ID:???
>>811
他の汎用ライブラリをお手本にする。
813nobodyさん:03/02/02 14:10 ID:pmlltvJ1
↓ここまとめられないかな?
my($a)=&hoge();
@b=@$a;

sub hoge {
------
return(\@a);
}
814nobodyさん:03/02/02 14:21 ID:pmlltvJ1
ごめんできた
815nobodyさん:03/02/02 14:24 ID:???
>>814
どうやって?
知りたい。
816nobodyさん:03/02/02 15:28 ID:6TL1miGW
>>815
>>814じゃないけど、
@b=@{hoge()}
ってことでしょ。

配列のコピーが発生するからリファレンスのまま行った方がいいような気がするが
817nobodyさん:03/02/02 15:52 ID:???
掲示板で
$trip って入れてあるところにトリップ出せるような
機能のつけかた教えてください。
818nobodyさん:03/02/02 15:55 ID:???
>>817
$trip = "トリップ";

面倒だからやめた。htmlファイルなめて正規表現で該当箇所置き換えろ。
819 e:03/02/02 16:07 ID:???
# ハンドル(トリップ)
&jcode::tr(?$FORM{'FROM'}, '#', '#');
if($FORM{'FROM'} =~ /([^?#]*)?#(.+)/){
my $main_message = $1;
my $handle_pass = $2;
my $change_salt = substr($handle_pass, , 1) . "H";
$handle_pass = substr(crypt($handle_pass, $change_salt), -8);
if($main_message ne ""){
$FORM{'FROM'} = "$main_message </b>◆$handle_pass <b>";
}else{
$FORM{'FROM'} = "</b> ◆$handle_pass <b>";
}
}
820nobodyさん:03/02/02 16:15 ID:???
そういうのはCGI改造スレでやってくれ。
821727:03/02/02 21:03 ID:ionxQd5/
require 'cgi-lib.pl';
&ReadPlarse(*form);
require 'jcode.pl';
&jcode'convert(*form,'sjis');
$data = $form{'name'}\n$form{'mail'}$form{'sex'}\n$form{'ryori'}\n$form{'message'}\n\n
open(ENQ, ">>$enqdata.dat")||do{print "ERR";exit;};
#flock(ENQ, 2);
print ENQ $data;
#flock(ENQ, 8);
close(ENQ);
print "Content-type:text/html\n\n";
print >> "END_OF_HTML";
<HTML>
<HEAD>
<TITEL>有難う御座いました</TITLE>
</HEAD>
<BODY>
アンケートは送信されました!<BR>
またのお越しをお待ちしています
</BODY>
</HTML>
END_OF_HTML
これを実行したら
Backslash found where operator expected at enquetesys.pl line 11, near "}\"
(Missing operator before \?)
syntax error at enquetesys.pl line 11, near "}\"
enquetesys.pl had compilation errors.
ってえらーがでました。
落してきたソフトを実行しただけなのになんでエラーがでるのでしょうか?
822nobodyさん:03/02/02 21:08 ID:???
>>821
まともに設定もされてないんだろ。
823nobodyさん:03/02/02 21:10 ID:lbpBAa4z
ファイルハンドルの配列というのはできないのでしょうか?
$MAX = 2;
@NAME = ('a','b');

for($i=0;$i<$MAX;$i++){
  open(@FILE, "./$NAME[$i].txt");
}

これだとエラーになってしまいました。
上記のコードのミス、もしくは何か他の方法がありましたらアドバイスお願いします
824nobodyさん:03/02/02 21:13 ID:???
>>823
って言うかそんないっぺんにファイル開いて何する気よ?
825デフォルトの名無しさん:03/02/02 21:16 ID:???
>>821
エラーメッセージちゃんと理解するように努力しろよ。
英語分かんなかったら又厨房からやり直せ
826nobodyさん:03/02/02 21:16 ID:???
>>821

>$data = $form{'name'}\n$form{'mail'}$form{'sex'}\n$form{'ryori'}\n$form{'message'}\n\n
$data = "$form{'name'}\n$form{'mail'}$form{'sex'}\n$form{'ryori'}\n$form{'message'}\n\n";

>print >> "END_OF_HTML";
print <<"END_OF_HTML";

そして最後の改行も忘れずに。
827nobodyさん:03/02/02 21:21 ID:???
>>826
さて、厨房を甘やかした代償がいかに大きいかわかってないバカがいるわけだが。
828 ◆PerlqhxPVA :03/02/02 21:23 ID:???
>>827
しかもマルチだたし(哀)
829nobodyさん:03/02/02 21:23 ID:GIziK5Md
スレ汚し失礼します。
今、
http://live.2ch.net/test/read.cgi/festival/1044106562/
このスレで
http://blatt.hp.infoseek.co.jp/
このサイトが大流行
みなさんも逝ってみてください。
よろしくおねがいします。
失礼しました。
830nobodyさん:03/02/02 21:27 ID:???
mod_perl では exit()が使えないんらしいんだけど・・・
どうすんの?
exit()なしで終り?
831:03/02/02 21:33 ID:skZYA3IH
他にも書いちゃ単ですが・・・

ローカルでCGIを動かしたところ,うまく動作しました。
で,インターネットテンポラリーファイルとクッキーを削除したら
クッキーが復活しません。
どうしたらいいですか?
832nobodyさん:03/02/02 21:43 ID:???
データファイルをまとめるCGIを作っているのですが、
日本語検索がうまくいきません。
if($test =~ /テスト/)
だとエラーになってしまいました。
jcodeというのもちゃんと入れました。
何かよい方法はないでしょうか?
833nobodyさん:03/02/02 21:46 ID:???
>>832
jcode入れたところで標準の正規表現は英語用です。
834826:03/02/02 21:56 ID:???
がーん( ̄A ̄||)
835727:03/02/02 22:43 ID:ionxQd5/
>>827
ありがとうございました。
って言うか。コンパイルエラーが出るようなプログラムを
PERL講座って感じで公開しないで欲しいですよ、まったく。
836nobodyさん:03/02/02 23:10 ID:???
>>835
講座である以上素人相手ではないのだから多少のミスはユーザ側で直して当然ということだろう。

実際、人の間違ったコードというのは課題としてよく使われる。
837nobodyさん:03/02/02 23:30 ID:???
838nobodyさん:03/02/02 23:32 ID:???
>>837
かと言って>>727が賢いわけでもあるまい。

そのヘボのスクリプトさえ使いこなせないわけだ。
839nobodyさん:03/02/02 23:50 ID:???
>>838
その件については禿しく胴囲する。
840:03/02/03 00:15 ID:XAlS7Khu
ローカルでCGIを動かしたところ,クッキーが機能しました.
で,クッキーを削除したら クッキーが機能しません。
クッキーを復活させるにはどうしたらいいですか?
841nobodyさん:03/02/03 00:30 ID:???
またクッキーを食べさせろ。
842nobodyさん:03/02/03 01:53 ID:???
>>823
use Symbol;
my %fh = (foo => gensym, bar => gensym, baz => gensym);
my($i, $file, $fh) = (1);
open $fh, ">$file.txt" or die while ($file, $fh) = each %fh;
for (0..4) { print $_ $i++ for values %fh }
close $_ for values %fh;

>>830
http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl1.html
843nobodyさん:03/02/03 07:12 ID:JvqhDUOZ
日本語が混じったファイルの整理をするCGIを作りってるのですが、
↓のようなモノを数人分をtableでまとめようとしています
--------------------
あああ 123回
いい   11回
うううう 50回
----------------------
このような感じで文字は左端にそろえてあり、
回数のほうは「回」の部分でそろえられています。
この場合どのようにしたら回数の部分を読み込めるのでしょうか?

まず、日本語検索をしようとしてもエラーになってしまい、
もし日本語検索がうまくいったとしてもそのあとはどうすればよいのかと、
試行錯誤しております。
何かアドバイスありましたらご教授お願いします
844nobodyさん:03/02/03 07:46 ID:???
>843
EUCで処理。
正規表現で抜き出す。

> もし日本語検索がうまくいったとしてもそのあとはどうすればよいのか
知らんよ、おまいの心は漏れにとどかんとよ。
845デフォルトの名無しさん:03/02/03 07:56 ID:???
$_ = 'あああ 123回';
/(\d+)/; print $1,"\n";
846nobodyさん:03/02/03 10:07 ID:???
>>843
データのフォーマットから見直すべき。
整形は出力時にやれ。
847nobodyさん:03/02/03 10:42 ID:D3Jh7Sun
すいません、本当はEXCELのVBとかでやるべきことなのかもしれませんが、
自分はperlに関して少々の知識があるくらいなので質問させていただきます。
htmlで、各人の名前にリンクでメールアドレスがついてるソース

例えば
<a href="mailto:[email protected]">AAA</a><br>
<a href="mailto:[email protected]">BBB</a><br>
<a href="mailto:[email protected]">CCC</a><br>
.
.
.

みたいになってるときに、ソースをテキストファイルとして保存し、それを読み込んで
メールアドレスだけ取得し、別のテキストに書き出したいのですが、どうやって検索したら
アドレスだけ抽出できますか?
自分ではアドレスには前にmailto:があり、最後は(自分の場合は携帯アドレスなので).jpで終わってる
ので、この間にある部分をすべてとるようにしたいのですが、可能ですか?




848nobodyさん:03/02/03 10:59 ID:???
>>847
できるよ...
つーか2,3個前のレスぐらい嫁。
おんなじようなことやってるやん。
849nobodyさん:03/02/03 11:11 ID:???
>>847
@mail = map { /mailto:(.+?)"/ and $1 } @html;
850nobodyさん:03/02/03 12:01 ID:D3Jh7Sun
>>848
>>849
ありがとうございます。perlに関する知識があるとはいえ、ソースの意味が
なんとなくわかる程度なので、作るとなるとごく基本的な事もあやふやです。
#!/usr/bin/perl


$datafile = "./mail.dat";
$sortfile = "./sort.dat";

open(LOG,"$datafile");
@html = <LOG>;
close(LOG);
@mail = map { /mailto:(.+?)"/ and $1 } @html;

open(FILE, ">$sortfile");
print $mail;
close FILE;
exit;

どこがおかしいですか?お願いします☆
851nobodyさん:03/02/03 12:11 ID:???
Perl2EXEの使い方、または参考になるページを
ご存じの方がいらっしゃいましたら教えてください。
852nobodyさん:03/02/03 13:38 ID:???
>>850
perlに関する知識があるのにソースの意味がなんとなくわかる程度なのか?
おかしいのはチミの頭だYO

ちなみに漏れにはperlの知識は殆ど無い

print FILE $mail;
853nobodyさん:03/02/03 13:44 ID:???
文字列のバイト数を改行コード「\n」込みで算出したいのですが、
なにか良い方法はありますでしょうか?
今の自分のレベルでは、
$string = qq(「\\n」が含まれた任意の文字列。\nThe arbitrary character sequences in which '\\n' was contained.);
$length = scalar(map{1} unpack("C*",$string));
print "任意の文字列 \$string の総バイト数は $length です。\n";
くらいしか思い付きませんでした。
もうすこし賢い方法ってありますでしょうか?
854nobodyさん:03/02/03 13:48 ID:???
$mailってな(ry
855nobodyさん:03/02/03 13:52 ID:???
と、すると・・・
print FILE @mail;
かな?
856nobodyさん:03/02/03 14:10 ID:???
$ perl -ne '/mailto:(.+?)"/ && print "$1\n"' mail.dat >sort.dat
は嫌?
857nobodyさん:03/02/03 16:08 ID:???
>853
length() だと不都合あるの?
858デフォルトの名無しさん:03/02/03 18:23 ID:???
バイト数だからな
859nobodyさん:03/02/03 18:29 ID:???
length()で得られるのはバイト数なんだが。
もちろん改行コードとか全部込みで。
860デフォルトの名無しさん:03/02/03 20:18 ID:???
昔罠
861nobodyさん:03/02/03 20:53 ID:D3Jh7Sun
>>856
それどういうソース?
862nobodyさん:03/02/03 22:05 ID:gGc+aOjU
xpにはロック処理いらないんですか?
カウンターみたいの作ってdos窓11個で
ロック処理無しで同時進行しても0にならないんですけど。
863862:03/02/03 22:06 ID:gGc+aOjU
あっ、カウンターは無限ループさせてやってますです。
864nobodyさん:03/02/03 22:08 ID:???
>>862
そら、一プロセスからなら何回ループさせようが呼び出しはシーケンシャルなのだから正常に処理されるだろう。


根本的に理解が足りてない予感。
865nobodyさん:03/02/03 22:11 ID:???
ロックにもいろんな種類あるんよ。
よさげな解説みつけたからペタ
http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
866862:03/02/03 22:58 ID:gGc+aOjU
あれ?DOS窓開きまくって同時実行しても1プロセスなんですか?
win98の時同じ事を試したら
見事に空ファイルができたと思ったのですが。
>>864-865
どうもありがとう。
867nobodyさん:03/02/03 23:04 ID:1c8W3GXA
@file = <FILE>;
$line_num = @file;

以外で行数を取得する方法はありますか?
一行ずつ読み込んでカウンタを回すのもなしで
868nobodyさん:03/02/03 23:10 ID:???
>>867
何が不満なのか聞きたい。
869nobodyさん:03/02/03 23:16 ID:???
でかいファイルを扱いたいから。この方法だとメモリを食うor時間がかかる
870nobodyさん:03/02/03 23:19 ID:???
>>867
while (read(IN, my $buf, 8192)) {
 $lines += ($buf =~ tr/\n//);
}
871nobodyさん:03/02/03 23:30 ID:???
これでええんでないの?メモリ消費も少なめで、簡単だし。

++ $count while (<FILE>);
872nobodyさん:03/02/03 23:32 ID:???
括弧は省略できたみたい。関係ないけど。

++ $count while <STDIN>;
873nobodyさん:03/02/03 23:32 ID:???
>>870
できました。ありがとうございます
874nobodyさん:03/02/03 23:34 ID:???
>>871-872
どうもです。
875nobodyさん:03/02/04 00:00 ID:???
>>860
> 昔罠

昔と今でlength()の何がちがうの?
876 :03/02/04 00:17 ID:rUOqBsxa
100行くらいのマスターデータがあって、ある行だけ上書き(更新)したいん
ですけど、一行づつループかけて、マッチした行以外をTMPファイルへ書き
込み。吐き出したデータを読み込んで、マスターデータに(>)上書き。
更新したい行をマスターデータに追加書き込み(>>)って方法でいいんでしょ
うか?行の順番はどうなってもよいです。
なんか、スマートな方法があったらご指導ください。
877nobodyさん:03/02/04 00:36 ID:???
open(IN, 'master');
open(OUT, '>master.tmp');
while (IN) {
 if () {
  print OUT 新しいもの;
 } else {
  print OUT $_;
 }
}
rename('master.tmp', 'master');
878nobodyさん:03/02/04 00:37 ID:???
>>876
死ねクソマルチ。 
879nobodyさん:03/02/04 00:38 ID:???
>>876
マルチするほどの事じゃないだろ。どうせ見るヤツかぶってるんだし。

100行くらいならメモリに入れておいてもいいんじゃない?
メモリの量が気になるなら読み込みつつ別ファイルに書き込み。
マッチしたらその行だけ変更して最後まで読み書きする。
最後にリネームして終わりだな。

つか今度マルチしたらグーで殴るからね
880nobodyさん:03/02/04 00:39 ID:???
>>875
utf8
881nobodyさん:03/02/04 01:02 ID:Z72oZy+O
printの中で変数を展開したいのですが、どうすればいいのですか?

$i = 1;
print "$i+1";
で'2'と出力したのですが。
882nobodyさん:03/02/04 01:08 ID:eARYiwGA
print $i+1;
883nobodyさん:03/02/04 01:10 ID:???
print "${\( $i + 1 )}";
print "@{[ $i + 1 ]}";
884nobodyさん:03/02/04 01:18 ID:???
>>882-883
サンクス
885nobodyさん:03/02/04 01:55 ID:???
-M の返す値って実際何を表してるんですか?
出力してみても何だかわかんなくて。
886nobodyさん:03/02/04 02:04 ID:CHyA5DeQ
win98にApacheとActivePerlを入れたんですがCGIファイルを実行すると
Forbiddenと出てしまいます。どこの設定がおかしいのでしょうか?
887nobodyさん:03/02/04 02:12 ID:???
>>885
最後にファイルを修正してからの日数じゃないの?
てか -Mだけじゃ分からんだろ(w perl -Mの意味かと思った。

>>886
何を参考に設定したのか知らないけど、もう一度apacheの設定の仕方を見てごらん。
まぁエラーログみれば原因分かるから、それを元に検索するのも勉強。
888nobodyさん:03/02/04 03:42 ID:VBD/sziN
if($a and $b){ 処理 }
は、$aと$bに何か入っていたら処理するで実際OKなのですが、
unless($a and $b){ 処理 }
ですと、両方入ってなかったら処理って風にならく、
どちらか一方でも処理に行ってしまいます。
ifのまるっきり反対じゃないんですね。何か訳があるのでしょうか?
889nobodyさん:03/02/04 03:50 ID:???
>>888
小学校の「べん図」からやり直し
890888:03/02/04 03:53 ID:???
>>889 素早くさんきゅー 不覚だった・・・
891nobodyさん:03/02/04 04:00 ID:???
ド・モルガンて名前を思い出せなくて遅れをとったYO!
892876:03/02/04 09:15 ID:???
すいません。。。
マルチするつもりじゃなかったんですが、書き込みした後、リロード
して確認したら書き込まれていなかったもので、スレまちがえて再書き込みして
しまいました。ご迷惑おかけしました。
いろいろなアドバイスありがとうございました。今日、がんばってみます。
893nobodyさん:03/02/04 09:28 ID:???
>>888
unlessってのは、評価の結果が偽のときに実行するという命令であって、
条件式の評価の仕方が逆になるわけではない。
慣れないうちは、if (! 式) {} を使っておいたほうがいい。
894nobodyさん:03/02/04 12:16 ID:ZSr84PG1
ハッシュに入れた日本語をforeachでeucにしたいのですが期待通りの結果になってくれません。
%TEST = ('A' =>'あ', 'B' => 'い');
foreach $key(keys %TEST){
&jcode'convert(*$key, "euc");
}
このやり方では駄目なのでしょうか?
895nobodyさん:03/02/04 13:08 ID:???
>>894
keyをコンバートしてどないするん。
&jcode'convert(*$TEST{$key}, "euc");
やな。
896nobodyさん:03/02/04 13:19 ID:???
は!
なんとマヌケな…

ありがとうございました!
以後気をつけます。
897nobodyさん:03/02/04 14:28 ID:???
おう、気をつけろよ
898 ◆hMJAPH9PWA :03/02/04 14:31 ID:???
最近妙にネタが多い気がする。
899711:03/02/04 14:42 ID:???
オンライン翻訳についてT電子に問い合わせたら、年50万とか言われた。
なんかもう自分で作りたくなっちゃったよ。PERLでcgi形式で翻訳スクリプト
なんて作ったら、どうなるんだろ。無謀か。
900nobodyさん:03/02/04 16:42 ID:???
>>899
翻訳スクリプト作れるくらいの英語力(?)があったら翻訳スクリプトなんて必要ない。
901nobodyさん:03/02/04 17:02 ID:???
>>899
1.入力フォームを作る
2.入力された文章をhttp://www.infoseek.co.jp/Honyaku?pg=honyaku_t_inout.html&svx=105420&svp=SEEK
にwgetで投げる
3.getしたhtmlから結果だけを抜き出して、整形して表示
902nobodyさん:03/02/04 17:31 ID:???
CGI質問スレに間違えて書き込んでしまったので、以下コピペになりますが。

ファイルを、while (<IN>) {〜}といった記述をしないで、
一行ずつ読み込んでいく方法はないものでしょうか。

@file = <IN> といったメモリにファイル全部読み込む方法は使わず、
一行ずつ読み込んで、一行ごとに違う処理をしていきたいのです。

while の中でループ回数カウントしてifで判定しろ、なんていうのはなしで。

ファイルを一行読み込む場合、
open(IN,"$logfile");
$line = <IN>;
と、やれば出きるのはどこにでも書いてあるのですが、
2度目以降 $line = <IN> としても空でした…。

Perl は一行ごとに分けるデータ構造が身についてしまってるのがダメなのかなぁ…。
seek と read 使えばよさそうなのは解ってはいるのですが、
ベースから書き換えなくてはならず、このままの構造でなんとかできないものかと。
903nobodyさん:03/02/04 17:32 ID:???
>>899
変に訳されるよりはむしろ原文のままのほうがいいな…
904nobodyさん:03/02/04 17:44 ID:???
infoseekのテキスト翻訳ってGETで送るのか。
変なの。
905nobodyさん:03/02/04 17:45 ID:???
>>902
んなこたーない。
これを実行してみればわかる。
#!/usr/bin/perl

use strict;

our $buffer;

$buffer = <DATA>;
print $buffer;
$buffer = <DATA>;
print $buffer;
$buffer = <DATA>;
print $buffer;

__DATA__
foo
bar
baz
906902:03/02/04 18:00 ID:???
ほんとだ、できてますね;
どこか初歩的なミスしてそうなので探してみます。
どうもでした。
907894:03/02/04 18:35 ID:???
>>895さんが教えてくれた通りにやったのですがまたエラーになってしまいました。
これは他の部分がやばいのでしょうか?
908nobodyさん:03/02/04 18:49 ID:???
>>907
エラーの内容を書けってば。
909nobodyさん:03/02/04 20:00 ID:ifLjuw1e
gzip展開したいんですど、

open F,"/bin/gzip -d temp.txt.gz |";

できません。
どうすれば良いでしょうか。
910909:03/02/04 20:12 ID:???
あースマソ、できてたわ。
出力先間違ってた。
失礼しました〜
911nobodyさん:03/02/04 20:54 ID:???
>>902
>ファイルを、while (<IN>) {〜}といった記述をしないで、
>一行ずつ読み込んでいく方法はないものでしょうか。

意味不明
while (<IN>) は while($_ = <IN>)と同じ
要するに一行ずつ読み込んでいる。

>Perl は一行ごとに分けるデータ構造が身についてしまってるのがダメなのかなぁ…。
身についてないと思うよ。
912711:03/02/04 21:43 ID:???
>>900
>翻訳スクリプト作れるくらいの英語力(?)があったら翻訳スクリプトなんて必要ない。

英語に関しては、私自身は翻訳の必要などありません。掲示板に組み込んで
多言語翻訳掲示板を作れないか、ということです。

>>901
infoseek翻訳はそういう形で利用しても大丈夫なのでしょうか?

完全にフリーのものは、殆ど日本語翻訳まではまだサポートしていないし。
http://linguaphile.sourceforge.net/
913nobodyさん:03/02/04 21:48 ID:???
>>912
恐ろしく電波な掲示板になること請け合いだな。
914nobodyさん:03/02/04 22:17 ID:???
>>912
infoseekはネタでしょ。では、数ヶ月ならバレナイト思われ。
915711:03/02/04 22:37 ID:???
捕らぬ狸のじゃないですけど、翻訳掲示板が変に繁盛し出したら
いずれはバレてしまうんでしょうね。

上のLingaphileのように、フリーの翻訳ソフトは色々
開発されてはいるようですが。
GPLTrans http://www.translator.cx/
(こっちはCとPHP?)
916894:03/02/05 07:12 ID:???
>>908
エラーの内容といいますと?
インターネットサーバーエラーって画面以外にもエラーってあるんですか?

一応&jcode'convert(*{$TEST{$key}}, "euc");
こんな感じにしたらエラーはでなくなりました。
しかしeucにコンバートされてないみたいです。
普通にスカラーを作って日本語を入れて検索した場合は成功しますし、
上記のハッシュに英語をいれてもちゃんとなります。

原因のわかる方がいましたらお願いします。
917nobodyさん:03/02/05 10:39 ID:???
>インターネットサーバーエラーって画面以外にもエラーってあるんですか?

自分のPCにPERLをインストールして、それを使ってテストする。
そうすればもっと詳しいエラーメッセージが見れる。
918nobodyさん:03/02/05 10:44 ID:???
つぅかリモートサーバでCGIのテストしてんじゃねぇよボケと。
919nobodyさん:03/02/05 11:36 ID:???
>>916
Internalすら読めないのに、よくPerlのコードを書けるねえ。
意外とエラーの実体はタイプミスだったりしてな。
とりあえずレンタル鯖でのCGIテストは今すぐやめろ。
920nobodyさん:03/02/05 11:47 ID:???
初心者未満のプログラマはエラーメッセージに意味があることを知らない。
よって、彼には500 Internal Server Eroorで十分だったわけだ。要はエラーが起こったという事実が大切なのだから。



実行したらエラーが出ました。助けてください。


と言う質問がいかに多いか。
921nobodyさん:03/02/05 12:38 ID:???
突っ込んでいい?

Eroor
922nobodyさん:03/02/05 12:53 ID:???
(゚д゚)エロォア!!
923nobodyさん:03/02/05 13:28 ID:???
(゚д゚)エルゥア!!
924894:03/02/05 14:37 ID:???
internalでしたか。すいません。

レンタル鯖でのテストはしてませんが?
activeprelとapacheを入れてIEのアドレスにPCのアドレスを入れてやってます。
925nobodyさん:03/02/05 14:44 ID:???
activeperlにapacheと入れておいて、何故エラーを500しか認識できてないのか…
百年早い。せめてperlのデバッグ方を学んで出直してこいや。
ttp://www.harukaze.net/~mishima/perl/index.html
ttp://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html
この辺りな。
926895:03/02/05 14:53 ID:???
他の連中に怒られそうだがまぁ…
use strict;
require 'jcode.pl';

my %TEST = ('A' =>'あ', 'B' => 'い');
my $key;
foreach $key(keys %TEST){
jcode'convert(\$TEST{$key}, "euc");
}

これで動くだろ。
927894:03/02/05 16:22 ID:???
ありがとうございます。
895さん、925さん、その他の方にも迷惑をおかけしました。
もう少し基礎を覚え直します
928nobodyさん:03/02/05 16:52 ID:???
>百年早い。
100年前にperlはない罠
929nobodyさん:03/02/05 19:58 ID:???
> 100年前にperlはない罠
100年後にもPerlはない罠
930nobodyさん:03/02/05 22:39 ID:???
>>926
少し直してみました。

use strict;
require 'jcode.pl';

my %TEST = ('A' => 'あ', 'B' => 'い');
foreach my $key (keys %TEST){
 jcode::convert(\$TEST{$key}, 'euc');
}

#メモリを節約:
while (my ($key, undef) = each %TEST) {
 jcode::convert(\$TEST{$key}, 'euc');
}

#他のやりかた
foreach my $value (@TEST{keys %TEST}) {
 jcode::convert(\$value, 'euc');
}
931nobodyさん:03/02/05 23:03 ID:???
keyを使わないならvaluesで取り出せば良いのでは。
とか、テストコードに言うのは野暮か。
932nobodyさん:03/02/06 00:06 ID:???
メモリを節約するには、どういったことに
気をつければ良いのでしょうか。
933nobodyさん:03/02/06 00:07 ID:???
>>932
無駄にリストとかハッシュを多用しない。
リファレンスが使えるところはなるべくリファレンスを使う。

934nobodyさん:03/02/06 00:22 ID:???
数列から先頭の文字だけ削除する
スマートな方法はないでしょうか?

$last = @DATA;
@DATA = @DATA[1..$last]
935nobodyさん:03/02/06 00:31 ID:???
@DATAのリストから先頭要素を削除したいなら
shift @DATA;
936934:03/02/06 00:34 ID:???
>>935
ありがとうございます。(_ _ )
937nobodyさん:03/02/06 01:02 ID:???
>>931
3つ目で、valuesを使わない理由は、valuesで出てきたリストに対する
変更は、%TESTに反映されないから、です。

ってそういう意味じゃないか。
938nobodyさん:03/02/06 01:03 ID:???
>>934
@DATA = @DATA[1..$#DATA];
の間違いだね。
939934:03/02/06 01:46 ID:???
>@DATA = @DATA[1..$#DATA];

$#DATAで、配列の最後の番号ということでしょうか?
これは応用が利きそうですね。
940nobodyさん:03/02/06 03:40 ID:???
.
.
.
200212.txt
200301.txt
200302.txt
こういう年月の名前のファイルを作り出すプログラムで、そのテキストの中の数字を全部足していきたいので
open(IN,"200301.txt");
open(IN,"200302.txt");
こんな感じで一個一個開いて足しているのですが、
指定した月から現在の月までのファイルを開くような方法があれば教えてください
941nobodyさん:03/02/06 05:09 ID:???
>>940
readdirでファイルリストを取得して
foreach等で回しつつ、
substrや正規表現で数字を切り出して、
if($xxx >= 200212)
などという条件つけてやれば?

または、予め何月以上というリストを作ってやって、
回しつつif (-e "$_.txt")で処理するか。
942nobodyさん:03/02/06 06:20 ID:???
>>940
さらにこれからはもう一つ、
年月と数値だけ羅列したインデックスファイルを作っておくと便利だと思うよ。
 ・
 ・
200302<>5648
200303<>4421
943nobodyさん:03/02/06 12:30 ID:???
>>942
そういうのはインデックスとは言わない
944nobodyさん:03/02/06 15:07 ID:???
>>940
そのファイル名が「4桁年2桁月」になっているのであれば、、、
$start = "200201";
$end = "200301";

foreach ($start .. $end) {
open(IN,"$_.txt");
何らかの処理
}

でよいのでは?
945nobodyさん:03/02/06 15:29 ID:???
>>944
阿保ッッ!
946nobodyさん:03/02/06 17:12 ID:???
200213.txtが開けません。
947942:03/02/06 17:30 ID:???
>>943
あい。そうでした。。。
948nobodyさん:03/02/06 19:23 ID:???
時間によって何か処理をしたい場合、
例えば任意日任意時の10〜20分の間に何か処理をするとして
($minは分)
if($min >= 10 and $min <= 19){⊂}

if($min =~ /1[\d]/){⊂}
とやるのはどっちが高速&負荷軽めですか?
つーかもっといい方法ありますでしょうか?
949nobodyさん:03/02/06 19:49 ID:???
>>948
Benchmark;
じゃダメ?
950nobodyさん:03/02/06 19:52 ID:???
文字切れちゃったけど
Benchmark.pm
use Benchmarkね。
951nobodyさん:03/02/06 19:55 ID:???
>>940
my ($start, $end) = (200201, 200312);

my $cnt = $start;
while($cnt <= $end){

print $cnt, ".txt\n"; # なにかしら処理

my ($year, $month) = $cnt =~ /(\d\d\d\d)(\d\d)/;

$month++;
if ($month > 12){
$month = '01';
$year++;
}

$cnt = $year. $month;
}
単純に書いてみました。
952別スレの優雅な948:03/02/06 20:02 ID:???
>>948
処理の重さだけなら後者が約2.2倍重いです。
前者を200万回処理するのにかかった時間0.69秒
後者を200万回処理するのにかかった時間1.51秒
実験は当方ローカル環境(CPU2.5GHz)

定期的に処理をしたいのであれば、UNIXコマンドのcronがありますが、
借りているサーバがshellを許可しているか、コントロールパネルにより
提供している必要がります。
953郵政の歴史年表 :03/02/06 21:24 ID:iDPmTn07
perlを使って、
http://www.iptp.go.jp/museum/yusei/tsushin/nenpyou.html
にある1860年代から1990年代までの中から、
「郵便貯金の歴史」だけをgrep見たいに抜き出すこと出来ますか?

954nobodyさん:03/02/06 21:29 ID:???
>>953
できるよ。

まず、そのサイトのデータを全部ダウンロードしてローカルに置きましょう。
(以下略)
955nobodyさん:03/02/06 21:30 ID:???
ローカルに置いてからperlを使ってsystem("/bin/grep")てな感じ。














そうじゃないだろ・・・・
956(=`ェ´=) ◆9rperl5mn2 :03/02/06 21:31 ID:???
>>953 作ればできるよん。
957nobodyさん:03/02/06 21:47 ID:???
<tr>
<td valign=top nowrap><b>([^<]*)</b></td>
<td>

<tr>
<td valign=top><font color=(?:ff9cff|9cff31|0031ff)>●</font></td>
<td>([^<]*)</td>
</tr>
958nobodyさん:03/02/06 21:53 ID:???
>>948
はっきりいってそんなのperlの起動コストやI/Oコストに比べればゴミみたいなもん
分かりやすい方選んどき
959nobodyさん:03/02/07 03:13 ID:Md2X1ufV
POSTで受け取ったファイルの、
アップロードする前のオリジナルネームは
どこを参照すればわかるのでしょうか?
 環境変数 Perl 一覧
などとググっても見つけられませんでした。
よろしくご教示ください。
960nobodyさん:03/02/07 03:32 ID:???
multipartでPOSTした場合はContent-dispositionヘッダ。
http://www.yo.rim.or.jp/~getsu/document/rfc1867j.txt

こういう意味じゃない?
961nobodyさん:03/02/07 03:55 ID:???
>>960
なるほど。格納されている場所がわかりました。
実際の取得方法(スカラー変数への代入)を調べてみます。
ありがとうございました。
962nobodyさん:03/02/07 16:46 ID:04vl2wLA
指定したディレクトリにあるファイルのファイル名を
全て配列に代入するにはどうすればいいんでしょうか?

例えば、cgi本体と同じ階層にある「log」というディレクトリに
0.dat,1.dat,2.datがある時に、
最終的に@dataに0.dat,1.dat,2.datが代入されている
という風にするにはどうするのでしょうか?
963nobodyさん:03/02/07 16:54 ID:???
opendir
964nobodyさん:03/02/07 16:54 ID:???
965名無しさん@Meadow:03/02/07 17:01 ID:???
>>962
サブディレクトリもでしょ。.とか..とかのディレクトリは
入れないんでしょ。これでいいと思うよ。

#!/usr/local/bin/perl

# コマンドラインで指定したディレクトリの中にあるすべてのファイルを配列に入れる
$usage = 'perl files-in-dir.pl 絶対パス';
$starting_dir = shift;
die $usage if $starting_dir eq "";

sub search {
my($dir, $depth) = @_;
my $handle = "DIR$depth";
opendir($handle, $dir) or die $!;
while($file = readdir($handle)) {
next if $file =~ /^\.{1,2}$/;
if (-d "$dir/$file") {
&search("$dir/$file", $depth + 1);
} else {
push(@files, $file);
}
}
closedir($handle);
}

search("$starting_dir", 1);

for(@files) {
print;
}
966962:03/02/07 17:40 ID:???
解決しました。皆さんありがとうございました。
967nobodyさん:03/02/07 21:04 ID:???
モジュール使えよ
968nobodyさん:03/02/07 21:06 ID:???
>>967
はいはい。
969nobodyさん:03/02/08 00:03 ID:???
Perl初心者さんへ、世の中PHPに移行する中、
なんでPerlを覚えてるの?
借りてるサーバがPerlしか使えないとかかな?
マジレスきぼん。
970マジレス:03/02/08 00:06 ID:???
どんな世の中だっつの。おまえの頭の中のか?
971nobodyさん:03/02/08 00:23 ID:???
>>970
初心者さん マジレスありがとう。  
972nobodyさん:03/02/08 00:24 ID:???
>969
( ´,_ゝ`) プッ
973しょしんしゃ:03/02/08 00:26 ID:qxZih98+
ファイル処理プロセスが面倒
日本語処理が面倒
ソケット通信が未熟
974nobodyさん:03/02/08 00:43 ID:???
社員番号 社員名 身長   体重
$no     $name $heught $weight

とする場合、身長の降順、同じ場合は体重の昇順に
体重まで同じ場合は、さらに社員番号の昇順に
社員番号、社員名、身長、体重をprintしたい場合は
どうしたらよいでしょうか?(複数キー)
975940:03/02/08 01:27 ID:???
ありがとうございました
976nobodyさん:03/02/08 02:04 ID:???
>>974
まずは色々とやってみる。
それでだめならぐぐる。

それくらいのことをしないと初心者とは認定されませぬぞ。
977974:03/02/08 02:37 ID:???
>>976
失礼しました。一応自分で書いてみてテストした結果、
下記のやり方で問題なかったのですが文法的におかしい
ところ、他に綺麗なやり方がありましたらご教授下さい。
(とくに下記の場合3つのキーとしているのに「keys %hei」
だけでもよろしいのでしょうか?)

open(FILE);
while (<FILE>) {
($no,$name,$height,$weight) = split(/<>/);
$nam{$no} = $name;
$hei{$no} = $height;
$wei{$no} = $weight;
}
close(FILE);

foreach $no (sort { ($hei{$b} <=> $hei{$a}) || $wei{$a} cmp $wei{$b} || $no{$a} cmp $no{$b} } keys %hei) {
print "$no $nam{$no} $hei{$no} $wei{$no}<BR>";
}
978本7 ◆JMmE5ppk7Y :03/02/08 03:24 ID:???
掲示板の名前表示にトリップ機能を追加しようとおもいます。
トリップ変換のアルゴリズムはその辺のトリップチェッカーを拾ったんで途中に割り込ませようとおもいます。
で、すでにできあがってる2chスクリプトなのですこし強引ですが名前をdatファイルに保存する際に

投稿の際に名前入力してそれをdatファイルに保存してるのがread.cgiだと決めつけて考えてます。
空の変数$karinameを用意してそこに正規の名前変数$nameを代入して料理しよかと思いました。

まず最初に良く分らないのが文字列変数$nameに"#"が入ってる時だけ"#"以降の文字列抜き出しをするに
はどいう形の分がいいんでしょうか?

さらに抜き出せたとしてそれを変換ルーチンで料理。もう一つ用意した$ryouriに代入

$name=$ryouri で元にかえしてやってその後は通常の流れに続くという方法でよいでしょうか?

雑な質問のしかたで申し訳ないです。よろしくお願いします


979nobodyさん:03/02/08 04:03 ID:???
>>977
こんなデータを作ってみました。
33<>c<>169<>120
22<>b<>169<>68
1<>a<>169<>68
正しくはa,b,cさんの順ですよね?

>>978
正規表現でマッチング。
980 :03/02/08 04:12 ID:???
>>978
こんな感じ?

$name =~ s/?#(.+)/&trip($1)/eg;
sub trip {
my ($conv) = @_;
my $conv = substr(crypt($conv, $salt), -8);
($conv);
}
981同一人物?:03/02/08 04:22 ID:???
264 :本7 ◆HON7/awDa. [sage]:03/02/07 20:34
この早さでは言いにくいが













旧2ch式BBS立てたけど誰も来ない
982nobodyさん:03/02/08 08:23 ID:???
>>977
> open(FILE);
本当に問題ないの?

--- test.dat ---
ABC-001<>foo<>165<>65
ABC-002<>bar<>170<>70
ABC-003<>baz<>170<>65
ABC-004<>boo<>170<>65
---

my $file = './test.dat';
open FILE, '<' . $file or die;
my(@item, @person) = qw(i n h w);
chomp, @{$person[$. - 1]}{@item} = split /<>/ while <FILE>;
close FILE;

print map "@{$_}{@item}<BR>\n",
sort {
$b->{'h'} <=> $a->{'h'} ||
$a->{'w'} <=> $b->{'w'} ||
$a->{'i'} cmp $b->{'i'}
} @person;

参考。
http://www.google.co.jp/search?q=Schwartzian+Transform&hl=ja&lr=lang_ja
983nobodyさん :03/02/08 14:06 ID:???
>>982
どうだ、凄いだろ、俺のチンチン!っていう回答
熟女は喜ぶが処女は痛がる
984nobodyさん:03/02/08 16:30 ID:???
>>982
Perlらしいコードですな。
985本7 ◆HON7/awDa. :03/02/08 19:05 ID:???
>>980
アドバイスありがとうございます
抜き取った文字列はどこに代入されるのでしょうか?
どしろうとで申し訳ないです
986nobodyさん:03/02/08 23:03 ID:???
>>985
勝手に置換されるように書いてあるぞう。わからなくてもとりあえず読んでみよう。
987 :03/02/08 23:04 ID:???
backslashが文字化けた。
$name =~ s/¥#(.+)/&trip($1)/eg;
#の後の(.+)がトリップ用数字に相当。
(.+)が$1に入って、
これにsub tripで処理したものを、
元のやつと置換する。
$name = "私の名前 #123456";

$name = "私の名前 aKsdjA4w";
みたくなる。
988nobodyさん:03/02/08 23:15 ID:r91Y0UUN
open F,"+<$file";
while(<F>){print;}
seek F,0,0;
print F $temp;
close F;

としたとき、$tempのサイズが元のファイルサイズより小さいと、
$fileの元のデータが後半残ったまま上書きされてしまいました。
これはやはり上書きモードで開き直さなければ駄目でしょうか。
989nobodyさん:03/02/08 23:23 ID:???
>>988
わかんないけど、seek後truncateしてみたら?
990nobodyさん:03/02/08 23:28 ID:???
>>989
うお、できました!サンクスです。
991本7 ◆HON7/awDa. :03/02/08 23:30 ID:???
>>986
なれこれいじいったらトリップ入ってないときはそのままで出力できるようになりました。
あとは◆を名前欄に入れたら◇になるよう改造してみます
992nobodyさん:03/02/08 23:43 ID:???
例えば、
http://www.yahoo.co.jp/
のソースを $st バイトから $to バイトまでのみ
ネットワーク通信によって取得するにはどうすればいいですか?

LWPとかSocketとか頑張って調べましたがわかりません
よろしくお願いします。
993nobodyさん:03/02/08 23:45 ID:???
>>992
もうちょっとSocketとHTTPの勉強すればいいよ。
994nobodyさん:03/02/08 23:54 ID:???
perlのmyって変数を続けて書くと最初のやつ以外はmy変数じゃなくなってしまうんですか?

例:
my  $i;    # ←はmy変数
my  $i,$j,$k; # ←は$iだけがmy変数(残りはglobal?)
my  ($i,$j,$k);# ←は全てmy変数

↑このような認識でいいのですか?
995nobodyさん:03/02/08 23:58 ID:???
myは関数じゃないからそうなるんだよーん。
996nobodyさん:03/02/09 00:00 ID:???
>>995
997nobodyさん:03/02/09 00:10 ID:???
>>995
myは関数です。
ついでにいえばreturnも関数です。
998nobodyさん:03/02/09 00:15 ID:???
このスレは終わらんのか?
999nobodyさん:03/02/09 00:17 ID:zusUFu+4
次スレあるの?
1000nobodyさん:03/02/09 00:17 ID:zusUFu+4
ついでに1000

あ、誰も>>>999に答えられなくなっちゃうや。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。