【Perl】初心者コーナー Part19
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
03/01/11 13:52ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
あとは>>2-10にまかせた。
0002nobodyさん
03/01/11 13:54ID:???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/
0003nobodyさん
03/01/11 13:54ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/test/read.cgi/php/1028816385/
Part16 http://pc.2ch.net/test/read.cgi/php/1032070299/
part17 http://pc.2ch.net/test/read.cgi/php/1034583844/
part18 http://pc.2ch.net/test/read.cgi/php/1037797479/
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
00042,3
03/01/11 13:55ID:???0006nobodyさん
03/01/11 14:01ID:???O2
0007nobodyさん
03/01/11 14:01ID:NBoN4jVXフォームで
<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行で書けないもんでしょーか?
0009前スレ993
03/01/11 14:05ID:???そうですね。
正確に測ったわけではないですが、異常なほど数値が片寄ります。
例えば、1-100までの整数が出るようにした場合、数回連続で同じ数字を取得したり、
同じような条件下では絶対に出ないような数字もあります。
>>前995さんが言っていたようなOSから取得するとかではなくて、
多少処理や記述が複雑になっても良いから、独自にランダム性の高い処理を作っている人はいないのでしょうか?
例えば、初期値の法則に「時間」を組込んでしまうと、
CGIの1アクセスで100の数値を取得した場合、ランダム性のカケラも見えず、
同じ数字がわんさか出ます。
0010nobodyさん
03/01/11 14:08ID:2PtCQo+xその処理は普通、grepを使って、こうする。。けど回答になってないな。。
if ( grep { $_ eq $q->param('id') } @list ) {
00119
03/01/11 14:15ID:???【perl】
ランダムから求められる数値が片寄ってるような気がしてなりません。
ランダムを取得する時、必ず直前に以下のような記述を置いているのですが、
正確な意味も分かりません。
(昔、どこかで見たのを写したのだと思います)
srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
質問1
上記はどんな初期値(?)を作成してるのでしょうか?
質問2
とても効率が良く、数値が片寄る事を感じさせない記述を教えて下さい。
皆様はランダム前にどんな記述をおくのでしょうか?
イロイロ教えて下さい。
また頭が弱いため、見ても理解出来ないと思うので、どのように求めているのかも簡潔に教えてくれると嬉しいです。
0012nobodyさん
03/01/11 14:17ID:???それってさ、srandを複数回行なってない?
srandは1回行なえばそれでいいんだが。
ソース出して。
0013nobodyさん
03/01/11 14:21ID:???悪い例:
foreach(0 .. 100){
srand(time);
print rand(100);
}
正しい例:
srand(time);
foreach(0 .. 100){
print rand(100);
}
srandは「乱数のスタート位置を決める」もの。
randは「スタート位置から決められた順番をなぞる」もの。
srandを何回もやれば、スタート位置が毎回戻るから、同じ結果にしかならんぞ。
00149
03/01/11 14:23ID:???えと、実はランダム取得前に何度も置く事が多いです。
srandしてからrandみたいな。
しないほうが良いのでしょうか?
また、しない事もありますが、それでもやっぱり片寄ってきます。
例えば、RPGを作っていて、ランダムにストーリーが分かれるのですが、
プレイヤーの話を聞いてみるとみんな似通った結果になる事が多く、綺麗に分かれていません。
その「ランダムによって分ける」と言う作業自体は非常に単純な処理にしてあるので、
おそらく自分ではあくしていると思います。
で、どんな角度から考えてもやはり原因は「ランダム」が「ランダムじゃない」と言う事にあるようです。
0016nobodyさん
03/01/11 14:30ID:2PtCQo+xsrand、randで、1方向ハッシュみたいに使うのも禁止。
それは他に移行してもそのまま動くのか?と。
0017nobodyさん
03/01/11 14:32ID:P/LXfaGE0018nobodyさん
03/01/11 14:34ID:2PtCQo+x001916=18
03/01/11 14:36ID:???0020えせカミ
03/01/11 14:38ID:???if(join(',',@list) =~ /$q->param('id')/){
↓
if(join(',',@list) =~ /${\$q->param('id')}/){
でもこの書き方が好きかい?綺麗かい?
0021nobodyさん
03/01/11 15:12ID:???srandは2回以上やっちゃいけない。
「同じ乱数を複数回使いたい」とか特殊な状況でもない限り。
どうしても2回以上srandをするなら、種も変えるべき。
基本的にはスクリプトの頭で1回だけsrandすればいい。
Perl5以降なら、それすらも必要ない。
00229
03/01/11 15:13ID:???品質の良い種を皆様から多数頂けないでしょうか?
種の内容も簡単に説明してくれると嬉しいです。
0023nobodyさん
03/01/11 15:14ID:???品質のいい種は前スレで出てたあれ。
理由は今のあんたに説明してもわからんだろ。
ちゃんと覚えたいなら駱駝本(プログラミングPerl)買え。
00249
03/01/11 15:18ID:???srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
今の一番の問題は時間です。
同じ時間だから似たような結果になる、と言うのを避けたいです。
同じ条件下で1000回以上「1-100」の整数を求めた時、
「連続して同じ数字が出ない」
と
「平均的に全て出てくる」
と言う条件を満たしたのがグットです。
0026nobodyさん
03/01/11 15:22ID:???> 「連続して同じ数字が出ない」
どんな乱数でもこの条件は満たせないと思うんだがな。
任意の二数を取り出して同じ数字な確率ってほんの1/10000でないかね?
0028nobodyさん
03/01/11 15:27ID:???あ、1/100だわ。スマン…寝ぼけてたようだ。
矛盾はしてない気がする。千なり一万なり生成して連続して同じ数字が出ない
様な乱数系列ってほとんどあり得ないと思うんだが。
00299
03/01/11 15:32ID:???ええと、
srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
の記述では、例えばCGIでPERLを使い、1アクセスで1つの数字を求めたとします。
ですが、連打して求めてしまうと同じ数字が返って来る事が非常に多いのです。
当たり前と言えば当たり前なんですが、これをなんとかしたいです。
003026
03/01/11 15:37ID:???種ねぇ…その記述よりいいのなんておもいつかんわ。
00329
03/01/11 15:52ID:???アイディアありがとう御座います。
でも、多くの人に連打される状況下にあるのでちょっと難しいかも…
で、ちょっと考えてみました。
最後のワガママです。
------------------
srand(ここを適当に考えてほしいです);
$aaa = rand;
srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
↑この中に$aaaを追加したいのですが、記述の意味が俺にはイマイチ理解出来ないので考えてほしいです。
------------------
以上。
すごくワガママですが、お願いします。
00339
03/01/11 16:27ID:???>>28
>>同じ条件下で1000回以上「1-100」の整数を求めた時、
>>「連続して同じ数字が出ない」
↓
>矛盾はしてない気がする。千なり一万なり生成して連続して同じ数字が出ない
>様な乱数系列ってほとんどあり得ないと思うんだが。
そうですね。
例えば、1回で1/100になるのだから、
1000回やると
(1/100)×(1000)
って事になります。
結果的に、1000回ループした場合、同じ数字が連続して出るのは「10回前後」と言うのが
もっとも効率が良いランダムって事になります。
そして、それが全然満たされていないのが現状です。
これを言いたかったのです。
0034nobodyさん
03/01/11 16:35ID:???それが意味ないってまだわからないか?
最初のsrandが変わらなければ、$aaaも同じ数字にしかならない。
記述の意味が理解できないってなら、自分で検索するなり何なりで調べろ。
駱駝本買うって言ったなら買って読め。
いい加減しつこい。
0035nobodyさん
03/01/11 16:37ID:???次に実行される時点で時間とプロセスIDがそれぞれ1ずつ増加することになるケースが考えられます。
このようなケースでは、結果 x^y == (X+1)^(Y+1) ということになり、1/3 のかくりつで同じ数が発生することになります。
引用:CGI&Perlポケットリファレンス P.223 TIPSより
(藤田郁、三島俊司著 技術評論社 発行 ISBN-4-7741-0755-7 C3055)
要因はこれのようですね。
0036nobodyさん
03/01/11 16:42ID:???っていうのはどうだろう?
if ($$%10 == 0) { srand( time + $$); }
if ($$%10 == 1) { srand( sin(time + $$)); }
if ($$%10 == 2) { srand( cos(time ^ $$)); }
みたいな。
0037nobodyさん
03/01/11 16:45ID:???いいえ?
少なくともダブルクリック時には変わりますよ?
それと、統計を取ったわけじゃわりませんが、
同じsrandを繰り返しても必ず同じ結果になるわけではありません。
>>32のは分岐点を増やす意義があります。
あと、実際の記述を1つも書いていないのにしつこいとははちょっと…。
答えたくないのなら無視していればどうかと…。
>>35
そうです。
俺のもだいたい1/3くらいでした。
そこで提案したのが>>32なのですが、実際の記述方法が分からないため、
2ちゃんねらーの方々の知恵を借りようと思ってやってきました。
00389
03/01/11 16:49ID:???>>36
$$とはなんでしょうか?
すみません頭弱くて。
連打アクセスでもランダム性が保持出来るのなら、ありがたくちょうだいいたします。
0039nobodyさん
03/01/11 16:53ID:???>>37の突っ込みで思わず笑ってしまった。
>>34記述が書けないならレスするな。
1回も答えてないのにしつこいって…。久々にワラタよ。
0040nobodyさん
03/01/11 16:54ID:???「$$」は、特殊変数です。
んーPerl関連の書籍とかには載っているかと思うけれど(苦笑)
いわゆる、PID、自身のスクリプトがPerlで実行されたときに付与される起動プロセス番号です。(UNIX系のみ?)
0041nobodyさん
03/01/11 16:54ID:???統計を取らない。
実際の記述を出さない。
だから嫌われるのがわからんのか?
1万行あるってなら、txtにしてアプしろよ。
そもそもお前は聞いてばかりで自分で調べようとしてないじゃないか。
まずはsrandやrandが具体的にどういう効果を持っているかも未だに理解してないんだろ?
これだけやりとりして、その間、お前は聞くばかりで自分で調べようとしていない。
1から10までここで聞く気か?
>同じsrandを繰り返しても必ず同じ結果になるわけではありません。
同じ定数なら確実に同じ数値が返る。
お前が言ってるのは、時間などの変化のある数字を使っているから、
srandに渡される数値が変わって、結果的に異なる初期化方法になってるだけ。
つまり、最初のsrandで確実に異なる数値を渡せるなら、その後に$aaaを
使ってsrandしなおす必要はないだろ?
最初のsrandが同じになる → $aaaも同じになる → 2度目のsrandも同じ結果になる
最初のsrandが異なる結果になる → 2度目のsrandをする必要がない
これくらい消防でもわかるわ。
今まで答えて損した気分だ。
宿題は自分で考えな。
0042前スレ998=12=13=21=23=34=41
03/01/11 17:00ID:???結構レスしてると思うんだけどね?
00439
03/01/11 17:05ID:???いえ、別に答えてないとまでは…
>最初のsrandが同じになる → $aaaも同じになる → 2度目のsrandも同じ結果になる
ええと、
連打アクセスでも最初のsrandは同じになるのでしょうか?
分かりました。
srandを調べてみます。
>>40
ありがとうございます。
その方法を一度テストしてみますm(__)m
0045yani ◆saNSktNEdQ
03/01/11 17:14ID:umfOb+ixtime ^ $$ ^ unpack "%L*", `ps axww | gzip`
は何回やっても重複しなかったな。
(毎秒20回以上になると、俺のボロマシンでは重くて「同時」にならない)
ただ、ps とか gzip 起動しているからその分、ちょっとプロセス数を増やして行くと
、Resource temporary unavailableがすぐに出る。
そのときに件の式がどういう挙動しているかはよく分からない。
Perl5自身に任したほうが良いような気がするな。
0046nobodyさん
03/01/11 17:23ID:???言い方悪かったな。
要するにお前は、同じ乱数が出るから困ってるんだろ?
その原因はsrandであると。
同じ順番で乱数が出てる時は、srandが同一である可能性が高いんだよ。
>35さんの言うやり方なら、1/3で同じってことか。
お前さんがやりたいのは、その「1/3の確率で同じになった時に、
別の乱数になるようにしたい」って事じゃないのか?
つまり、その時点ですでにsrandは同じわけだよな。
だとしたら、$aaaに出てくる数字も同じ、その後のsrandも同じになるわけ。
わかる?
連打アクセスの場合はプロセスIDが異なるから同じにならない事がある。
ただ、それでも同じになる場合があるから困ってるんでしょ?
本気で覚えたいなら、srandとrandの事を自分できちんと覚えるしかないのさ。
検索なりなんなりでそういう説明ページ探したか?
そういう努力をしようという姿勢が見えないって事。
こっちだってsrandやrandの説明からまでは付き合えんって事さ。
そこまで回答者に説明させる気?
それくらい自分で調べてから聞いてくれと。
最後に俺の駱駝本に載ってたやり方を参考までに載せとく。
srand(time ^ ($$ + ($$<<15)));
場合によるが、Webサーバー上のCGIであり、同一人物の同時アクセスを想定しないなら、
IPアドレスなりUSER_AGENTなりを式に組み込む手もある。
0047nobodyさん
03/01/11 17:27ID:???ってどうやってやるんですか?
F5連打じゃないっすよね?telnet?専用クライアントでもあるんでしょうか?
0048yani ◆saNSktNEdQ
03/01/11 17:31ID:85OU0JtJ子プロセス20個起動して、ある時刻に一斉に件の式をprint
0049nobodyさん
03/01/11 18:02ID:???>子プロセス20個起動
がすでにわからん。これはどういうところ勉強すればいいんでしょう?
0050nobodyさん
03/01/11 18:33ID:???ttp://www.google.com/search?as_q=perl+%E5%AD%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9+%E8%B5%B7%E5%8B%95&num=100&hl=ja&ie=UTF-8&oe=UTF-8&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja&as_ft=i&as_qdr=all&as_occt=any&as_dt=i
こうやって検索すると
tp://mind.f.fiw-web.net/program/perl/tips0301.html
こんなページが見つかる。
0051nobodyさん
03/01/11 19:47ID:???っていうか掲示板なんだから、自分以外にも利益がある(可能性がある)
ことを書けや。。出来ないなら出て行け。
はっきり言わせてもらうと、おまえより賢いやつはこの板には沢山いる。
自分の間違いに気づけ。そして、勘違い発言を増殖させるな。
0052nobodyさん
03/01/11 20:48ID:L83LO6Ji例えば、"<B>hoge</B><B>fuge</B>"
っていうので、hogeってとこだけをまず取りたいのですが、何も考えないで書くと
hoge</B><B>fugeが取れてしまって困っています。何か上手い書き方があったら教えて
下さい。
意味不明だったらすみません。
0053nobodyさん
03/01/11 20:52ID:???正規表現に最小のマッチングというのがある。
調べてみ。
それよりも"<B>hoge<B>hage</B>hige</B>"という文字列だったらどういう処理にするつもり?
それによってかなりやり方が変わるから。
0054nobodyさん
03/01/11 20:59ID:???ありがとうございます!
調べた結果、?を一文字つけるだけで解決できました。
入れ子構造になってるのは・・難しそうだから考えないようにしようかなと思ってます・・。
005554
03/01/11 21:02ID:???hoge<B>hage</B>higeが取れれば、やれることが広がるので、
上手く書く書き方がありましたら教えて頂けると嬉しいです。
0056nobodyさん
03/01/11 21:12ID:???タグでネストは無いと思いますが…。
# 閉じ忘れはあるかもしれないですが。
00599
03/01/11 21:54ID:???イロイロ調べた後に実験しました。
$$は、別に混雑してようとしてまいと関係なく、連打なら「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`);
#最後にこれを置いて完成。
---------------------
まだこれのテストはしてませんが、取り敢えず完成したので報告しに来ました。
また、問題な点があれば教えて下さい。
0060nobodyさん
03/01/11 21:56ID:???それはまた難しいぞ。
"<B>hoge<B>hage</B>hige</B>fuge</B>"の時はどうするかとか。
"hoge<B>hage</B>hige"でいいのか、"hoge<B>hage</B>hige</B>fuge"まで取るべきか。
>56
プログラマーはユーザーがどんな意表をついた入力をしても大丈夫なようにシステムを考えないといけない。
そういうところで気を抜くとセキュリティホールができたりしちゃうからね。
0061nobodyさん
03/01/11 22:05ID:???みんなが、まともなブラウザ、まともな思考回路を持っているとは限らない。
あと、一番忘れやすいのは、$ENV{HTTP_*}は汚染されているということ。
$ENV{HTTP_USER_AGENT}とかは特に。これをタグの無効化をせずにHTMLでの
出力に使ったりすると、クロスサイトスクリプティングちゅーやつが発生する。
0062nobodyさん
03/01/11 23:05ID:???いやあのそのどのこの、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に、ビットのローテートできる演算子ってあるのかな?無いのかな?
0063nobodyさん
03/01/11 23:39ID:???びっとのローテートは >> << だよん。
$unko>>1 で、1さんに……じゃなくて、$unkoを右に1ビットシフト。空いたビットは0で埋め立て。
しかしまぁ、以前にも「完全な乱数は無理」ってレスがあったはずなのに、しつこいのがいるね。
コンピューターの作る乱数なんぞ「計算」で求めてるにすぎないのだから、いくら種を工夫した
ところで、分布に偏りができてしまうのは仕方が無い。
00649は必ず読むこと。
03/01/12 00:07ID:pN++dQ77Crypt::Randomになるのかな。他にもあるかも。
>>9にはこれをseedに使うことを勧める。ゲームのためにコストのかかる乱数
を作るのは、もったいないと思うけど。
それに、おそらく標準のrand()の線形合同法(?)の周期も気になるだろうから、
Math::Random::MT(究極の擬似乱数生成のモジュール)も併せて使っていただきたい。
FreeBSDなら、rndcontrolでIRQを設定しておかないと、/dev/randomのエントロピープール(?)
がなかなかたまらないから注意すること。
0065nobodyさん
03/01/12 00:25ID:???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 生成ルーチンの中で、こんなことをやっているのがありますた。
参考程度に。
0066nobodyさん
03/01/12 00:30ID:pN++dQ77これでは満足できないでしょ。
0067nobodyさん
03/01/12 01:35ID:???0068貧乏パーラー
03/01/12 02:48ID:???rep.plとして作成
-----
while(<STDIN>) {
print eval($_)."\n";
print $@ if ($@);
}
1;
-----------
これで
perl rep.plで起動し
試したい式を入れれば評価結果が表示猿。
0070nobodyさん
03/01/12 11:57ID:oJAGmVM6ってやったら、この$aは暗黙で $main::a と扱われるんだよね?
じゃあ
my $a = 'グローバル変数です';
for(0..10){
my $a = 'これはfor内のローカル変数です';
}
ってやった場合、もちろんこのふたつの$aは区別されると思うけど、
forの外にあるのは $main::a
じゃあfor内の$aは何? これも暗黙のうちに $main::a になるの?
0071nobodyさん
03/01/12 12:19ID:tUI5W5YDフルパスからファイル名だけを取り出す方法が分かりません。
OSによって:\/など区切りが違いますけど
どうやって取り出せばいいのでしょうか?
0073nobodyさん
03/01/12 12:25ID:eJ8Igs3Eきてるとします、それでその人数を、b.htmに表示したいんです。
それでhttp://shena.myako.net/strangelady/cgijs/imakoko/imakoko.html
っていうのをみつけたんですがこれはa.htmにきている人数をa.htmにしか表示できないみたい
なんです、このスクリプトを変更してb.htmにでも人数を表示するということはできませんか?
もしそういうことができるなら誰かアドバイスください★
0074nobodyさん
03/01/12 12:30ID:???$fullpath = 'c:\hoge/hoge:hoge\aaa.ccc';
($file) = $fullpath =~ m|([^:\\/]*$)|;
print $file;
0076nobodyさん
03/01/12 12:54ID:pN++dQ77our $a;なら、そうなる。
00779
03/01/12 12:57ID:???イロイロありがとうございます。
モジュールについても調べて(探して)みてます。
(英語に苦戦してますが…)
それと
>それに、おそらく標準のrand()の線形合同法(?)の周期も気になるだろうから、
これについても、testしてみましたが、そのようです。
わざわざご丁寧にありがとうございました。
日頃からほとんどモジュールを使わないのに加えて、複数調べているので理解に時間がかかりそうですが、
解決できそうな感じです。
とても勉強になりました。(イロイロな意味で)
007871
03/01/12 13:01ID:tUI5W5YDありがとうございました。
無事取得できました。
0079nobodyさん
03/01/12 13:12ID:???> $unko >> 1 で、1さんに……じゃなくて、$unkoを右に1ビットシフト。空いたビットは0で埋め立て。
いやあのそのそれだと「ビットシフト」なのではないかと(苦笑)
01001011 RightRoll.b ===> 10100101
なんて具合になるのがあればと(苦笑)@キャリーフラグが立ってもよい(笑)
> ところで、分布に偏りができてしまうのは仕方が無い。
それをどれだけうまく誤魔化せるかが思案のしどころですヨね(^-^*)
>>77
エロエロがんばってくらさいです(^-^)
0080nobodyさん
03/01/12 13:28ID:eJ8Igs3Eすみません。
マルチポストってマナー違反ってしりませんでした。
ごめんなさい。
0081nobodyさん
03/01/12 13:34ID:5wjAToqi川o・-・)ノ <先生!こんなのがありました!
__/ / /
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
...|| ̄ ̄ ̄ ̄||
http://web2001.kakiko.com/koma/
008258
03/01/12 13:54ID:???まったくその通りでした。
<div><div><div></div></div></div>
<div><div><p></p></div></div>
等が正しいです。
008463
03/01/12 22:24ID:???うわっ!おっしゃる通り、シフトとローテートを勘違いしてますた!(恥ずかしい…)
ビット演算子を駆使すればローテートは実現可能だけど、あんまりスマートじゃない。
Perlにもキャリーフラグがあればなあ(w
0085nobody
03/01/13 11:10ID:CGEjRZ/e質問させてください。
@a,@b,@cという3つの配列があり、全部の値をどの配列から渡されたかわかるように
1つの関数に渡したいのですが渡し方がわかりません。
なお、配列の要素数は場合によって変動します(0〜20程度)。
どなたか、上手い方法をご教授願えますでしょうか。
0086nobodyさん
03/01/13 11:26ID:???0087nobodyさん
03/01/13 11:27ID:eXLsypXqhttp://dx1.kakiko.com/sonota/335/3352/index.html
0088nobodyさん
03/01/13 12:08ID:???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
}
0089nobodyさん
03/01/13 12:24ID:???こっちの方が要望に近いのかな?
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";
}
0090nobodyさん
03/01/13 12:53ID:W4AV/IuUそれは違うじゃろ。
&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 ]); #コピーを作って渡す
0092nobodyさん
03/01/13 14:26ID:???open(〜)||〜;
で後者には $hogehoge = 1; とかは掛けないのでしょうか?
一応自分でやった限りは dieとexit と &hogehoge 等のサブルーチン
しか使えませんでした。
0094nobodyさん
03/01/13 14:48ID:???ちなみに優先順位の違いです
open(〜) || $hogehoge = 1;
は
(open(〜) || $hogehoge) = 1;
となり
orは=より優先順位が低いので
open(〜) || ($hogehoge = 1);
と同じになります。。
0095nobodyさん
03/01/13 20:39ID:vdJkNLtHCGI_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の方とは別の処理になるのでしょうか?
よろしくお願いします。
0096nobodyさん
03/01/13 21:48ID:7xzy2NEr/:\.____\
|: ̄\(∩´∀`) \ <先生!こんなのがありました!
|:在 |: ̄ ̄ U ̄:|
http://saitama.gasuki.com/mona/
0097nobody
03/01/13 23:16ID:CGEjRZ/erefを使えばいいのですね。
調べて使って行こうと思います。
質問の言葉が足りない中、正確に類推してくださった90さんには
格別の感謝を。
他の方々もありがとうございました。
0098貧乏パーラー
03/01/13 23:31ID:???----ここから
_=_
_=_ 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
----ここまで
0099yani ◆saNSktNEdQ
03/01/13 23:33ID:ziR7v8Q2$seed = unpack "%L*", md5(join '.', gettimeofday, $$, `ps axww |gzip`);
というのはどうだろう。
実用的にはには
$seed = unpack "%L*", md5(join '.', gettimeofday);
で十分なようで、こちらのほうが相当速い。
# Time::HiRes, Digest::MD5とも perl5では標準モジュール
問題は$seedが16bit整数になることだが、、、なぜだ???
0100yani ◆saNSktNEdQ
03/01/13 23:34ID:ziR7v8Q2◯ # Time::HiRes, Digest::MD5とも perl5.8では標準モジュール
010190
03/01/13 23:35ID: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;
}
010290
03/01/13 23:42ID:???0104nobodyさん
03/01/14 00:21ID:uaEPu1zEプログラムを書いているのですが、
初めてアップロードする場合はよいのですが、
ファイルを書き換える(上書き)時、
どうも、ブラウザのキャッシュが悪さをしているようで
ファイル上では書き変わっているのに、ブラウザ表示上では
以前の画像ファイルが表示されてしまう事があります。
(この場合何度かリロードしないと本来のファイルを表示してくれません)
これを、書き換えた後はキャッシュを利用しないようには出来ないでしょうか?
0105nobodyさん
03/01/14 00:25ID:yqTa2j5Q0106yani ◆saNSktNEdQ
03/01/14 01:29ID:HMXRNLis事故レス
当たり前だった。
0108nobodyさん
03/01/14 02:49ID:???ファイル名に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 等を無視してくれよるのもおるから。
0109104
03/01/14 03:54ID:???ほぉほぉなるほど!!
それならば、別ファイル(?)として扱われるわけですね。
HTMLのヘッダに
Pragma:no-cache
cache-control:no-cache
入れてまして、HTMLの方は非キャッシュOKだったんですけど
画像の方がどうもうまくいっておりませんでした。
今日は遅いので明日にでも試させて頂きますー。
0110NOBODYたん
03/01/14 04:04ID:???>>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);
--
0111nobodyさん
03/01/14 04:58ID:/jKmOe0i0112nobodyさん
03/01/14 05:00ID:???0113NOBODYたん
03/01/14 05:44ID:???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/
0114nobodyさん
03/01/14 05:45ID:KVuhYoblhttp://www6.ocn.ne.jp/~endou/ten.html
0115nobodyさん
03/01/14 06:42ID:/jKmOe0iありがとうございます。
LWPを使って読めるようになりました。
作っているのは、よくある○○弁変換みたいな奴なんですが、
読み込むサイズによって過負荷になってしまいますよね。
サイズのチェック(一定量処理したらやめるような)は
どうすればいいのでしょうか。
Simpleのheadを使ってみたのですが
yahooさえcontent-lengthを返さないのでダメでした。
0116111
03/01/14 06:53ID:???0117nobodyさん
03/01/14 07:19ID:ea2A6+p/あまりに時間がかかりすぎるようなら、サーバーが500を返して勝手に止まるから、
それでいいじゃねえか
0118nobodyさん
03/01/14 10:37ID:???ないだろ。そういうCGIが増殖するから、あんまり
CGIがまともにつかえそうなところがなくなるんだよ。
0119nobodyさん
03/01/14 10:39ID:???とりあえず貧乏パーラは人にものを頼むときに「お願いします」って
言うってことを覚えとけ。
ほれ、
$ 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;
0120nobodyさん
03/01/14 13:10ID: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
-------------------------------------
いちおう値でソートしてくれてるんですが、目的の出力の前になぜか値の一覧が出てしまいます。
どうすればいいですか?( ´・∀・`)
0121 ◆PxAOHU.zVE
03/01/14 13:49ID:pln/ogcF%hogeの前にkeysをいれる。
0122nobodyさん
03/01/15 00:32ID:AlO2VnQaせっかく文字出力ができるので、webdingsなどのフォントにある外字を
使おうと思ったのですが、文字の指定方法がわかりません。
普通の文字なら
$NEWIMG->Annotate( text=>'A', pointsize=>14, fill=>'#000000',
x=>$posX, y=>$posY, font=>'img/ariblk.ttf' );
とやればいけるのですが、使いたい文字をアクセサリの「文字コード表」
から拾ってきても「?」になってしまいます。
文字コードはわかるからそこから指定できるのではないかと思いますが
その指定方法がわかりません。
どのように指定したらいいでしょうか?
0124nobodyさん
03/01/15 02:08ID:ybtk15GBhttp://click.dtiserv2.com/Click5/1-45-2963
0126貧乏パーラー
03/01/15 05:28ID:???SELECTでフィールド8個以上をクエリするとエラーなります。
DBをMySQLにしてDBD::mysqlPPにしたらフィールド33個をクエリしてもOKでした
クライアント、DB共にWinXPです。
DBD::PgPPはこういう制限があるという事でしょうか?宜しくお願いします。
0127nobodyさん
03/01/15 07:39ID:???どうすればよろしいでしょうか。
今は、chop $str;chop $str;でやっています。
VBAでいう、left(string,2)の様な関数?はありますか?
0128nobodyさん
03/01/15 07:59ID:???VBAは良く知らんがN88BasicのMIDの感じだな。
0130nobodyさん
03/01/15 09:56ID:2BGcsgzZ作者日本人メール汁
0131nobodyさん
03/01/15 10:22ID: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ファイルは生成されていないようです。
どこをどう改善すればよいのか、ご指導よろしくお願いします。
0132nobodyさん
03/01/15 10:45ID:???データファイルを別ディレクトリにしてみたら?
TripodのCGI設置の説明をちょっと読んだけど、cgi-bin 直下に画像ファイルなどは
置けないとあるので、.cgi .pl 以外のファイルは全滅なのかもしれん。
あと、ここはPerlスレだからCGIに関する質問はできるだけ他のスレでやってな。
013485
03/01/15 12:12ID:lPFUjXcRありがとうございます。
参照は初級者向けじゃないみたいで、例文に参照以外の
わからない箇所が多いので地道に勉強中。
ソース丸写し以外で使えるよう頑張ります。
0135山崎渉
03/01/15 13:31ID:???0136nobodyさん
03/01/15 14:07ID:???新たなPATHを追加したいと思ったんですけど
$ENV{'PATH'} .= ';c:\hogehoge';
ではうまく行きませんでした どうやればいいのでしょうか?
0137nobodyさん
03/01/15 15:38ID:5j+QQZeA色んなアカウントに送られてきたメールを片っ端からDBに登録したいのです。
なんかいい参考書やサイトを知りませんか?
よろしくおながいしますm(_ _)m
0138vvv
03/01/15 15:42ID:ZNHQB8hs★YAHOOOプロフィール★
0140nobodyさん
03/01/15 19:13ID:POOF/+eY下記の場合、どちらが効率的なのでしょう?
1.例えばデータファイルを一つにまとめ、
登録NO<>カテゴリ<>データ
などと登録する方法
2.データファイルをカテゴリ毎に、
data1.log
data2.log ・・・
等と1カテゴリで1データファイルとする。
一つのデータファイルにまとめるとファイルが大きくなってしまい、
カテゴリ毎に分ける方が良い様な気もするのですが、
実際の所はどうなのでしょうか?
サーバー付加の大小の観点からも御指導頂ければ幸いです。
0141nobodyさん
03/01/15 20:20ID:mlzRLcDEじゃ二次元テーブルってできないのですか?
アルゴリズムを教えてください。
0142nobodyさん
03/01/15 20:23ID:???すいません、二次元配列で検索した直ぐに分かりました・・・
はぁ・・・容易にはできないのですね。がんばって作ります。
014358
03/01/15 21:20ID:???print $tbl[100][100];
0145144
03/01/15 23:45ID:???リストの二次元配列だから面倒だわ、忘れてくれぃ。
0146nobodyさん
03/01/16 07:53ID:RDhobq0Jっていうのがあるのですがこの"[]"は何をやってるのですか?
0147nobodyさん
03/01/16 13:09ID:???http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
http://www.kt.rim.or.jp/~kbk/perl5.005/perllol.html
とにかく全部読め。話はそれからだ。
0148nobody
03/01/16 19:36ID:6WICp0JYそこで、それらを結合するために
$body = '<body bgcolor="'.$bgcolor.'" background="'.$background.'" text="'.$text.'" link="'.$link.' " vlink="'.$vlink.'" alink="'.$alink.'">';
と書いたのですが、なぜか$bodyが空文字になってしまいます。
超初歩だとは思いますがどなたか解決法を教えてくださらないでしょうか。
0149nobodyさん
03/01/16 19:43ID:???$bodyが消える理由はわからんが。
スコープ外とかいうオチじゃないかな?
0151nobodyさん
03/01/16 20:46ID:???0154nobodyさん
03/01/16 21:31ID:rmmrK9en0155 ◆ZnBI2EKkq.
03/01/16 21:59ID:4OjEZO2Wmy $expires = shift;
・・・
if($expires > 0) {
グリニッジ標準時の文字列を作って
}
print "Set-Cookie: ・・・
とやっているのですが $expiresには何が入って
どういう意味で使ってるかわかりません。
教えて下さい。よろしくお願いします。
0156nobodyさん
03/01/16 22:27ID:t/gkHHSAexpireの意味知ってますか?
クッキーの有効期限設定してるんだろ
expireなしなら、セッション間のみ有効なクッキー
CGIの話ね
0157nobody
03/01/16 22:30ID:6WICp0JYありがとうございました。
それをコピペしたら普通にできました。
原因はじっくり解明したいと思います…。
0158nobodyさん
03/01/16 22:45ID:Tl7JXy0hほとんどのサイトでは
use strict 使う
-w スイッチ使う
グローバル変数をなるべく使わないようにする
/o スイッチ使わない
くらいしか書いてない。
なのに、この通りやってもなんか銚子が悪い。
mod_perl で動かすときって何か他にやらなきゃいけないことってあるん?
例えば eval 使ってはだめとか、
オブジェクトはちゃんとDESTORYしないとだめとか。
0159nobodyさん
03/01/16 22:49ID:rmmrK9en0160nobodyさん
03/01/17 00:43ID:???その中にある hoge 言う文字がいくつあるかカウントしたいんですが
どうすればいいんでしょう?
open (HOGE,"hoge.txt");
?????
close(HOGE);
0161nobodyさん
03/01/17 01:18ID:???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;
これでいいような気がする。
0162nobodyさん
03/01/17 02:19ID:???0164nobodyさん
03/01/17 15:03ID:l3uVFji3メソッド(サブルーチン)の引数が正しくない
(引数の数が正しくないとか、数字であるべきところが文字列だったとか)
の場合、どうすればいいのでしょうか?
エラーを表示?
エラーを返して終了?
単にreturn?
0167nobodyさん
03/01/17 18:46ID:95w9V4FK設置しようとしています。
とりあえず入り口は出来たのですが、肝心の出口がどうやら設定がおかしい
ようで"画像をアップできません"とエラーが出ます。
恐らく下記の設定方法を間違えているのでエラーが出るのだと思います。
# アップロードディレクトリ
# → パスの最後は / で終わること
# → フルパスだと / から記述する
$ImgDir = "?????.hp.infoseek.co.jp/clip/img/";
# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "http://?????.hp.infoseek.co.jp/clip/img/";
色々調べたのですが、ここの部分だけハッキリ答えが出せません。
どうか出口の設定方法を教えてください。
0168nobodyさん
03/01/17 19:00ID:zt5lo6Y5今どう設定してあってエラーでてるの?
てか何を悩んでるの?
0169nobodyさん
03/01/17 19:01ID:???2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
て書いてくれ。
下げてみるテスト(鬱
0170nobodyさん
03/01/17 19:10ID:mT3lwUSe壊れて0バイトになってしまいます。
使用ソフトはTransmitとNetFinderです。
アップするファイルはCGIのためアスキーモードで転送しています。
でもファイルが壊れてしまいます。
9だとうまくアップできるんですが・・・
どなたか詳しい人教えて下さい
0171nobodyさん
03/01/17 19:55ID:???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";
0172nobodyさん
03/01/17 20:06ID:???ファイルがかなり大きくなってきて
ファイルを全て読み込まず
ファイルの末尾から一行ずつ読み込みたいのですが、
どうしたらいいのでしょうか?
0174nobodyさん
03/01/17 20:26ID:???0175nobodyさん
03/01/17 20:27ID:???# アップロードディレクトリ
# → パスの最後は / で終わること
# → フルパスだと / から記述する
$ImgDir = "/clip/img/";
# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "/clip/img/";
で、いんでないの?
>>170
丸痴君ね。
http://pc.2ch.net/test/read.cgi/mac/1042606577/267
>>172
過去ログに似たようなのがあったような記憶が・・・
0177173
03/01/17 20:31ID:???tailを知っていたのなら、ソース読んじゃえばいいのに。
全部読み込んでいるよ。まあ、細かく言えばPerlのようには
読んではいないけど、全てを読み込まないのに最後を知る
方法はないです。
0178nobodyさん
03/01/17 20:44ID:GSBryIjf0179173
03/01/17 20:47ID:???0180nobodyさん
03/01/17 20:56ID:GSBryIjf0181175
03/01/17 21:02ID:???# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$ImgUrl = "$ENV{'HTTP_HOST'}/clip/img/";
スマソ
ってこれでいいのか?(スクリプトが別鯖にある場合は不可)
0182143
03/01/17 21:12ID:???その文だと{}で無名のハッシュをつくり、
\でリファレンスしませんか?
(\@a)->[1];がまっとう(?)ですので、@a->[1];は使うべきでは無いようですね。
ありがとうございました。
0185nobodyさん
03/01/17 23:14ID:xM0Mt5EAclass Person {
int age;
String name, tel;
URL homepage;
}
みたいなメンバ変数の型みたいな考え方無しのオブジェクト指向って
のが理解できなくて立ち往生してるのですが、どうやればすんなり
受け入れられますか?
0186nobodyさん
03/01/17 23:18ID:???全角英字DQN?
0187超初心者
03/01/17 23:28ID:sm0odS2/配布のものを使おうとしたらうまくいきません。
ランキングの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を入れたらいいのですか?
0188nobodyさん
03/01/17 23:37ID:???そのCGIスクリプトの説明を読むか。
配布されているサイトで聞いてください。
ここはPerlのコーディングの話をするスレッドです。
0191nobodyさん
03/01/17 23:57ID:???親切な人が説明してくれても分からなかったらしょうがないでしょ。
0192185
03/01/18 00:07ID:???例えば
$self->{'age'}
って変数があっても、
$self->{'age'}='nobodyさん' とか $self->{'age'}='http://www.2ch.net'
ってすることができるわけで、
いくつかモジュールを読んでみたけど
たんにメソッドの詰め合わせ的な意味しかないようが気がするんです。
0193nobodyさん
03/01/18 00:20ID:O9FxKTGG0194nobodyさん
03/01/18 00:22ID:???探すだけならスレ違い。
ここはコーディングの相談所。
>1読め。
0195 ◆PxAOHU.zVE
03/01/18 01:56ID:55Z6A3Vx5.8のAttributeってまだ使えないのかな...
このへん?
http://search.cpan.org/author/ABERGMAN/Attribute-Handlers-0.78/lib/Attribute/Handlers.pm
0196nobodyさん
03/01/18 08:30ID:eKp44Q6BPerl6 で型が出来るだろ。
それでいいじゃないか。
0197びびった
03/01/18 09:14ID:x+/Sd8AAhttp://click.dtiserv2.com/Click/1-45-2963
0198nobodyさん
03/01/18 14:51ID:???perl Builderぐらいしかないのでしょうか?
0199HOGE
03/01/18 15:51ID: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;
0200nobodyさん
03/01/18 15:56ID:???2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0201HOGE
03/01/18 16:05ID:5ALQn0gp2:Webで調べていると、require文を使えば、
「その場所にかかれているかのように
スクリプトを取り込むことができる」と知りました。
3:でも、$hogeの部分は空のままです。
require文の解釈が間違っていることは自覚しています。
名前空間のせいで、変数が受け渡されていないのかもしれません。
しかし、今の私には具体的にどうすればいいかがわかりません。
質問に2レスもつかってすみません。どうか教えてください。
0202vvv
03/01/18 16:09ID:+GEyyv8c★YAHOOOプロフィール★
0204nobodyさん
03/01/18 17:08ID:lJXENDzT和鳥の無料WebスペースにCGIのカウンタを置こうと思い、探して来ました。
見つけてきたそのCGIは、説明書きによるとcgi-bin以下に画像ファイルを置いて、
それを引っ張り出してくるものらしい。
けど、和鳥には、「セキュリティ上の都合から、cgi-bin以下に画像ファイルを置いても
表示されないので、別の場所に置いてくれ。」との旨が書いてあり、そのままではうまくいかなかった。
そこで、画像ディレクトリを別の場所へ移したわけなのですが、、、えーと、そしたら
「$imgdir = './Gif/';」の部分は、このままではダメなのでしょうか?
試しにそのままやってみたらエラーになったので、省略せずにURLそのまま入れてみたりしたのですが、
やはりだめでした。
画像自体はちゃんとうpされていたので、私的にはその部分になにか間違いがあるのかなと
思ったのですが。。
どしたら良いでしょうか。すいません、どなたか教えて下さいです。
0205nobodyさん
03/01/18 17:11ID:???1:パスが間違っている(HTMLの勉強しろ)
2:パーミッションが間違っている(パーミッションの勉強しろ)
3:そもそもperlの話じゃないからココではスレ違い(常識を勉強しろ)
4:配布元か、和鳥スレで聞け
0206nobodyさん
03/01/18 17:15ID:???#!usr/local/perl も不安といえば不安だな
>>204
URLで入れたら動きそうな気がするが、大文字小文字は間違ってない?
ここで言ってるURLは http:// から始まるやつね
0208204
03/01/18 17:26ID:???エラーフラグ立てた上で、オブジェクトを返しておいて
is_error,error_message等のメソッドを用意するってのは?
0213nobodyさん
03/01/19 06:35ID:5v4SEFP4@hoge$iっていう配列を使いたいのですがうまくいきません。
0214nobodyさん
03/01/19 06:49ID:???@{$i}
0216nobodyさん
03/01/19 08:26ID:???@{"hoge$i"}
0217nobodyさん
03/01/19 14:09ID:???その場合、これを書くとエラーが出なくなる
no strict 'refs';
0218貧乏パーラー
03/01/19 14:37ID:???>-----------------------------------------------
>・読み出しも外部からのインクルード式で可能とした
>・処理速度向上策バイトコード化した一連の定義を繰り返しで処理から
> do{}でそれぞれくくって一つのブロックとして一気にバイトコードに展開版に変更。
>・出力スキップSWにて定義中の式の組み方でコンバートバージョンにも出来るcnv.txt
> ○のオーダはXXXX.txtで処理する。
> 前回俺が出した集計項目も網羅して7日間のデータを/m指定で
>各人分散し集計を起動する事にする.
>その間に出力CSVを合成するツール作成の事。(Excelでやれってかぁ?)
>-----------------------------------------------
>て訳で連日プログラムして疲れたよ。今晩ラーメンでも食べに行こうか?
何をやったのかさっぱりだけど、、、
なんか私には解らない凄いプログラム作ったのかな?
でも歳も歳なんだから無理しないようにね!
ラーメンか〜良いね。でも肉が食べたいな〜
わがままです。。。
0219質問させてください。
03/01/19 15:30ID:???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を取得するための、
スマートな方法はありませんでしょうか。
0220nobodyさん
03/01/19 16:17ID:???...
}
0222nobodyさん
03/01/19 17:24ID:???0223nobodyさん
03/01/19 17:26ID: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
0224続き
03/01/19 17:26ID:YTKbQL3j$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;
0225貧乏パーラー
03/01/19 17:47ID:???>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
0226貧乏パーラー
03/01/19 17:51ID:???例えば2chのちくり板のサーバはGETリクエストヘッダのHost:や
POSTのRefere:中のホスト名をチェックしているからね。
0227nobodyさん
03/01/19 18:20ID:xgcJy6Dhcgiの画像アップ形式掲示板ってありますよね?
サーバーの容量もあるとは思いますが、大体みなさん設置
するに当たって"最大投稿データ量"ってどれくらいに設定されてますか?
後"最大投稿数"はどれくらいで適切なんですか?
変な質問ですみません。
0228bbb
03/01/19 18:44ID:TK7ESc1CYAHOOO情報
0230nobodyさん
03/01/19 22:37ID:hs+tYJ37cgi-binの中にhtmlファイルを入れると呼び出すことができません。
また、public.htmlの下にhtmlファイルを置き、cgiからのパスを修正しても"ファイルがオープンできません"とでます。
こういうサーバではhtmlを使うcgiは置けないのでしょうか?
0232nobodyさん
03/01/19 23:44ID:???PerlをつかったCGIならCGIの質問だってOKだろ。
PerlからMySQL呼び出してどーこーするのっていいんじゃないの。
まぁ230の質問はPerlともCGIとも直接関係なさそうだが。
0233おながいします。
03/01/19 23:56ID:tLwHArOBlocalhostではちゃんと起動するのですが、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("現在サーバが投稿を受け付けません。");
0234nobodyさん
03/01/20 00:04ID:???wakwakのページをみると、imageファイルはpublic_htmlの下に置くようにって書いてあるね。
htmlでもいけそうな気がするけど、もし画像ファイルしかCGIから読み出せないってことなら
そのhtmlを画像ファイルの拡張子に変えてみたら?
それでダメだったら問題は他にあるってこと。
>>233
ちゃんとソースみてないけど、ディレクトリのパーミッションの問題じゃない?
0235おながいします。
03/01/20 00:26ID:???ディレクトリのパーミッションも変更してみましたが、以前同じ
エラーメッセージが出てしまいます。
あ、ちなみにさっき書いたスクリプトで省略してしまった所があるの
ですが、それは
$tempfile = $targetfile;
$tempfile =~ s/[:\/\\]/_/g;
$tempfile = $workdir .$tempfile . $$ . ".tmp";
です。宜しくお願い致します。<(_ _)>
0236nobodyさん
03/01/20 01:00ID:???それはないか…。
0237nobodyさん
03/01/20 01:07ID:???OKでしたっけ?
$workdir = "./";
にしてみるとか。
0238nobodyさん
03/01/20 01:46ID:???$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";
♥
とりあえず。
0239nobodyさん
03/01/20 15:53ID:emhs1xhaあるファイルoutput.txtの内容が次のようだったとします。
02あいうえお
01あかさたな
00かきくけこ
このファイルの先頭に1行つけたして、
03たちつてと
02あいうえお
01あかさたな
00かきくけこ
としたいのですが、どうすればいいでしょうか?
ファイルの末尾に付け足すのはかんたんなのですが・・
seek(OUT,0,0);をやて書き込んでも、一部、上書きになって
消える部分があるし 困っています。
0241239
03/01/20 16:05ID:emhs1xhaありがとうございます unshiftを調べたところ
配列を扱うもののようです。いったん配列に取り込まないと
いけないということでしょうか?そうだとすれば
while(<IN>) {
$mes .= $_;
}
print OUT $newmes . $mes;
とするのと同じで、メモリをくってしまいますので、
だめっぽいです。
0242nobodyさん
03/01/20 16:39ID:???$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 $!;
0243nobodyさん
03/01/20 16:39ID:???この質問は過去に何度か出ていた気がする。
その時の回答は確か
*書きこむ時は普通に追記して、読み出すときにreverseかける
*テンポラリファイルを作ってリネームする
の二つ。
前者は読み出す時に配列に入れなきゃならないし、
後者は排他制御が面倒な予感。
もっと良い方法があるなら俺も知りたい。
0244nobodyさん
03/01/20 16:39ID:???output.txt.tmp を新規作成する。
output.txt.tmp に新たな1行のみ書きこむ。
output.txt を読み込む。
output.txt.tmp に追加書き込みする。
output.txt を削除する。
output.txt.tmp を output.txt に名前変更する。
ただし、output.txt.tmp がすでに存在するときは上記の操作を行わない。
で、どうだ!?
0245nobodyさん
03/01/20 19:16ID:gSzazTge少し間違ってるなぁ。
削除する必要はない。削除するとファイルが存在しない時間が少し発生するから良くない。
それから、存在チェックと書き込みは同時には行われないから、
O_EXCLを書いてopenするといいかもしれない。ファイルが存在したら失敗とする。
この方法の問題点は、中途半端な状態で残ったoutput.txt.tmpをどう扱うか、にある。
0246nobodyさん
03/01/20 19:43ID:8rfuT7oA半角全角問わずに一文字ずつ数えたいのですがどうしたらいいでしょうか
foreach(<LOG>){
@str1 = split //,;
$total += @str1;
}
0247劉邦
03/01/20 20:09ID:QoYi51kG0249nobodyさん
03/01/20 20:53ID:???検索して探せ。
いいか悪いかは自分で見て判断するしかない。
他人にいいサイトが自分にいいとは限らない。
>248
入門は別のところでしてほしいぞ。
HellowWorld!から教える気か?
0250劉邦
03/01/20 20:54ID:QoYi51kGのサイトの問6.2はどうやるんですかね・・?address.txt.つくって
実行してみたんですけど、アドレスが表示されないんですよね・・・
我慢できなくなって、解答を参照したところそう違いはなく、その
解答をコピーしてやってみたんですが、それもうまくいきません。
何が原因だと思いますか?
0253nobodyさん
03/01/20 21:56ID:???解答ではaddress.txtを標準入力から読み込むようになってるから、
単体で動作させたいときはファイルから入力するように修正しないといけないよ。
0254劉邦
03/01/20 22:12ID:QoYi51kG例えばどんなものがあるのですか?
0255劉邦
03/01/20 22:20ID:QoYi51kG0257劉邦
03/01/20 22:30ID:QoYi51kG入門者に対するイジメじゃないですかね・・・(^-^;A
0258nobodyさん
03/01/20 22:31ID:qfdWUXSE川o・-・)ノ <先生!こんなのがありました!
__/ / /
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/hiroyuki/
0259劉邦
03/01/20 22:39ID:QoYi51kG0260nobodyさん
03/01/20 23:43ID:???初めてのperl第一版そのままっぽいんだけど翻訳元とか全く書いてないし
訳されたと言う日付の時点で既に第二版すら出版されてるわけだが。
というわけで、サイトの中身そのものはそう悪くないぞ。
れっきとした書籍のほとんどそのままだからな(笑)
ま、当然本屋で本物を買ってきた方が良いけど。三千円ね。
0262nobodyさん
03/01/21 01:23ID:S5Xqr2nKお答えしてくれるとうれしいです。
開催日に合わせて発売するというものを作ってまして
時間チェックでわからなくなってしまいました。
発売前・中・締切と時間でフラグを立てて制限したいのですが
頭がこんがらがってなかなかできません。
$buyflag [0:発売前] [1:発売中] [2:締切]
現在の時刻をそれぞれ
[分:$min] [時:$hour] [日:$mday] [月:$mon] [年:$year]
とし、開催日時のデータを@daydataという配列に
それぞれ年[0]、月[1]、日[2]、時[3]、分[4]として入れています。
開催日時のちょうど3日前に発売開始[1:発売中]でそれより前は
[0:発売前]、開催日時の1時間前に[2:締切]としたいのです。
どなたか教えてくださいませんか?
0263nobodyさん
03/01/21 02:02ID:???わからなくなったら、紙に書いて整理しな。
頭の中だけでやろうとするからわからなくなる。
ここで質問したいなら、ソースくらい出しなさい。
0264nobodyさん
03/01/21 02:09ID:???日時は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;}
んーむ、感覚的に殴り書きヽ( ´ー`)ノ
0265nobodyさん
03/01/21 02:11ID:???失礼しました。
$opoentime = join("", @daydata); → $opentime = join("", @daydata);
0266nobodyさん
03/01/21 02:12ID:???の 1042260745 ってなんて言うんだっけ?>time();
これ使ったらなんも考えることないっしょ
開催日時 $tt = timegm(hoge);
発売開始 $tt - 60 * 60 * 24 *3
0268nobodyさん
03/01/21 02:43ID:???/ ̄ l | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■■-っ < >>267 んな こたァない
´∀`/ \__________
__/|Y/\.
Ё|__ | / |
| У.. |
0269nobodyさん
03/01/21 05:29ID:???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";
0270nobodyさん
03/01/21 07:25ID:???if($a =~ /(aaa|bbb)/){⊂}
と同じように
if($a eq /(aaa|bbb)/){⊂}
という書き方はOKでしょうか?
0271nobodyさん
03/01/21 07:35ID:???NG。
正規表現の部分が、上は $a を評価するのに対して、下は $_ に対して評価した値と
$a を文字列として比較するので、わけわからん結果になる。
0272za
03/01/21 10:02ID:???EUCの日本語を、Unicodeの数値参照コード(???????;)に変換する
モジュールは無いでしょうか? それともUnicode-Japaneseで可能でしょうか?
0273za
03/01/21 10:05ID:???失礼。「&#??????;」です。(^^;
0274nobodyさん
03/01/21 12:45ID:f7zzet+E掲示板を作ったつもりなのですが、設置できても文字化けしてしまいます。
ブラウザで自動判別をしてもEUCを判別してもらえず、
手動でEUCにエンコードしないと書き込みが見えません。
本当に初心者なので、どこが悪いのかもわかりません。
書き込みが文字化けせずに見える方法はありますか?
作成したソースは
http://mc6800.dyn.dhs.org/UP_LOADER/UPFTP/IMG/MC6800P_253.txt
にあります。よろしくお願いします。
0275herm
03/01/21 13:07ID:???そのスクリプトが入ってるdirectoryに
「AddDefaultCharset EUC-JP」と書いた「.htaccess」を入れるとか。
0276274
03/01/21 13:13ID:f7zzet+Eいれてみたら出来ました!本当にありがとうございました!
0277246
03/01/21 14:09ID:NhrI/baVできました!!
jcode使ったりいろいろ悩んだのですがこれで解決しました。ありがとうございました。
0279262
03/01/21 15:03ID:???ありがとうです。
$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; }
0282nobodyさん
03/01/21 15:55ID:???0283nobodyさん
03/01/21 16:16ID:???0284nobodyさん
03/01/21 18:40ID:???自分も初心者ですが>274のスクリプトが気になったんで
設置してみたんですが、記事を投稿はできても記事の削除をすると
500 Internal Server Errorが出てしまいます。
どうすれば削除することができますか?
0285nobodyさん
03/01/21 19:34ID:???暇なんで試してみたが・・・おいおい、そのスクリプト作りかけ何じゃねーのかYO!
お○○チンが・・・ねえ!!
sub read_data
{
open(READ,"$datafile") || &error ('ファイルオープンエラー');
@data = <READ>;
close(READ);
}
sub write_data
{
open(WRITE,">$datafile") || &error('ファイルオープンエラー');
print WRITE @data;
close(WRITE);
}
でも追加しとけ!
後はしらねーーー
0286nobodyさん
03/01/21 19:57ID:owIuUjTB0287286
03/01/21 19:59ID:owIuUjTBネット上にある講座などの知識だけで上達できますか?
参考書がないと歯が立たないものなんですか?
0288nobodyさん
03/01/21 20:03ID:???あやしい言葉づかいだねぇ。
秀丸を使いこなしているのなら、もちろん十分でしょう。。
>>287
もちろんネット上のテキストだけで上達できる!
色々プログラミングしまくってくれ!!
0291nobodyさん
03/01/21 21:22ID:???参考書籍スレに逝ってください。
0292nobodyさん
03/01/21 21:25ID:???0293nobodyさん
03/01/21 21:35ID:???0294nobodyさん
03/01/21 21:44ID:???0295239
03/01/21 22:02ID:???根本的な解決法はなかったのですね・・・
現状ではtmpファイルをつかって行おうと思います。
作成しているものが携帯電話対応のルーム数不定の
チャットなので、高負荷なことは避けたかったのですが
どうせあんまり使う人はいないだろうからいいか っとおもいました
0296nobodyさん
03/01/21 22:14ID:???>作成しているものが携帯電話対応のルーム数不定の
>チャットなので、高負荷なことは避けたかったのですが
なんかサーバサイドとクライアントサイドの区別が未だに付いてない予感。
0298nobodyさん
03/01/21 22:20ID:???そういった時の返答は大体決まってる。
ファイルの先頭に追記するのではなく、ファイルの末尾に追記して、読み込みの時にreverseしろ。
0300nobodyさん
03/01/21 22:26ID:???0301nobodyさん
03/01/21 22:28ID:???0302239
03/01/21 22:49ID:???携帯電話側はdocomoのやつなのでjavaでiアプリを作ってます。
ある程度そっちができたので、次はサーバーサイドを作っています。
本当はサーバーサイドもjavaでいこうとしていたのですが、
今までperlを使ったことがあったのと、実装の簡単さでperlのcgiに
しました。
ファイルの末尾に追記してリバースする方法と
tmpファイルを作成する方法はどちらが効率がよいでしょうか?
チャットにおいて、
サーバー側に持っておくログを50行までと決めておけば、
リバースでよいかな
0304239
03/01/21 23:16ID:???はい。結局reverseもunshiftもリストに読み込む
tmpはリストは使わないがファイルアクセス
なんですよね。まずはファイルアクセスのほうを試してみます。
0305nobodyさん
03/01/21 23:52ID:???use Encode;
my $str = 'あいうえお';
my $utf_str = decode('EUC-JP', $str);
$utf_str =~ s/(.)/sprintf("?%d;",unpack("U",$1))/ge;
print $utf_str ,"\n";
0307nobodyさん
03/01/22 00:07ID:NkPjRdCp他に必要な人がいるかもしれないから、もっと簡単な方法。もう出てるけど。
>>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って、配列に読み込むっていう意味じゃなくて、ひっくり返して読む
っていうだけだと思う。が。(そうじゃないと異常にもったいない)
頻繁に先頭に追加が発生するなら、データ構造の設計がおかしい。
0308nobodyさん
03/01/22 00:09ID:NkPjRdCp開始時刻も、time()の戻り値の形式でいれておくこと。
適当なモジュールを使えば作れる、と思う。
0309239
03/01/22 00:16ID:???ありがとうございます。
モジュールがあるのですね。今度調べてみようとおもいます。
普通にseekすると上書きになちゃうので・・
下から読むのも行ごとによめればいいけどそうでもなかったので
チャットなので発言ごとに毎回ファイルの先頭に追加したいので、
データ構造の設計がおかしいのですね・・
0310nobodyさん
03/01/22 00:36ID:NkPjRdCpチャットなら、保存する量を制限する、だろうから、単純な追記では良くないね。
おそらく、50行くらいなら、メモリーに入れて処理したほうが速いと思う。(ベンチマークしてみよう!)
具体的には、@lines = <IN>; unshift(@line, 新しい行); pop(@line);
0311nobodyさん
03/01/22 00:38ID:NkPjRdCpベンチマークは、Benchmarkっていうモジュールが標準で付いてるから、
それをつかってやればいい
0312nobodyさん
03/01/22 02:35ID:???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;}
0314nobodyさん
03/01/22 04:14ID:spwoH+AM日本語を処理する部分のみを、Jcode::eucなどを使って書き換えてあげればそれだけですむのでしょうか。
もともとかかれたソースコードは、jperl -Leucのオプションを使って起動させるものです。よろしくお願いいたします。
0315nobodyさん
03/01/22 06:11ID:???ような事は、どのようにすれば良いのでしょうか?
例えば、
「aaa bbb ccc [change]ddd[/change] eee fff」
というテキストがブラウザから送られて、この
[change]…[/change]
に囲まれた部分だけに &kaeru() という処理を施す。そして全文を返す。
もし&kaeruがescape sequenceに変換する処理なら、
「aaa bbb ccc ??? eee fff」
というテキストを返したいのです。
0316訂正
03/01/22 06:13ID:???「aaa bbb ccc &#224;&#224;&#224; eee fff」
です
0317nobodyさん
03/01/22 07:28ID:???今は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;
0318nobodyさん
03/01/22 07:55ID:q2TbMzAT<!--#config timefmt="%m/%d" -->
他のSSI(カウンター)は動くのですがこれだけダメでした。
<!--#echo var="DOCUMENT_NAME"-->
これはちゃんと表示しました。
もし解られる方がいらっしゃいましたらよろしくお願い致します
0320nobodyさん
03/01/22 08:45ID:???フォームなどで入力された文字をまず
eucにして処理(ファイルに保存や正規表現にかけるなど)
そしてクライアントに返す寸前にeucをsjisなどに変換して
printしているのですが、
この場合、半角カナが送られてくると文字化けが起こってしまいます。
jcode.plにz2hなどの関数があるのですが、
半角は半角、全角は全角のままあつかいたいので、
なにかよい方法はありませんでしょうか?
0322bloom
03/01/22 09:06ID:pcyTRh0d0323nobodyさん
03/01/22 09:16ID:???入力された文字列で漢字コードを判別している限り無理。
Shift_JISの半角カタカナ2個はeuc-jpの漢字と判別される。
>>321
わけが分かっていないなら回答しないこと。
理由は上に書いた通り、utf-8に変換しようにも元の文字列の
漢字コードがわからない限り無理。euc-jpにも半角カタカナは
一応用意されている。
0324nobodyさん
03/01/22 09:22ID:???>入力された文字列で漢字コードを判別している限り無理。
ある程度の長さの文字列を読んでインテリジェントに文字コードを判別する文字コード変換ライブラリもそう珍しくはないが。
ShiftJIS文字255個にEUC漢字1個。これをEUCと判断するバカはいないわけで。
0325nobodyさん
03/01/22 09:33ID:2Hn1813RC:\>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.
たすけてやってください
0327323
03/01/22 10:47ID:???そうでしたか・・・
jcodeには euc2sjisとか
sjis2eucという的確なものもありますよね?
あれでやってもだめでしょうか?
以前は失敗したようなきがするけど、思い違いかなぁ
0328nobodyさん
03/01/22 11:56ID:???フォームから送られてくることが前提なら、hiddenでチェック用の文字を一つ送って、
判別するとかね。昔よくやったよ。
最近のブラウザは、フォームのページの文字コードで送ってくるから、
明示的に文字コード指定しても大丈夫だと思う。
あと、最近はFORMタグでも送信する文字コード指定できるようだ。
0330nobodyさん
03/01/22 12:27ID:9ZZh+FcB__END__
0331nobodyさん
03/01/22 13:15ID:mr7EqnYJこういうやり方はダメですか?
0332nobodyさん
03/01/22 13:49ID:???で $hoge に cd12 があればその列の\nまでを $hogeに入れたいのですが
$hoge =~ s/.*(cd12.*)\n[.\n]*/$1/;
こうするしかないのでしょうか?
0336nobodyさん
03/01/22 14:39ID:???0337336
03/01/22 14:43ID:???で十分か。
cd12と聞くと、LINNの240万円のCDプレーヤーが頭に浮かぶわけだが
0339336
03/01/22 14:58ID:???あーこうか
0340336
03/01/22 15:00ID:???何度も失礼...
0342nobodyさん
03/01/22 17:04ID:0PCOHlDz$this=shift;
$this->{fdata}=<パッケージ名::IN>;
でいいの?
$this->{fdata}[$nline]
みたいにしてアクセスしたいんだけど・・・
これだとハッシュ値しか戻ってこない。
0343nobodyさん
03/01/22 17:04ID:???0344246
03/01/22 18:17ID:STZ5+DSpshiftjis "\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.
のようなエラーが出てしまいます。これはどういった意味なのでしょうか?
0345nobodyさん
03/01/22 18:23ID:???/(^.*key.*$)/$1/
じゃダメポ。
というのも、とあるテキスト書換えソフトでgrep出来たらいいなと。
0347nobodyさん
03/01/22 18:30ID:???ハッシュ変数に配列をそのまま格納する事はできません。
配列変数のリファレンスを格納するか
その都度、無名配列を作成し、そのリファレンスからアクセスしてください。
0348kazu
03/01/22 19:04ID:dkolKxk/携帯サイトをやっているのですが、
index.cgiとhtaccessで機種の特定を行い、それにあったトップページに自動転送するというシステムをやっております。
i-modeで接続した場合に、「サイトが移動しました」という表示が出ます。
これを解決する方法はないのでしょうか?
0350kazu
03/01/22 19:09ID:dkolKxk/0351nobodyさん
03/01/22 19:16ID:???index.cgi内で携帯ごとに違うページを表示するんじゃないかな。
index.cgi -> UA判別 -> UAに対応したページを出力。
>>348がやってる方法は、
携帯ごとにディレクトリを別にして、index.cgiでそれぞれのディレクトリに飛ばしてるんじゃないかな。
自分で書いたヤツじゃないとか中身を理解していないなら、そのCGIの配布元のURLを出した方がいいよ。
0352nobodyさん
03/01/22 19:23ID:???PCのブラウザだと http://〜/dirname ってすると http://〜/dirname/ になって
結果的に http://〜/dirname/index.htm に辿りつけるんだが、
携帯だとしてくれねえヤツもあるらしいぞ。
振り分け先の設定をチェック汁
0353質問です。
03/01/22 19:51ID:H1d15TWeんですが、うまくいきません。
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:
テスト
ソース自体が間違ってるのでしょうか? どなたか教えてください。
0355nobodyさん
03/01/22 20:04ID:NW1Un2Sy機種にあったトップページに転送するんじゃなかったのですか?
なんでそうなるんですか?
0356質問です。
03/01/22 20:35ID:H1d15TWeありがとうございます。
うまくいきました。\nとか\rとかの意味がいまだにわかりませんが、
調べたほうがいいのでしょうね。
とにかく助かりました。ありがとう!
0357nobodyさん
03/01/22 21:14ID:TWTRYmp3CGIって拡張子のファイル(web上の)を他人が見ることってできないのですか?
HTMLでもTXTでもJPGでも何でも普通ファイルの中身が返されますよね。
CGIの場合は実行結果しか絶対に返ってこないの?
0359nobodyさん
03/01/22 21:23ID:TWTRYmp3えっと、具体的にはどういう設定だとどうなるのですか?
0360nobodyさん
03/01/22 21:35ID:???CGI専用のディレクトリに入れていたり、CGIスクリプトとして実行するように設定された拡張子をつけていれば実行結果しか返されない。
それでもウェブサーバーを介さないでアクセスされたら覗かれるけどネ
0361nobodyさん
03/01/22 21:35ID:???AddHandler cgi-script .cgi
0365nobodyさん
03/01/22 21:43ID:TWTRYmp3WEBサーバーを通さないってことはFTPでってことですか?
かなり初心者なんですいません。
0366nobodyさん
03/01/22 21:45ID:???>WEBサーバーを通さないってことはFTPでってことですか?
など、そのサーバのファイルシステムに然るべき権限でアクセス出来るプログラムがあればいい。
0367nobodyさん
03/01/22 21:46ID:???> どの拡張子がCGIスクリプトとして実行すると決めておくのがサーバー設定ってことですか?
そう
> WEBサーバーを通さないってことはFTPでってことですか?
別に何でもいい。FTPじゃ無理だと思うが。
たとえばis○ebのようにセキュリティの甘いところはCGIスクリプトを使って他人のファイルを覗ける
0370nobodyさん
03/01/22 22:08ID:NkPjRdCpお前には課題だ。調べておけ。
suEXEC setuid ファイルの所有者 パーミッション
0371nobodyさん
03/01/22 22:11ID:???>>367の間違い?
それくらい知っているけど(^_^;)
共用サーバにも関わらずそれをやっていないからis○ebはセキュリティが甘いと言ったんだけど。
0374nobodyさん
03/01/22 22:42ID:TWTRYmp3>>373
そうなんですか?それすらもよくわからなくて。
ごめんなさい。
0375nobodyさん
03/01/23 00:46ID:???私の場合openが失敗したからといってスクリプトを終了させるわけ
には行かないので
if(open(IN,"temp.txt")){
opend lines
} else {
canto open lines
}
のようにしているのですが、
こういうことはしないのでしょうか?大丈夫でしょうか?
0378375
03/01/23 00:56ID:???376の方法もいいなとおもいました
0379nobodyさん
03/01/23 01:15ID:IkRppvEjクライアントからのデータをサーバに保存できさえすれば良いんですが。
0380nobodyさん
03/01/23 01:20ID:???送られてくる→&jcode'sjis2euc(\$mes)→内部処理
内部処理→&jcode'euc2sjis(\$mes)→送り返す
としても、半角はおかしくなってしまいます。
なにか解決方法はないでしょうか><
0382nobodyさん
03/01/23 01:56ID:8ePVO3RC2回同じことやれば半角スペースが2つ、3回なら3つって具合にどんどん増えてしまう。
なんで?
どうやったら回避できるの?
何か根本的なこと間違ってる?
0383nobodyさん
03/01/23 02:04ID:???そもそも「半角カナは文字化けするから使わないように」っていうのがネットの常識じゃなかったか?
2chみたいに、半角カナが堂々と使える掲示板のほうが特殊なのかもしれないぞ。
>>382
ソースきぼんぬ
0384380
03/01/23 02:19ID:/gwtZ2Vtありがとうございます!
\$ を * にしたらなりました
昔は*を使っていたのですが、\$のほうがいいとか、同義だと
かおもっていて、結果が違うとはおもいませんでした。
*$とうのもあるのですか?
私もまだまだ勉強不足ですね・・
ありがとうございました。
0385380
03/01/23 02:28ID:???今度は大丈夫かな
>>383
そうなんです。私も半角はいやなのですが、
携帯電話のチャットを作っているので、きってもきれない
関係なんです・・
掲示板で使えるところがあるので、どうにかがんばればできるんだろうなぁ
とか思ってやってました。
文字コードを変換しなければ問題はおこりにくいのかな
0386nobodyさん
03/01/23 02:37ID:???SJIS以外なら、エラーを返して書き込めないようにしている。
結果として、文字コードの変換処理を省略している。
PC向けならこれで、問題ないように思える。
基本的に、フォームページの文字コードでデータがPOSTされれば
変換処理はいらないと思う。
携帯の場合はどうなんだろう。。ちと気になる。。
0387nobodyさん
03/01/23 02:42ID:???携帯ならShiftJISだけで処理すればいいんでない?
半角カナOKな掲示板も、内部ではShiftJISだけで処理してるのがほとんどだよ。
0388nobodyさん
03/01/23 02:46ID:j5CbC/3T382です。ソースはかいつまむと
#!/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;
こんなんです。
これだけでもどんどんスペースが増えていきます。
なんででしょう?
0389380
03/01/23 02:49ID:???本来はshiftjisだけで処理したほうがよかったかもですね。
私の場合は、メッセージにIDや名前や発言があるので
それを切り分けたりとか、サーバー側がつくったメッセージを
くみあわせたりとかがあるので、つい、
サーバー側(UNIX+Apache)ではEUCで扱うようにクセがついています。
半角文字に関しては今のところうまく動いているので、
もしある程度出来上がったらiappliのお金がかかりにくいように
作ったチャットをここで公開しますね
0390nobodyさん
03/01/23 02:52ID:???かいつまみすぎてわからん。それだけ見れば異常はないけど、
配列の最初の要素にどういうものをいれているんだ?
print "$data[0]syori syuuryou";
とかでみてみた?
0391nobodyさん
03/01/23 03:17ID:j5CbC/3Tえっと私(382=388)へのレスということでいいですよね。
データの内容は会員リスト(氏名だとか住所だとか電話番号をカンマ区切りにしているもの)です。
拡張子はtxtですがためしにcsvとかでやっても同じでした。
data.txtのファイルをブラウザで見ると2つ目以降のデータの頭にどんどん半角スペースがくっついていくんです。
csvにした場合は2行目以降の1列目の各データの頭にスペースが付いていきます。
本当は配列に入れた後、追加だとか並べ替えだとかやりたいんですけどそれ以前の段階でつまづきました。
0392390
03/01/23 03:28ID:???改行コードの違いとかはだいじょうぶ
ファイルをどうやってみてるのかとかわかんないしなぁ
やまだ,東京345,99311
のだ,宮556,552211
見たいな感じなの?
0395nobodyさん
03/01/23 03:42ID:j5CbC/3T本当だ!
ありがとうございます。(^^)
凄い晴れやかな気分。半日苦しんだから。
でもなんだか恥ずかしくなってきた。
受け売りって言うかよそから拾ってきたものを見本に猿まねで訳もわからず作ってたから。
ところで何でこうなるんですか?
(by 382)
0396393
03/01/23 04:10ID:???調べてみたんだが、ダブルクォート中にリスト変数を記述すると、リストの中身が
展開されるそうな。そのとき区切り文字として特殊変数 $" が使われるんだけど、
この中身はデフォルトでは半角スペース。
例えば、各行が「うんこ」「ウンコ」「unko」のテキストファイルを読み込む。
@data = <FILE>;
すると、$data[0] は「うんこ\n」、$data[1] は「ウンコ\n」 などとなる。
これを間違ってた方法で書き出すと
print FILE "@data\n";
リストが展開され、「うんこ\n ウンコ\n unko\n\n」となる。
結果、2行目以降の先頭にスペースがついてしまったというわけ。
(@dataの後ろの\nが実は末尾にしか付いていないことにも注目)
リストの出力は print FILE @data; のようにダブルクォートせずに書こう。
0398nobodyさん
03/01/23 10:21ID:???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です。
八方塞がりの状況です。教えていただけませんでしょうか。
0400nobodyさん
03/01/23 11:13ID:xJWtHdWYmy %aaa;
my @bbb;
# それぞれになんか値を入れる動作する
return(%aaa,@bbb);
}
(%AAA,@BBB) = &hoge;
こうすると@BBBに値が入ってないんですけど、なぜでしょうか。
0401398
03/01/23 11:19ID:???mimew.plのパーミッションは644です。
apacheのログを見たところ、
Undefined subroutine &mimew::mimeencode
と表示されていました。
mimew.plにはmimeencodeが存在しています。
(コマンドラインからは実行されますし)
何か他にチェックするべき点はあるでしょうか。よろしくお願いします。
0402nobodyさん
03/01/23 11:21ID:???もしも、mimew.plが読み込まれていないと心配なら
eval ( require "mimew.pl" );
で、きちんと読み込まれているかチェックしてみたら
どうでせう?
>>399
0755にしなきゃいけないファイルを0644にしていたら問題だけど、
普通0644にするべきファイルを0755にしていても、問題じゃない
でそ?
0403nobodyさん
03/01/23 11:35ID:E5MYBiOXmy @AAA=&hoge;
%AAA=$AAA[0];
@BBB=$AAA[1];
0404398
03/01/23 11:56ID:???evalでチェックを行ったところ、
mimew.plはきちんと読み込まれていました。
しかし、あいかわらず
Undefined subroutine &mimew::mimeencode
と出力されています。
0405nobodyさん
03/01/23 11:59ID:???returnは値を1つしか返せないよ。
こういうときはリファレンス渡しにして、サブルーチン側で直接値を変更したほうが
いいかもしれない。
&hoge(\%aaa, \@bbb);
sub hoge {
my ($aref, $bref) = @_;
$aref->{hage} = "ccc";
$bref->[0] = "ddd";
}
0407nobodyさん
03/01/23 12:53ID:???1.作業用の配列を使いまわす事がある
2.分かり易いように名前を決めて、1つの項目しか入れない
場合によって、違うかもしれないけど、貴方はどっち派?
0409nobodyさん
03/01/23 13:13ID:nFHVv77n実験として次のソースを書いてみました。
ファイル名: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を実行しました。
そうしたところ、上手く作成できたので、今度は外部から試してみました。
そしたらやっぱり内部サーバエラーになってしまうんです。
どこがまずいのか分かりません。
乱文になってしまいましたが、どなたか私の間違いを
指摘して下さいませんか?よろしくお願いします。
0411nobodyさん
03/01/23 13:25ID:jz3+5dSUApacheにヘッダーを送れ。
print "Content-type:text/plain\n\nファイル作成しますた。\n";
0412409
03/01/23 13:28ID:???#!/usr/local/bin/perl
print "\r\n\r\n";
open(FILE,">>./1234.txt");
print FILE "0123456789\r\n";
close FILE;
というふうにしてみたんですが、今度はダウンロードしますか?の
ダイアログが出てきてしまいました。どうなってるんでしょうか?
0413nobodyさん
03/01/23 13:38ID:???PerlをCGIで動かす場合には、HTTPヘッダを出力する必要があります。
CGIで動かした時にHTTPヘッダがなければ、>>409のようにエラーで動きません。
それだけです。
0415nobodyさん
03/01/23 13:54ID:Ah3Ym1t7文字列中に
#1234(1234は3〜6桁の数字)
と有った場合、
<a href="http:/hoge.com/hoge/1234">#1234</a>
~~~~~ ~~~~~~~
#を外した数字↑ ↑元の文字列
と言う風に変換したいのですが、上手くできません。
どなたかご教授ください。
よろしくお願いします。
0417nobodyさん
03/01/23 14:33ID:???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";
0419nobodyさん
03/01/23 14:47ID:???補完
0420398
03/01/23 14:47ID:???出力バッファを吐き出すことと、
サブルーチンが見付からないこととはどのような関係があるのでしょうか。
$|=1;を加えてみましたが、結果はかわりませんでした。
ただ、気になるのですが、
$subject = mimeencode(jcode'jis($subject);
と呼び出した場合、
Undefined subroutine &該当コードが含まれているパッケージ名::mimeencode
とエラー出力されます。
mimew.plは正常に読み込んでいるようなのですが・・・。
0421398
03/01/23 14:52ID:???0422nobodyさん
03/01/23 15:03ID:Ah3Ym1t7ありがとうございました。
上手くいきました。
0425nobodyさん
03/01/23 15:21ID:???だから、なんでアホみたいにprint MAIL なんとか
でやるの?バッファリングするなっていわれてるのに
$mess にぜんぶメールいれといて
system (,"|/usr/sbin/sendmail -t -i , $mess);
かなんかでポンとやれよ。
ファイルハンドルの意味わかってんの?
0426398
03/01/23 15:28ID:???mimew.plを見たら、パッケージ名がMIMEと設定されていました。
呼び出しミスでした。お騒がせ致しました。
ただ、jcode.plの場合はrequireするだけで良かったって言う、理由が、よくわからないままです。
よろしければご教授ください。
0428nobodyさん
03/01/23 15:41ID:???あんたのmimew.plにmain'mimeencodeサブルーチンが欠けているか
main以外のパッケージ空間を使用しているからでしょ。。
0430nobodyさん
03/01/23 17:27ID:kDsUWLbm今回の問題にバッファリングは関係ない。closeしているから。
なんでも$|=1って書けばいいものじゃない。あほか。
0431nobodyさん
03/01/23 17:34ID:kDsUWLbmselect(MAIL); $| = 1; select(STDOUT);
こうするべき。この辺りはわかって言ってるんだよね?
0432409
03/01/23 18:06ID:???ありがとうございます。上手く動きました。
何度試してもずっと内部サーバエラーですが出力されていたのですが、
ブラウザを閉じてもう一度アドレスを入力したら動きました。
なんだかふに落ちないのですが、ひとまず動いたのでよしとします。
一時ファイルとかそんなのが問題になってるんでしょうかね?
0433nobodyさん
03/01/23 18:19ID:???0434nobodyさん
03/01/23 19:02ID:0ikp7K62解説書などを見ても意味がわかりません。
$su が最初に出てくる画面は何のアプリを使ってるのでしょうか?
0435nobodyさん
03/01/23 19:26ID:/BytM6mnLinux
FreeBSD
cygwin
0437nobodyさん
03/01/23 22:30ID:CHeIi8Oa制限かかってて見れないページがあるんですが、
自宅のwebサーバーを経由して、見れるようにする
方法ってないでしょうか?
0438nobodyさん
03/01/23 22:33ID:vGzRwfzk串じゃあかんの?
0439nobodyさん
03/01/23 22:42ID:JsPmMcCVどうすればよいのでしょうか?
$char = "ABcd";
何らかの処理
(例えば +10hさせる。)
↓
$char が QRst となる。
文字を取り出すのはやってみたんですが、
文字をずらすのがわかりませんでした。
--------------------------------
$char = "ABcd";
for ($i = 0; $i < length($char); $i++) {
$c = substr($char, $i, 1);
}
--------------------------------
0440nobodyさん
03/01/23 22:51ID:KCPQ5bMl$c += 10;
0442439
03/01/23 22:55ID:???ハンドル間違えました。
0443440
03/01/23 22:59ID:KCPQ5bMlを必要なだけ繰り返す。
0445nobodyさん
03/01/23 23:10ID:CHeIi8Oa串刺すとみれるんですか?
.pacのファイルを指定してプロキシ経由してるんですが、
その辺よく分からないので、よろしかったらご指導ください。。
0446貧乏パーラー
03/01/24 00:19ID:???俺も会社からちくり板見るれなくなって欲求不満だった。
だから某所のコード改造してから自作したよ。
これでもパーラーだからねピュアperlで作った簡単httpポートフォワーダだよ。
0447貧乏パーラー
03/01/24 00:20ID:???---この下から---
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
---この上まで----
0449nobodyさん
03/01/24 00:28ID:f7nkT00I$char="ABcd";
print pack("C*",(map { $_+10 } unpack("C*",join('',$char))));
別に1行でなくてもよいけれど、、、
0450貧乏パーラー
03/01/24 00:31ID:???上の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として試しても良し。
0451449
03/01/24 00:35ID:???を
$char
に訂正。
無意味だ欝
0452nobodyさん
03/01/24 00:38ID:???my $char = "ABcd";
$char =~ s/(\w)/chr(ord($1) + 0x10)/ge;
print $char; # > QRst
私はこういう方法で偶に変換してます。。
0453nobodyさん
03/01/24 01:06ID:???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
こんなのが表示されたんですがどうすればよいでしょうか?
0454nobodyさん
03/01/24 01:12ID:???ちゃんとローカルでテストしましょう。
そのエラーメッセージじゃ何もわからんよ。
まずはローカルでテストできる環境を作って、そこでエラーメッセージをちゃんと吐かせる。
そしてエラーメッセージの意味を調べて、スクリプトを修正する。
0455439
03/01/24 01:13ID:???ありがとうございます。
今までネットで探していたら、
452さんも使われているchr関数を見つけましたので
一端ordで変換してchrで戻してみました。
449さんも使われているpackも見てたのですが、
ちょと私にはまだ難しかったみたいです(^^;
0457nobodyさん
03/01/24 01:19ID:???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.
どうか指名しているドキュメントのアドミニストレーターと連絡を取って、そして(彼・それ)らにエラーが起こった時とエラーを起こしたかもしれないあなたがしたかもしれない何でも知らせてください。
0459nobodyさん
03/01/24 01:34ID:???あんたのパソコン。
サーバー上でCGIのテストするな。
後は検索して調べな。
説明ページは探せばいくらでもある。
それ読んで分からないようなら、CGIの改造とか色々考えるな。
改造せずにそのまま設置しようとしてそのエラーなら、配布元の指示に従ってちゃんと行動してないって事。
とにかく書いてある文字を読め。
0461nobodyさん
03/01/24 09:10ID:???0462nobodyさん
03/01/24 14:56ID:Mw0EqohXread.cgiはcじゃなかったっけ
0463nobodyさん
03/01/24 15:21ID:8KdGKoGc★こんなサイト見つけました★
0464nobodyさん
03/01/24 15:49ID:???CGIが暴走するということはありえるでしょうか?
0467free se
03/01/24 16:04ID:???おまえらはどうだ?
0471nobodyさん
03/01/24 17:20ID:???0472nobodyさん
03/01/24 17:25ID:???簡単な物は音楽が鳴っていた方がいい。
複雑な物になると鳴ってない方がいい。
0473467
03/01/24 17:33ID:???よく考えると俺も472さんと一緒だな。
無音は気持ち悪くて、流石に嫌だけど。
0474nobodyさん
03/01/24 17:43ID:i/64hvW7このように表示されます。
下記のメールを送信しました。ありがとうございました。
--------------------------------------------------------------------------------
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からのメール」までを
消す(送信者に見えなくする)方法はありますか?
よろしくお願いします。
0475nobodyさん
03/01/24 17:53ID:???0478474
03/01/24 18:12ID:i/64hvW7すみません、どんな風に危ないんでしょうか?
非常に不安になってきたのでよければ詳しく教えてくれませんか??
0479nobodyさん
03/01/24 18:22ID:???0481nobodyさん
03/01/24 18:24ID:???0484nobodyさん
03/01/24 19:34ID:???ただ、Toを自分のメアドにしておいてもメールボムとか怖い。
0485474
03/01/24 19:43ID:i/64hvW7判断がつきません。wwwmailは「とほほ」にある
メール送信フォームを設置するためのソフトです。
危険でしょうか?
0486nobodyさん
03/01/24 20:01ID:???0487nobodyさん
03/01/24 20:05ID:???個人情報(自分のメアドとか)、パスワードとかが入ってるなら、それだけ消してソース出してみ。
ソース見せたくらいじゃどうってことないよ。
0488nobodyさん
03/01/24 20:13ID:QLwP0ckkたしか、XREA用に何かいじらなければならなかったような気がするのですが思い出せません。
どなたかご存知の方、ご教授願います。
0489nobodyさん
03/01/24 20:18ID:???xrea.com part28
http://pc.2ch.net/test/read.cgi/perl/1042433690/
こちらへどうぞ。
0491474
03/01/24 20:27ID: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';
0492474
03/01/24 20:28ID: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
0493474
03/01/24 20:29ID: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;
}
0494nobodyさん
03/01/24 20:30ID: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;
0495nobodyさん
03/01/24 20:31ID:i/64hvW7$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";}
0496nobodyさん
03/01/24 20:33ID: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) {
0497nobodyさん
03/01/24 20:35ID:i/64hvW7$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 が存在しません。");}
0498nobodyさん
03/01/24 20:36ID: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";
}
#
# エラーメッセージを出力して終了
#
0499nobodyさん
03/01/24 20:36ID:i/64hvW7local($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);}
長くて申し訳ないです。どうでしょうか?
0500nobodyさん
03/01/24 20:37ID:???0502nobodyさん
03/01/24 20:56ID:???ブラウザに表示される画面をどうにかしたいってことか?
0503474
03/01/24 21:12ID:i/64hvW7そうなんです。
送信しましたの画面で(この下は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からのメール」までを
消す(送信者に見えなくする)方法はありますか?
よろしくお願いします。
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");
?>
…で最後の行を色々見たものをコピペって試しています。
0505nobodyさん
03/01/24 21:44ID:???# ブラウザ画面に送信結果を書き出す
って行があるだろ。その下あたりを修正すりゃいい。つかPerl勉強してこい。
>>504
SHOW TABLESと DROP TABLEを繰り返しするのじゃダメ?
うまくいかないって言われても…
0506504
03/01/24 22:05ID:+KMlj8qB上に書いたので繋がらないので分からないんですよ。
mysql($database,"CREATE TABLE $table( no int not null AUTO_INCREMENT,
hoge varchar(100),PRIMARY KEY(no))");
でちゃんとテーブル作れるんですがね。
0509nobodyさん
03/01/24 23:43ID:???何度も繰り返しになるが、テストはローカルでやれ。
アップしてテストをするな。
0510504、506
03/01/24 23:57ID:???今となっては同感です。
だからこそ、サーバー上のを見つけて削除したいんです。
0511nobodyさん
03/01/25 00:18ID:???だから、消し方もローカルでテストしてやりなさいって。
まずはローカルで同じ様なデータ作って消すやり方探せばいいでしょ。
ローカルなら、他人への迷惑をあまり考えずに色々と手探りで試せるんだから。
それはやってるのか?
0513nobodyさん
03/01/25 00:28ID:???0514504、506、509
03/01/25 00:33ID:???サーバー上でしかできないので、サーバーにアップしてやるしかないのです。
0515nobodyさん
03/01/25 00:50ID:???一生、悩んでなさいってこった。以後放置願います>all
0516nobodyさん
03/01/25 00:52ID:???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/
0518ビビオパーラー
03/01/25 01:10ID:???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]");
}
かな?
0519474
03/01/25 01:48ID:YsIz1kts>>508
助言を見まして検索したところ
&jcode'convert(*subject, "jis");
$mailhead = "To: $mailto\n";
# if ($FORM{'EMAIL'} ne "(unknown)") {
# $mailhead .= "Cc: $FORM{'EMAIL'}\n";
# }
こうすれば問題ないですか?
なんとなくまずいのはわかるのですが
良ければ詳しく教えていただけますか?
0521nobodyさん
03/01/25 13:31ID:???Webデータの取得にLWP::Simpleのget()を使いたいのですけど、
このモジュールはcgiを許可しているフリーのhosting service
には入れてないことの方が多いのでしょうか? あるいは有料の
hosting serviceであれば入ってるでしょうか?
0523nobodyさん
03/01/25 17:23ID:???有料のトコなら管理者に頼めば入れてくれるかもしれないけど、
必要なモジュールは基本的には自分でインストールするもの
と考えたほうがいいよ。
http://search.cpan.org/author/GAAS/libwww-perl-5.69/
0525nobodyさん
03/01/25 18:29ID:???ダミーのモジュールを入れておいて優先順位?
0527初心者です。
03/01/25 18:44ID:WHb7ynpfCGI.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ださないようにするためにはみなさんどうしてます?
0529nobodyさん
03/01/25 19:05ID:J+PAIJA/違う。比較演算子は未定義値に使ってはいけない。
file?form_name=
で呼ばれたら、$dataは'' (空文字列?)だけど、
file?hoge=fuga
で呼ばれたら、$dataはundefになる。
つまり、こう書いておけばいい。
$data = '' unless defined $data;
0530nobodyさん
03/01/25 19:18ID:???おまけ:
undef, '', 0 はifに入れてみるとはみんなFALSEになるんだけど、
違うものだと思え。
よくある間違いで、
if (! $name) { error('名前を入れてちょ'); }
これは、$nameを0にできない。こう書くべきだね。
if ($name eq '') { ... }
0532nobodyさん
03/01/25 19:19ID:???入れてみると、みんなFALSEになる
0534nobodyさん
03/01/25 20:04ID:???普通こうします。。
0536nobodyさん
03/01/25 20:30ID:TLIt72nGreturn(next);
ってできますか?
0538nobodyさん
03/01/25 20:51ID:???みたいな感じになるはずだ。
0539nobodyさん
03/01/25 21:05ID:TLIt72nG0540 521
03/01/26 04:49ID:???ことをしたいのですけど、LWP::Simpleモジュールを使わなくても
可能でしょうか?
0542nobodyさん
03/01/26 10:04ID:???ログインができないんです。
if ($USER_DATA[0] eq $PW) {
ログイン完了
}
else {
パスワードちがう
}
とこのようにしているんですが、パスワードが合っていても違うという画面が出てしまいます。
出力して調べてみましたが
もちろん、$USER_DATA[0]と$PWの値は一緒でした(調べたときは両方に'a'という文字列をいれた)。
・・・どうすれば、きちんとした分岐結果が出るでしょうか?
ifの使い方が間違っているんでしょうか
0546nobodyさん
03/01/26 11:44ID:P6Egn5Az文字に改装を加えて投稿するにはどうすれば良いのでしょうか。
タグは使用不可で、スクリプトはCOMCHATです。
もし板違いだったらすいません。
0548nobodyさん
03/01/26 12:18ID:P6Egn5Az他の常連さんが成功してるみたいなので。。
0550nobodyさん
03/01/26 12:30ID:P6Egn5Azあまり喋らないので、気まずい...
0551nobodyさん
03/01/26 12:47ID:zx28i3UHhttp://ginrai.hp.infoseek.co.jp/
0552nobodyさん
03/01/26 12:58ID:10NDG8/sなんでもかんでもダブルクオートで囲むのはよろしくない。
それに、今はそれは全然関係ない。
>>542
自分が問題だと思っている部分だけじゃなくて、全体を出してみろ。
0553nobodyさん
03/01/26 16:22ID:???0554nobodyさん
03/01/26 17:09ID:???時間を決めて実行するための仕組み。
専用レンタルサーバとかじゃないと使えないから気にしなくていい。
スレ的には、「ある時間にCGIを実行したいんだけど」な気がするから、
「CGIが読み込まれたときに時間をチェックして実行するかどうか決めろ」
0555nobodyさん
03/01/26 17:56ID:lX4NK7pu0556nobodyさん
03/01/26 18:44ID:bvYo1DgEそもそもCGI使えないだろ
0558nobodyさん
03/01/26 22:37ID:???0560nobodyさん
03/01/26 23:30ID:2o0R3o6+小数点以下切捨てということで、
$tax = int($5*$total/100);
という感じでやっているのですが、
小数点以下四捨五入で・・・とするにはどうしたらいいのでしょうか?
初歩的な質問ですいません・・・。
0563560
03/01/26 23:47ID:???ありがとうございます!!!
$tax = int(($total * 0.05) + 0.5);
↑ちなみにこの2重括弧はやっぱり付けた方がいいんですか?
$tax = int($total * 0.05 + 0.5);
だけだとだめですか?
0566560
03/01/26 23:56ID:???0.5足して切り捨て、いわれれば納得!!!
つーか、最初の書き方変でしたね。
$tax = int($5*$total/100);
$5ってなんだ・・・(w
どうもありがとうございました。
0568nobodyさん
03/01/27 05:26ID:???>がついてる文章を<BLOCKQUOTE>で括りたいんですが、
$message =~ s/a(.*)\n/<blockquote>$1<\/blockquote>/g;
とすると、
aあいうえお
aかきくけこ
さしすせそ
が
<BLOCKQUOTE>あいうえお</BLOCKQUOTE>
<BLOCKQUOTE>かきくけこ</BLOCKQUOTE>
さしすせそ
になってしまいます。
<BLOCKQUOTE>あいうえお<BR>
かきくけこ</BLOCKQUOTE>
さしすせそ
にする方法と、aじゃなくて、>で出来る方法(>を使うとなぜかエラーが出ます)
を教えてください。
0569568
03/01/27 05:27ID:???あ、この方法の欠点見付けました。
>で始まる行でも、改行してなかったら引用と認識しませんね。
>で始まる行の後に、文章を書かない事はないと思いますが、万が一のために、\nがなくてもOKなようにしたいんですが。
0570568
03/01/27 06:31ID:???>の個数が一個減るたびにその直前に</P></BLOCKQUOTE>をつける、でいいんでしょうかね。
0571nobodyさん
03/01/27 07:42ID:x/t6q6bL2.先読みを利用して最後の引用符の行に</BLOCKQUOTE>を追加
3.その他の引用符をすべて消去
http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html
0572nobodyさん
03/01/27 08:21ID:Npl77MmW本日23:00時より祭りを開催いたします。
是非、参加下さいます様、お願いします。
携帯PHS
迷惑メールサイト一斉訪問お祭り開催
http://jbbs.shitaraba.com/news/bbs/read.cgi?BBS=853&KEY=1043335260
-------------------------------------------
0576bloom
03/01/27 08:53ID:2qTkpcb70577nobodyさん
03/01/27 15:48ID:???モジュールは自分で鯖にインストールしないといけないのでしょうか?
例えばLWPなどは一般的にどのような手順を踏めば使えるのでしょうか。
0579nobodyさん
03/01/27 16:11ID:x/t6q6bLこれが理解出来れば後は余裕かと
$message =~ s|>([^>\n]+)(\n*)(?!>)([^>]+)$|$1</AA>$2$3|s;
>577
場所によるけど良いレンタル鯖だとメジャーなモジュールは
インストール済みだったりする
http://www.zdnet.co.jp/help/tips/linux/l0495.html
0580577
03/01/27 16:21ID:???ありがとうございます。
>前も来てなかった?
もし過去ログにあったなら見逃してました、すみません。
試してみて、また分からなくなったら来ます。
その時もよろしくお願いします。
0581nobodyさん
03/01/27 16:44ID:???LWPのインストールはPerlと関係ないのでもう来ないでください。
0582nobodyさん
03/01/27 17:00ID:???どなたか改造するポイントを教えてください。
因みに使っているバージョンは
ttp://mitinoku.jp/script/12ch_2.02.lzh
これです。
bbs.cgiというファイルを改造すればいいみたいです。
動作は、等幅チェックボタンをONにして書き込むと
<tt>「書き込み内容」</tt>
と、こんな風に<tt>タグでカキコの内容をはさむようにしたいです。
では、宜しくお願いいたしますです・・・。
0583582
03/01/27 17:04ID:???↓書き込みフォームの等幅チェック部分
等幅<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;}
0584nobodyさん
03/01/27 17:05ID:???【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
0586nobodyさん
03/01/27 18:01ID:???どなたか分かる方いらっしゃいましたら教えてください。
0587nobodyさん
03/01/27 18:42ID:KZuCQWmj0588nobodyさん
03/01/27 21:32ID:???2バイト文字の処理を行っていないから?
とにかく >>1 から始めよ。
>>587
レスの半分近くが誘導になる悪寒ガクガクブルブル
0589nobodyさん
03/01/27 21:46ID:???の[0-9]+、ようするにその部分に入る数字を
$renoって変数に格納するにはどうしたら?
0590nobodyさん
03/01/27 21:49ID:o8/ytwxU0592nobodyさん
03/01/27 21:52ID:???某有名所のスクリプトと比べると30%ほど速いみたいだけど…
評価してもらえるかな…?
改善点とか、悪いところとか…。
初期値は $old です…。
ドキドキ
$i = 0;
$new = "";
foreach $n (reverse(split //, $old)){
$n .= "," unless ($i % 3);
$new = $n . $txt;
$i ++;
}
$new =~ s/,$//;
0596nobodyさん
03/01/27 22:18ID:???0597腐れ厨房(゚腐゚)
03/01/27 22:58ID:9+vb6fjVんで本題なんですけどhtmlファイルの中にポストボタンがあてcurlでポストすると302 foundのhtmlが出力されんです。そん中に書いてあるURLを今度はgetするとちゃんと希望したhtmlが入手できんですけどこれどゆ仕組みですか?
302foundのリンク先をブラウザが読んで飛んでんでしょか?それともヘダにそゆ内緒の跳び先が書いてあんでしょか?ヘダ見たけどごく普通だたと思うんですけど。
0598f
03/01/27 23:00ID:???●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
24時間受付 090−8505−3086
URL http://www.h5.dion.ne.jp/~grobal/
メール [email protected]
グローバル探偵事務局
$old = 1225678901;
while($old =~ s/(\d{1,3}?)$//){ unshift(@_,$&); };
print join(',',@_);
ちゅうのはカコ悪いか(w
>>597
Apacheの仕組みを覚えれ。
0601nobodyさん
03/01/28 00:35ID:???ここがPerlメモ
3桁ごとのカンマはこれが一番シンプルじゃねーかな。
0603g
03/01/28 04:31ID:QDc4rCifスラッシュの反対向きのやつってどうやって入力するのですか?
それらしきキーを押してるのに「\」が出てきます。
誰か教えてください。
0604g
03/01/28 04:54ID:QDc4rCifフォントを変えるとできました。
お騒がせしました。
0605nobodyさん
03/01/28 06:37ID:???あまり詳しくは言えないので非常に申し訳ないのですが、
ある2つのcgiをWin98(Celeron500)+Apache2+ActivePerl5.8で動かしていて全く問題がなかったのですが、
Win2000(Celeron500)で同じサーバ構成を作り(たぶん)稼動させた所、
1つは非常に快適に動作し、1つは動かないに等しい程おそくなってしまいました。
CGIを自分でかけないので分からない、というのがすでに問題なのですが、
こう言ったことは起こりうると推測出来るでしょうか?
サーバの構築ミスとかも有るかもしれません、、、。
ご教授頂ければ幸いです、、、、。
0606592
03/01/28 06:47ID:???すまそ
0607腐れ厨房(゚腐゚)
03/01/28 07:15ID:vWtuYxkUなるホドです。んでそれをブラウザはどやて認識してんですか?
あよくよくヘダ見たら302fondの時「Location: http://hoge.com/hoge.html」とあたです。これでしょか?
0609nobodyさん
03/01/28 09:19ID:???起こりうる可能性はいくらでもありますね
ソフトウェア的な設定ミスから
ハードウェアやネットワークの障害などなど
ひとまず順を追って用意した環境が間違いないか確認しましょう
>>607
まずは日本語を(ry
0610605
03/01/28 10:05ID:???レスありがとうございます。
そうですね、おちついて順をおってもう一度やってみます。
CGIのプログラムを外注に出しているので、
「おい動かなかったぞ!」と文句つけてみたものの
自分の設定ミスでしたという訳にもいかず(w
ただもともと動いていたCGIなので、どちらかといえば自分の設定ミスの方が
ありえるかな?と、その可能性をあたってみたかったという所です。
いやまったくお恥ずかしい話なんですが。
0611nobodyさん
03/01/28 10:42ID:???0613nobodyさん
03/01/28 15:26ID:???0614腐れ厨房(゚腐゚)
03/01/28 16:53ID:vWtuYxkUんな難解なヘンテコ文章読むの強要する低脳さんです。乞食が「このくらいの寒さひもじさなんだお前ら根性なし。」と騒いでるみたいです。
ところですべての文字列にマチさしたいんですけど
([.]|[^.])*?
てヤてんですけどカコとパイプだらけでカコ悪いです。もちょとスマトな方法ないですか?
全能な正規表現
(??{ code })
(?{ code })
これ試してみましたけどなんかダメでしたです。Perl5.8です。
0615nobodyさん
03/01/28 17:02ID:???.*じゃ駄目なのか?
あと、HTTPについては、http://www.studyinghttp.net/
日本語だから読めるでしょ?
とにかく、日本語を書くように。
0616nobodyさん
03/01/28 17:08ID:oYLjlQQn.* ということではなくて?
あとLWP::UserAgentはredirectの解決もしてくれるから便利だよ。
curlはよくしらないけど。
0617nobodyさん
03/01/28 17:09ID:oYLjlQQn0618腐れ厨房(゚腐゚)
03/01/28 17:20ID:vWtuYxkUあとLWPは何度やてもうまく逝かなかたんで諦めましたです。curlはwgetライクで使い安いです。
0619nobodyさん
03/01/28 17:39ID:???荒らし←どうせ2chだろ。
氏ね
0620nobodyさん
03/01/28 17:48ID:???/.*/s
0622けんすう ◆mTj9hjLz9w
03/01/28 19:22ID:???0623nobodyさん
03/01/28 19:46ID:wCME9ZCuopen(FILEB,"/var/tmp/b");
while ($linea=<FILEA>) {
while ($lineb=<FILEB>){
if ( $linea eq $lineb ){
処理・・・
}
}
見たいな事ってできないんでしょうか?
上記のコードだと FILEAのループが
1行分で終了してしまうのですが・・
0626nobodyさん
03/01/28 19:57ID:wCME9ZCuほぅほぅ。
とにかく623のコードじゃダメなわけね。
なんでダメなんだろ?理由がわからない。
0627nobodyさん
03/01/28 20:01ID:???ファイルハンドルからのデータ取得は、一度最後まで行ったらseekしないと戻らないから。
0628nobodyさん
03/01/28 20:07ID:???なるほど!!
じゃぁ1個目のWhile文のなかでFILEBをOPENするか、Seekで先頭にもどすかすれば
だいじょうぶかな?
こんど試してみます。今、環境がないんで。
0629nobodyさん
03/01/28 20:07ID:VjdgexrL一個目のwhile抜けた後でseek FILEB,0,0でもすれば?
0630腐れ厨房(゚腐゚)
03/01/28 20:53ID:EPPQeVDF僕の環境だとそれで逝けましたです。なんかネストしたらシクしないて不良品てカンジイです。
>>622
僕です。
0631nobodyさん
03/01/28 20:57ID:???フォームのサブミットボタンに表示させる文字って
VALUE=" "に書くやんかぁ?
でボタンにダブルクォート自体を表示させたい場合ってどうするん?
どうするん?
どうなん?
value='"こんなん"'
0634nobodyさん
03/01/28 21:08ID:???http://tohoho.wakusei.ne.jp/html/char.htm
0635nobodyさん
03/01/28 21:12ID:???ほぉー!
なるほど。
いやぁ実はPerlでCGI作ってて、フォームで入力してもらった文字列を
表示させる部分があるんですが、そのまんま表示してるんで < とか ”とか
入力されたら困ってたんですよね。
ほー!
こういうのを自動でチェック、変換してくれるよかモジュール知らんですか?
0638nobodyさん
03/01/28 23:22ID:???637の方法以外に \" \'
0639nobodyさん
03/01/28 23:26ID:0+yLIxs10640nobodyさん
03/01/28 23:28ID:???#!/usr/bin/perl
print"Content-type:text/html\n\n";
print<<EOF;
<html>
<body>
あああ
</body>
</html>
EOF
0641nobodyさん
03/01/28 23:38ID:6cWKDFOV#!/usr/bin/perl
→
#!/usr/local/bin/perl
にしてみた?
0644640
03/01/28 23:49ID:???サーバーは#!/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
だと動きません。
0645nobodyさん
03/01/28 23:50ID:???の次の行に
;
とか。
改行コードがおかしいとか。
0648640
03/01/28 23:54ID:???知りませんでした。
0649nobodyさん
03/01/29 00:07ID:???それはPerlの構文的にヘンだなぁ。(俺が知らないだけかもしれんが)
ヒアドキュメントの終端文字列は << "EOF"; みたいにダブルクオートで括ったほうがいいよ。
0650640
03/01/29 00:13ID:???おぉ!!
<<"EOF";にしたら
最後の行に";"を入れなくても動きました!
基本的な事ですがかなり勉強になりました。
っていうか今まで全然プログラムが動かなかったのもこのせいか・・・
0651nobodyさん
03/01/29 00:13ID:???Internal Server Error ってのはCGIからの出力が来ないときにブラウザが出す
エラーだから、これを書かれても根本的な原因は一切分からないんだよ。
コマンドラインで実行させた結果を書いてくれるとすぐ分かる。
たとえばこんなの。(うちでは最後の行に ; をつけたらこう出た)
Can't find string terminator "EOF;" anywhere before EOF at test.cgi line 3.
0652651
03/01/29 00:17ID:???まあいいか。
0653nobodyさん
03/01/29 00:39ID:???0656nobodyさん
03/01/29 01:29ID:???使って掲示板くらいは1から自分で作れるレベルになったのですが、
まだ色々無駄があったりすると思うのです。
それで、コーディングが奇麗な、参考になる(初心者にも比較的読み
やすい)スクリプトは、どこかに公開されてないでしょうか?
0657nobodyさん
03/01/29 02:51ID:???0658nobodyさん
03/01/29 03:04ID:HsIeKX/p下記の様にそれぞれの変数に、同じ文字列を連結して
$a.='<table border="0">';
$b.='<table border="0">';
途中で処理が加わり$a,$bに違う値が連結され・・・
最後に下記の様に連結して締めようかと思います。
$a.='</table>';
$b.='</table>';
質問というのは同じ文字列を違う変数連結する場合、
1行にできないのかという事です。
($b,$a).='<table border="0">'; #イメージ・・・$bにだけ連結して駄目でしたが・・・
0659nobodyさん
03/01/29 03:30ID:KC7FDxMH期待してる回答とは違うとは思うが
map {$_ .= '<table>'} ($stringA,$stringB);
とか。
あと、$a,$bは普段から使うの避けといた方がいいかもね。
sortで使うから。
0660nobodyさん
03/01/29 09:25ID:???>1.スクリプトが冗長だから省略するのに慣れてる人には読みにくい
>2.メモリの利用効率が悪く、スクリプトも速くないからサーバに負荷をかける
>3.CGIは起動コストがかかるのでHTMLファイルを生成した方がよい
メモリの利用効率というのは、スクリプト書く時に
どういうことに気をつければ良いのでしょう?
掲示板なんかだと、出力は極力HTMLファイルとして細かに保存していった方が良いのでしょうか?
0661nobodyさん
03/01/29 09:41ID:zyXgtkRr0662nobodyさん
03/01/29 11:16ID:tPWI6izk>1.スクリプトが冗長だから省略するのに慣れてる人には読みにくい
>2.メモリの利用効率が悪く、スクリプトも速くないからサーバに負荷をかける
>3.CGIは起動コストがかかるのでHTMLファイルを生成した方がよい
↑ほんと難癖だなw
1.ある程度一般的な書き方だと思うし、もともとperlは制約が少ないんだから仕方ないべ。単に自分の書き方と違うから気に食わないだけだろw
2.ソースは?w
3.馬鹿の一つ覚えだな。
0663nobodyさん
03/01/29 12:34ID:???http://pc2.2ch.net/test/read.cgi/php/997199513/96
0664nobodyさん
03/01/29 13:01ID:22PcLDQjなるほど、なんとなくすっきりしました。
もっと一般的な簡単な方法があるのかなと思っておりました。
$aはたまに使ってますね・・・
気をつけます。
0665nobodyさん
03/01/29 13:28ID:???0666nobodyさん
03/01/29 13:31ID:???0668nobodyさん
03/01/29 16:54ID:XF7MERR2FTPソフトなどで作成したファイルを削除・変更しようとしても
権限がなくて実行ができなくなってしまいます。
ファイルを新規作成するときに何か特別な処理が必要なのでしょうか
もちろん調べまくったのですが原因がよくわからないのです。
よろしければ教えていただけないでしょうか?
0669nobodyさん
03/01/29 16:59ID:19DeFoXEファイルの所有者がnobodyとかapacheとかwwwとか、
とにかく自分のものではない場合CGIで作ったファイルはCGIで削除しないといけません。
0670nobodyさん
03/01/29 17:05ID:v+6haFSnif (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";
}
この結果、
ファイルを開きました。
ファイルをロックできません。
になりました。
0672nobodyさん
03/01/29 17:14ID:19DeFoXE$LOCK_EX = 2;
が無い可能性大。
または、flock(MBOX,2)でどうよ
0674670
03/01/29 17:20ID:???スレ汚しすまそ
0676nobodyさん
03/01/29 17:27ID:XF7MERR2全削除のCGIでもいそいそと作成します
0677nobodyさん
03/01/29 18:00ID:???use Fcntl qw(:DEFAULT :flock);
flock(FILE,LOCK_EX);
な。
LOCK_EXはおおえす依存だから、シソボルはインポートするのが良い。
0678nobodyさん
03/01/29 18:16ID:zyXgtkRr0679nobodyさん
03/01/29 22:35ID:???$bufferという変数に"./hoge.dat"みたいな文字列を渡したのですが、
open(IN, "$buffer");
とやっても上手く開いてくれません
0680nobodyさん
03/01/29 23:07ID:???環境変数なら %ENV、
コマンドライン引数なら @ARGV、
標準入力なら<STDIN>
お好きなのをどうぞ。
0681貧乏パーラー
03/01/29 23:08ID:???シンプル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に自分の携帯メルアド入れとくこと
0682nobodyさん
03/01/29 23:10ID:???それだけじゃ分からんよ……
「外部」ってどこ?
「上手く開かない」って、どう上手く開かないの?
エラーが出てるならその内容も書いて欲スィ。
(Internal Server Error は書いても無駄なのでよろしこ)
0683nobodyさん
03/01/29 23:34ID:Fxyvk81T文字コードの変換のプログラムをいじくってたら
&jcode'sjis2jis(*value);
↑こんなのあったんですが、これってどういう意味ですか?
必要な情報が少ないかもしれませんがよろしくおねがいします。
0684nobodyさん
03/01/29 23:40ID:???http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-3
0685679
03/01/29 23:41ID:???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"
0686nobodyさん
03/01/29 23:42ID:???0690nobodyさん
03/01/29 23:55ID:???FLASHからのCGI呼び出しがいまいちよくわかんないけど、
GETメソッドで来てるってことはない?
そのソースだとPOSTでしか受け取れないよ。
$ENV{REQUEST_METHOD} の中身はどうなってる?
0691679
03/01/30 00:08ID:???やってみたのですが相変わらず何も返ってきませんでした…。
>>690
POSTで送りました、$ENV{REQUEST_METHOD}の中身もPOSTになっていました。
0692nobodyさん
03/01/30 00:18ID:???>myDataの中身は空っぽでmyBufferの中身は"./hoge.dat"という文字列でした。
>print "myData=$toFlash&myBuffer=$buffer";
$bufferの内容はカラだったの?
0693nobodyさん
03/01/30 00:31ID:???なら、
(undef, $buffer) = split(/=/, $buffer, 2);
かな。
Flashの仕様が判らないんで、すまそ。
(そうだとしたら、きちんと処理した方がいいと思う。)
0694679
03/01/30 01:25ID:???>>693
$bufferの内容:./hoge.dat
です。
すみません、実はCGIは勉強し始めてまだ数日なので基礎からなっていません。
もう少し自分でなんとかしてみます。
暫くは適当な値を送ってそれをCGIでif(あればcase)で判定し
その中に直接ファイル名を書いておきます。
(これだとファイルを加えたり名前を変えるたびにPerlを書き換えないといけないのですが・・・)
0695nobodyさん
03/01/30 01:28ID:???0696nobodyさん
03/01/30 01:37ID:???0697nobodyさん
03/01/30 06:56ID:???(>>695,696はそれが言いたいはず)
表示して確認するときは、前後に " なんかをつけてみるといいかも。
非表示文字がついてるかもしれないから、length で長さを表示して
見た目の長さと一致するか確認するという手もある。
0698nobodyさん
03/01/30 07:02ID:???として、$bufferと比較してみては
if($tmp eq $buffer){print "OK<br>";}
else{print "NG<br>";}
0700nobodyさん
03/01/30 14:28ID: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 です。
0701nobodyさん
03/01/30 14:45ID:???0702700
03/01/30 18:34ID:tRX1dMh1それだと $DEDOT{$dedot} っていう「文字列」にしかならんのでは...
私の書き方もアレでしたが、%DEDOT の $dedot の値で置き換えたいわけで....
0703679
03/01/30 18:46ID:???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";
とすることで正常にファイルを読み込むことが出来ました。
本当にどうもありがとうございました。
0704nobodyさん
03/01/30 20:53ID:XHYONXXPCGIで行ってる処理が重すぎて処理が終わるまでに
ブラウザがタイムアウトしてしまいます。
そのためブラウザがタイムアウトしないように、
CGIで処理をしている間、ブラウザに30秒に1回データを送るとか
そんな方法でブラウザがタイムアウトするのを防げないですか?
0706nobodyさん
03/01/30 21:01ID:???処理が重いところってsystem関数でOSのコマンドを実行してて、
この1回のsystem関数を実行してる間にブラウザがタイムアウトするんです。
で、system関数でOSコマンド動かしながら同時にブラウザにデータ送れますか?
わかんないね!
0708nobodyさん
03/01/30 23:30ID:???$hashname="myhash";
$keyval="key1";
%myhash=( key1=>"key1value",);
$val = "${$hashname}{$keyval}\n";
print ":$val";
で
:key1val
と表示されたがこれじゃダメなのか?
0709nobodyさん
03/01/30 23:54ID:???シンボリックリファレンスを使いたいっていうことだね。
まず、これを理解しろ。
$a = 'DEDOT';
${$a}{key} = 1;
print $DEDOT{key};
で、本題に戻ると、$dedotが正体不明なんだけど、
$avs[$i] =~ s/^###(.+)_PROCESSING$/${$1}{lc $1}/;
もしかしてこうしたいとか?激しく意味不明だけど
0710nobodyさん
03/01/30 23:56ID:???それより気になるのがその処理内容なんだが……。
1つのハッシュに1つのキーしか入れないのでは、ハッシュの意味がないと思うんだけど。
あくまで例としてなら別にいいんだが、そうじゃないなら処理内容を見直したほうがいいかもよ。
日本語訳も記録して、日英かかわらず全ての投稿を母国語で閲覧でき、コミュニ
ケートできる、というような感じのものです。
で、掲示板スクリプト自体は簡単にできるのですが、やはり翻訳がネックとなって
います。自分で翻訳ソフト用意して、高価なサーバーをレンタルしたり、自宅で
専用線でサーバー立てたりすると、かなりの金額がかかってしまうと思うのです
(非商用の個人サイト運営程度には)。
できれば、オンラインの翻訳サービスを自分のスクリプト内で利用したいのですが、
個人で翻訳機能だけレンタルすると幾らくらいかかるんでしょう? 無料でウェブ
翻訳、テキスト翻訳を公開しているところもありますが、そういう用途に
使うのは断り書きを出してもやはり不味いですかね?
0712nobodyさん
03/01/31 06:28ID:/ObcG1bj全然Perlと関係ないじゃん。
AMIKAIが翻訳サービスOEMの老舗だけど相当高そうだね。
自分で翻訳ソフト買ってもサーバとして使うにはライセンス料が
えらく高くなる。
結局のところ掲示板を見てもらうときにexcite翻訳を通して見てもらう
しかないのでは?掲示板に入る時にexcite翻訳へのリンクを作るとか。
自作CGIで勝手にexcite翻訳を使って翻訳することも可能だけど、
exciteの広告が表示されない利用方法は問題があるからやめた方がいい。
0713nobodyさん
03/01/31 07:08ID:6uKSmBl3★こんなサイト見つけました★
すいません。掲示板自体はperlで作っていたもので。
私の方では無論、広告やそのサイトのバナーを掲示板に表示させることは
まったく構わないのですが、向こうの方でそういう利用法を了承するかは、
やはり難かしいですかね。
翻訳は、例えばフリーのテキスト翻訳サービスを利用すると、form getを
使ってurlに投稿文を含ませたのを送って(trans.cgi?text=$body&lang=....)、
帰って来た翻訳をまたPERLで処理して出力する、という感じです。
単なる個人サイトなので、値段が年1万円を超えるようだと少し辛いです…
好きな様に利用できる本当にフリーの翻訳サイトは何処かに無いでしょうかね。
企業が無料公開しているようなのではなくて、教育機関や個人がGNUライセンスで
作ったような…
0715nobodyさん
03/01/31 07:58ID:0xsv6W8Z↑
これってアリ?
0716nobodyさん
03/01/31 08:00ID:/ObcG1bjhttp://www.excite.co.jp/world/agreement/
他のサービスでもたぶん同じ規約でしょう。
韓日混在の掲示板というのは見たことあるから、英日混在っていいうのも
探せばあるかも。そこがどういうやり方でやっているか。
技術的には易しいけど、翻訳サービスを安く利用するというのが難しそう。
0717712
03/01/31 08:05ID:???>本サービスによる翻訳結果を公表、引用、改変等により使用する
>ことはできません。
勿論、「営利目的」ではないですが、個人サイトの掲示板で使用するというのは
「私的利用」の範囲を超えるのか…個人利用する分にはCDコピーはいい(?)けど、
Napsterとかで公開するのはまずい、という感じに近いのか…。
0718712
03/01/31 08:29ID:???あ、スタンフォード大学にもありますね。
教育機関だし、どんなもんかな、、、
0720nobodyさん
03/01/31 10:13ID:NKGtpjno&を&に変換したいんですよ。
でもそうすると、♥とわざわざ入力したときに
&hearts;となってしまいハートとかを出せなくなってしまう。
どういう変換方法にすれば、
&→&
>→>
<→<
♥→♥(変換されない)
こういういい感じになるんでしょうか?
ちなみに2ちゃんはどうなってるんのかわかりますか?
よろしくお願いします。
0723nobodyさん
03/01/31 10:21ID:???0724720
03/01/31 10:31ID:???あまりにスマートな回答に感動しました。
私はまだまだ修行がたりないようです。
またどうしてもわからなくなったら相談させてください。
0726nobodyさん
03/01/31 10:46ID:???2chの特殊文字変換に翻弄されまくっている私。
0727nobodyさん
03/01/31 11:16ID:5ww5eJFmhttp://www.salut.ne.jp/bf/wmh/seminar/c010/index.php3
この
http://www.salut.ne.jp/bf/wmh/seminar/c010/enquetesys.txt
このプログラムを動かしたのだが、シンタックスえらーがでて困ってます。
0728720
03/01/31 11:17ID:???じゃぁつまり、
$value =~ s/&[^([a-zA-Z].;)]/&/g;
でOKですか?
セミコロンはエスケープしなくていいんですよね?
聞く前にとりあえず試してみます。
0729720
03/01/31 12:10ID:???動きません。
これでは
$value =~ s/&[^([a-zA-Z].;)]/&/g;
エラーになります
&^([a-zA-Z].;)
だとエラーになりませんが変換されないし・・・
さっぱりです。
0730720
03/01/31 12:12ID:NKGtpjno$value =~ s/&(?![\#0-9a-zA-Z]+;?)/&/g;
でどぉだ?
$value =~ s/&(?![\#0-9a-zA-Z]+;?)/&/g;
エスケープ忘れスマソ
冒頭でour ($aaa,$bbb)って感じで大量に
global variablesを列記してるのですけど、
これってやる意味あるのでしょうか?
書かなくてもStrict外せばscript自体は動くのですが。
0734720
03/01/31 12:37ID:???完璧です。泣ける。
すでに私には理解できない正規表現になっちゃってますが・・・。
勉強してきます。
ついでに、こういうときって、不明な実体参照をいれても
もちろんそのままになりますよね。
これは掲示板の仕様として正しいのでしょうか?
それともちゃんとした実体参照なのかどうかのチェックをいれてあげる
べきなのでしょうか。
ちょっとスレ違い気味の質問かも。
「data」に書きこむ際に「http://〜」の文字を送ると「http//〜」のように「:」が抜けて
「data」に書きこまれるんですがなんでかわかりません。どうしてでしょう?
0740nobodyさん
03/01/31 14:14ID:???そもそも "data" って何だ?ファイル名か?ファイルハンドルか?
ファイルハンドルは大文字使ったほうがいいぞ。
ただし DATA ファイルハンドルは予約されてるから注意な。
とりあえずソース晒せ。
0741nobodyさん
03/01/31 14:20ID:???0742nobodyさん
03/01/31 14:27ID:Q0yPIF7uMy Documentsのようにスペースの入ったフォルダのなかまでglobでファイル一覧を得ることはできないのでしょうか?
なるべくならワークディレクトリを移動せずに相対パスで指定したいのですが。
print glob("dc\\My Documents\\*");
0744nobodyさん
03/01/31 14:48ID:???やってみましたが、WinMEなのでプロパティにはDOS形式のファイル名が表記されていませんでした。
あと、深いディレクトリまで自動探索していくバックアップ系ツール(のヘタレ品)なので、globで得たディレクトリ名を自動的にDOS形式のファイル名に変換するというのも漏れの技術では少々難ありです…
なんでか、ロングファイル名でglobに引っかかるんですよね。
0746744
03/01/31 14:56ID:???globでdirコマンドのオプションが使えるということでしょうか?
dir /? してみたところ、 /p w a o s b l v 4 の各オプションがあるようですが、旧ファイル名で表示するオプションは見当たりませんでした…。
0747nobodyさん
03/01/31 14:56ID:6uKSmBl3★こんなサイト見つけました★
ああ、つまりglobal関数は極力控える方が良いコーディングになる
ということなんですかね。
0749nobodyさん
03/01/31 15:03ID:???globじゃなくて、readdirでディレクトリ内を取得してみたら?
これでディレクトリを移動する処理を組んだけど、スペース入りディレクトリも
ちゃんと辿っていけたよ。
0750744
03/01/31 15:05ID:???さっそく試してみます。ありが沌でした!
0751nobodyさん
03/01/31 20:42ID:???すべて変換して実態参照を無効化する。必要なものは元に戻す。ってすればいい。
つまり、
s/</</g;
s/>/>/g;
s/&/&/g;
s/♥/♥/g;
&hearts(セミコロンを忘れたもの)は無効なものとして処理しておけばいいじゃろう。
0753nobodyさん
03/01/31 21:09ID:???そのぐらい工夫してよ。。
一番簡単で安全だと思ったから書いたんだけどー、
自分では分からなかったから悔しいのかな?
$text =~ s/</</g;
$text =~ s/>/>/g;
$text =~ s/&/&/g;
@allow = qw(hearts ... ...);
foreach my $str (@allow) {
$text =~ s/&$str;/&$str;/;
}
0755nobodyさん
03/01/31 21:27ID:???0756727
03/01/31 21:49ID:5ww5eJFm&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
0757nobodyさん
03/01/31 22:14ID:1gqujj9yまたおまえか。馬鹿かお前は。
エラーが出たんならどんなエラーがさらさんとわからんだろうが。
本気で答えて欲しいのならそれなりの情報を出せこの厨房が。
0758nobodyさん
03/01/31 22:17ID:???確か、&はいっさいCGI側で変換しない方がいいよ、
っていう文章を読んだことがある気がしたんだけどソース失念。
もし<r;のように封じたい文字参照があれば
狙い打ちでエスケープすれば済むし。
0759not754
03/01/31 22:25ID:???my %refchr = qw(hearts & clubs & diams & spades &);
$text =~ s/&(\w+?);/($refchr{$1} or '&')."$1;"/ge;
もちっとマシな書き方があるかも。
>>756
エラーをコピペ。
500 Inter(略は無意味だからね。
0760751
03/01/31 22:37ID:???有効だと思うんだけどなぁー
>>759
&aaaaaみたいなものの&がそのまま残る可能性があるから、ブラウザに拡大解釈
される可能性が残るので良くない。
これに対処しようとすると、その方法だと異常にやることが増えて、>>751に書いた(変だけど)
単純な置換の方が圧倒的に速くなる、はず。
0761759
03/01/31 22:49ID:???あちらを立てればこちらが立たず。
0762nobodyさん
03/01/31 23:32ID:???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;
0763nobodyさん
03/01/31 23:34ID:???# 安全
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;
0764nobodyさん
03/02/01 01:11ID:PH6PPkmG俺今までInternalServerErrorがでると1行1行チェックしてた・・・・
誰かアホな俺に教えてくれ。。
0765nobodyさん
03/02/01 01:21ID:???スクリプトの記述ミス発見したところだけ
これ以上はしらん。後は自分で探してくれ。
誤:&ReadPlarse(*form);
正:&ReadParse(*form);
誤:print >> "END_OF_HTML";
正:print <<"END_OF_HTML";
0766nobodyさん
03/02/01 01:33ID:???http://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html
でも、ディレクトリ構造がばれるのでこあいです(w
♪なんだか & 処理が加熱しているねぇ、、、
そこまで何にも考えていなかった、、、スマソ
0768764
03/02/01 01:49ID:ofCxo2eiありがと〜
0769nobodyさん
03/02/01 02:27ID:???0770nobodyさん
03/02/01 11:59ID:E95fdX8sサブルーチンがなんたらかんたらと出ます。
なんでかな?
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 { ... }";
}
0771nobodyさん
03/02/01 12:16ID:0/Z0vaJ7http://pakopako.misty.ne.jp/enter.cgi?id=fdeai
0774nobodyさん
03/02/01 12:27ID:E95fdX8sやだ。
>>773
それはないです。
perl -c で実行してもOK。
CGIで起動した時もOK。
mod_perl環境の時にだけエラーでる。
0775nobodyさん
03/02/01 12:27ID:???やだ。
>>773
それはないです。
perl -c で実行してもOK。
CGIで起動した時もOK。
mod_perl環境の時にだけエラーでる。
0776nobodyさん
03/02/01 12:33ID:???0777nobodyさん
03/02/01 13:00ID:???0778nobodyさん
03/02/01 15:48ID:???$|=1;
としてバッファを・・・・
とか言われるのですが
そもそもバッファとはなんぞや?
と初心者の私は疑問をもつわけで・・
その辺をうまく説明していただけないでしょうか?
0779nobodyさん
03/02/01 15:51ID:???ダムだよ。ダム。
ちょろちょろとしか来ないデータをある程度貯めておいて一気に取り出したり、
速い流れを取りあえずせき止めておいて自分のペースでゆっくり処理したり。
そう言うことに使う入れ物だ。
0780nobodyさん
03/02/01 16:26ID:???「おーい、ちょっと倉庫からこけし100本持ってきてくれ。あ、一度に渡すのは1本でいいから」
倉庫に行って1本持って戻ってきて渡す。これを100回繰り返す。(バッファなし)
一旦倉庫から100本まとめて近くの机の上に持ってきて、そこから1本ずつ手渡す。(バッファあり)
この「近くの机の上」に相当するのがバッファ。
0781778
03/02/01 16:47ID:???プログラムを組む上で
バッファありとなしとでなんか変わりますか?
たとえばsysread()とread()で、
結局読み出すんなら一緒だと初心者の私は思ふ。
そこらへんプログラムを書く人はどのように
使い分ける必要があるんだろ?
0782nobodyさん
03/02/01 16:56ID:???こういうことに気をつけることをせずにプログラムを組んでいくと
いずれ、「遅いぜっ!ヴァニラアイス!」
という感じで、体中を串刺しにされる運命を辿ることになる。
0783nobodyさん
03/02/01 17:00ID:???速度が全然違うよ。
バッファなしなんて遅すぎて使い物にならない。
……っていうのは、8ビット時代のお話。
Perlの場合、既にプラットフォーム上(UNIXなりWinなり)でバッファリングしてくれて
いるので、Perl自身がバッファリングしなくてもそれほど体感的な差はないと思う。
でも、バッファの考え方自体は覚えておいたほうがいいと思うよ。
ファイルを一旦リストに読み込んで処理…なんてのもバッファ的なやり方だし。
0785nobodyさん
03/02/01 17:24ID:???しかたないからunbufferedにしちゃっているけど。
0786nobodyさん
03/02/01 17:56ID:???0787nobodyさん
03/02/01 18:17ID:???私も知りませんでした。
>>786
FileHandleモジュールで、いいでしょうか。
調べたところIO::Handle由来の機能っぽいですね。
(FileHandleのドキュメントに無かった…)
旧来の書き方なら flush FH; とかですか。
0788nobodyさん
03/02/01 18:49ID:???でも最近のFileHandleはIO::Fileを使うようになってるから、FileHandleでも使えるかも。
0792nobodyさん
03/02/01 21:32ID:DN2rKwgG掲示板スクリプトを自鯖にUPしたところ、bbs.cgiが表示されません。
真っ白です。なぜでしょうか?
ちなみに、管理モードに入るためのパスとログイン名入力のページは表示されます。
しかし、そこから、bbs.cgiに行っても、やはり真っ白です。
0793nobodyさん
03/02/01 21:40ID:???それにスレ違い。
ここはPerlのコーディングについてのスレッド。
0795nobodyさん
03/02/01 21:47ID:DN2rKwgGうっせぇぼけ。仕立てにでりゃ調子こいてんじゃねぇぞ。
答えれないだけだろ低スキル野郎。てめぇはチンカスほじって寝てろや。
0796nobodyさん
03/02/01 21:47ID:DN2rKwgG違げえよばーか。
0798b
03/02/01 22:18ID:???●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
24時間受付 090−8505−3086
URL http://www.h5.dion.ne.jp/~grobal/
メール [email protected]
グローバル探偵事務局
0799nobodyさん
03/02/01 22:29ID:???0801nobodyさん
03/02/01 23:03ID:???0805nobodyさん
03/02/01 23:42ID:???|. ノノソハ)))
(\リリ ´ー`)リ < ファイルテスト演算子
(ニ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バイト";
他にもいろいろあるんだけど、また必要になりそうだったら説明するね。
ややこしい説明はなるべく避けたいからね。。
じゃあ次回は、他の文字列処理関係の関数を勉強するよ
0807厨房
03/02/02 07:09ID:45tlaHB9$a = "aaa"; $b = "aa";
$a = ~s/^$b//;
print "$a\n";
これを実行すると
a
という実行結果になると思うのですがなぜか
4294967295
という実行結果が出ました。。 なぜでしょう?
perlのバージョンは
5.005_03 built for i386-freebsd
です。。
0808マリモーマ ◆r6PDGT6Xd2
03/02/02 07:20ID:m/KRriEG0809nobodyさん
03/02/02 07:23ID:???0811nobodyさん
03/02/02 09:20ID:mV23mEyNpackage MYLIBRARY;
sub new {
・・・
}
とか書きますよね。
んで、このソースにも、ちゃんと my のチェックをしたいので、use strict を書こうと思うんですが、
use strict;
package MYLIBRARY;
sub new {
・・・
}
とすべきか
package MYLIBRARY;
use strict;
sub new {
・・・
}
とすべきか迷ってます。
package よりも前に書くのと後に書くのはいっしょなんですか?
それとも、なんか違うんですか?
他の汎用ライブラリをお手本にする。
0813nobodyさん
03/02/02 14:10ID:pmlltvJ1my($a)=&hoge();
@b=@$a;
↑
sub hoge {
------
return(\@a);
}
0814nobodyさん
03/02/02 14:21ID:pmlltvJ10816nobodyさん
03/02/02 15:28ID:6TL1miGW>>814じゃないけど、
@b=@{hoge()}
ってことでしょ。
配列のコピーが発生するからリファレンスのまま行った方がいいような気がするが
0817nobodyさん
03/02/02 15:52ID:???$trip って入れてあるところにトリップ出せるような
機能のつけかた教えてください。
0819 e
03/02/02 16:07ID:???&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>";
}
}
0820nobodyさん
03/02/02 16:15ID:???0821727
03/02/02 21:03ID:ionxQd5/&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.
ってえらーがでました。
落してきたソフトを実行しただけなのになんでエラーがでるのでしょうか?
0823nobodyさん
03/02/02 21:10ID:lbpBAa4z$MAX = 2;
@NAME = ('a','b');
for($i=0;$i<$MAX;$i++){
open(@FILE, "./$NAME[$i].txt");
}
これだとエラーになってしまいました。
上記のコードのミス、もしくは何か他の方法がありましたらアドバイスお願いします
0825デフォルトの名無しさん
03/02/02 21:16ID:???エラーメッセージちゃんと理解するように努力しろよ。
英語分かんなかったら又厨房からやり直せ
0826nobodyさん
03/02/02 21:16ID:???>$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";
そして最後の改行も忘れずに。
しかもマルチだたし(哀)
0829nobodyさん
03/02/02 21:23ID:GIziK5Md今、
http://live.2ch.net/test/read.cgi/festival/1044106562/
このスレで
http://blatt.hp.infoseek.co.jp/
このサイトが大流行
みなさんも逝ってみてください。
よろしくおねがいします。
失礼しました。
0830nobodyさん
03/02/02 21:27ID:???どうすんの?
exit()なしで終り?
0831h
03/02/02 21:33ID:skZYA3IHローカルでCGIを動かしたところ,うまく動作しました。
で,インターネットテンポラリーファイルとクッキーを削除したら
クッキーが復活しません。
どうしたらいいですか?
0832nobodyさん
03/02/02 21:43ID:???日本語検索がうまくいきません。
if($test =~ /テスト/)
だとエラーになってしまいました。
jcodeというのもちゃんと入れました。
何かよい方法はないでしょうか?
0834826
03/02/02 21:56ID:???0835727
03/02/02 22:43ID:ionxQd5/ありがとうございました。
って言うか。コンパイルエラーが出るようなプログラムを
PERL講座って感じで公開しないで欲しいですよ、まったく。
0836nobodyさん
03/02/02 23:10ID:???講座である以上素人相手ではないのだから多少のミスはユーザ側で直して当然ということだろう。
実際、人の間違ったコードというのは課題としてよく使われる。
0837nobodyさん
03/02/02 23:30ID:???しかし、配布元http://www.salut.ne.jp/bf/wmh/seminar/にある
アフォ面http://www.salut.ne.jp/bf/wmh/seminar/img/KiryuuKiri.jpg見ると
単 に ヘ ボ な だ け
0840h
03/02/03 00:15ID:XAlS7Khuで,クッキーを削除したら クッキーが機能しません。
クッキーを復活させるにはどうしたらいいですか?
0841nobodyさん
03/02/03 00:30ID:???0842nobodyさん
03/02/03 01:53ID:???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
0843nobodyさん
03/02/03 07:12ID:JvqhDUOZ↓のようなモノを数人分をtableでまとめようとしています
--------------------
あああ 123回
いい 11回
うううう 50回
----------------------
このような感じで文字は左端にそろえてあり、
回数のほうは「回」の部分でそろえられています。
この場合どのようにしたら回数の部分を読み込めるのでしょうか?
まず、日本語検索をしようとしてもエラーになってしまい、
もし日本語検索がうまくいったとしてもそのあとはどうすればよいのかと、
試行錯誤しております。
何かアドバイスありましたらご教授お願いします
0844nobodyさん
03/02/03 07:46ID:???EUCで処理。
正規表現で抜き出す。
> もし日本語検索がうまくいったとしてもそのあとはどうすればよいのか
知らんよ、おまいの心は漏れにとどかんとよ。
0845デフォルトの名無しさん
03/02/03 07:56ID:???/(\d+)/; print $1,"\n";
0847nobodyさん
03/02/03 10:42ID:D3Jh7Sun自分は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で終わってる
ので、この間にある部分をすべてとるようにしたいのですが、可能ですか?
0850nobodyさん
03/02/03 12:01ID:D3Jh7Sun>>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;
どこがおかしいですか?お願いします☆
0851nobodyさん
03/02/03 12:11ID:???ご存じの方がいらっしゃいましたら教えてください。
0852nobodyさん
03/02/03 13:38ID:???perlに関する知識があるのにソースの意味がなんとなくわかる程度なのか?
おかしいのはチミの頭だYO
ちなみに漏れにはperlの知識は殆ど無い
print FILE $mail;
0853nobodyさん
03/02/03 13:44ID:???なにか良い方法はありますでしょうか?
今の自分のレベルでは、
$string = qq(「\\n」が含まれた任意の文字列。\nThe arbitrary character sequences in which '\\n' was contained.);
$length = scalar(map{1} unpack("C*",$string));
print "任意の文字列 \$string の総バイト数は $length です。\n";
くらいしか思い付きませんでした。
もうすこし賢い方法ってありますでしょうか?
0854nobodyさん
03/02/03 13:48ID:???0855nobodyさん
03/02/03 13:52ID:???print FILE @mail;
かな?
0856nobodyさん
03/02/03 14:10ID:???は嫌?
0857nobodyさん
03/02/03 16:08ID:???length() だと不都合あるの?
0858デフォルトの名無しさん
03/02/03 18:23ID:???0859nobodyさん
03/02/03 18:29ID:???もちろん改行コードとか全部込みで。
0860デフォルトの名無しさん
03/02/03 20:18ID:???0861nobodyさん
03/02/03 20:53ID:D3Jh7Sunそれどういうソース?
0862nobodyさん
03/02/03 22:05ID:gGc+aOjUカウンターみたいの作ってdos窓11個で
ロック処理無しで同時進行しても0にならないんですけど。
0863862
03/02/03 22:06ID:gGc+aOjU0864nobodyさん
03/02/03 22:08ID:???そら、一プロセスからなら何回ループさせようが呼び出しはシーケンシャルなのだから正常に処理されるだろう。
根本的に理解が足りてない予感。
0865nobodyさん
03/02/03 22:11ID:???よさげな解説みつけたからペタ
http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
0866862
03/02/03 22:58ID:gGc+aOjUwin98の時同じ事を試したら
見事に空ファイルができたと思ったのですが。
>>864-865
どうもありがとう。
0867nobodyさん
03/02/03 23:04ID:1c8W3GXA$line_num = @file;
以外で行数を取得する方法はありますか?
一行ずつ読み込んでカウンタを回すのもなしで
0869nobodyさん
03/02/03 23:16ID:???0870nobodyさん
03/02/03 23:19ID:???while (read(IN, my $buf, 8192)) {
$lines += ($buf =~ tr/\n//);
}
0871nobodyさん
03/02/03 23:30ID:???++ $count while (<FILE>);
0872nobodyさん
03/02/03 23:32ID:???++ $count while <STDIN>;
0876
03/02/04 00:17ID:rUOqBsxaですけど、一行づつループかけて、マッチした行以外をTMPファイルへ書き
込み。吐き出したデータを読み込んで、マスターデータに(>)上書き。
更新したい行をマスターデータに追加書き込み(>>)って方法でいいんでしょ
うか?行の順番はどうなってもよいです。
なんか、スマートな方法があったらご指導ください。
0877nobodyさん
03/02/04 00:36ID:???open(OUT, '>master.tmp');
while (IN) {
if () {
print OUT 新しいもの;
} else {
print OUT $_;
}
}
rename('master.tmp', 'master');
0879nobodyさん
03/02/04 00:38ID:???マルチするほどの事じゃないだろ。どうせ見るヤツかぶってるんだし。
100行くらいならメモリに入れておいてもいいんじゃない?
メモリの量が気になるなら読み込みつつ別ファイルに書き込み。
マッチしたらその行だけ変更して最後まで読み書きする。
最後にリネームして終わりだな。
つか今度マルチしたらグーで殴るからね
0881nobodyさん
03/02/04 01:02ID:Z72oZy+O$i = 1;
print "$i+1";
で'2'と出力したのですが。
0882nobodyさん
03/02/04 01:08ID:eARYiwGA0883nobodyさん
03/02/04 01:10ID:???print "@{[ $i + 1 ]}";
0885nobodyさん
03/02/04 01:55ID:???出力してみても何だかわかんなくて。
0886nobodyさん
03/02/04 02:04ID:CHyA5DeQForbiddenと出てしまいます。どこの設定がおかしいのでしょうか?
0887nobodyさん
03/02/04 02:12ID:???最後にファイルを修正してからの日数じゃないの?
てか -Mだけじゃ分からんだろ(w perl -Mの意味かと思った。
>>886
何を参考に設定したのか知らないけど、もう一度apacheの設定の仕方を見てごらん。
まぁエラーログみれば原因分かるから、それを元に検索するのも勉強。
0888nobodyさん
03/02/04 03:42ID:VBD/sziNは、$aと$bに何か入っていたら処理するで実際OKなのですが、
unless($a and $b){ 処理 }
ですと、両方入ってなかったら処理って風にならく、
どちらか一方でも処理に行ってしまいます。
ifのまるっきり反対じゃないんですね。何か訳があるのでしょうか?
0891nobodyさん
03/02/04 04:00ID:???0892876
03/02/04 09:15ID:???マルチするつもりじゃなかったんですが、書き込みした後、リロード
して確認したら書き込まれていなかったもので、スレまちがえて再書き込みして
しまいました。ご迷惑おかけしました。
いろいろなアドバイスありがとうございました。今日、がんばってみます。
0893nobodyさん
03/02/04 09:28ID:???unlessってのは、評価の結果が偽のときに実行するという命令であって、
条件式の評価の仕方が逆になるわけではない。
慣れないうちは、if (! 式) {} を使っておいたほうがいい。
0894nobodyさん
03/02/04 12:16ID:ZSr84PG1%TEST = ('A' =>'あ', 'B' => 'い');
foreach $key(keys %TEST){
&jcode'convert(*$key, "euc");
}
このやり方では駄目なのでしょうか?
0896nobodyさん
03/02/04 13:19ID:???なんとマヌケな…
ありがとうございました!
以後気をつけます。
0897nobodyさん
03/02/04 14:28ID:???0899711
03/02/04 14:42ID:???なんかもう自分で作りたくなっちゃったよ。PERLでcgi形式で翻訳スクリプト
なんて作ったら、どうなるんだろ。無謀か。
0901nobodyさん
03/02/04 17:02ID:???1.入力フォームを作る
2.入力された文章をhttp://www.infoseek.co.jp/Honyaku?pg=honyaku_t_inout.html&svx=105420&svp=SEEK
にwgetで投げる
3.getしたhtmlから結果だけを抜き出して、整形して表示
0902nobodyさん
03/02/04 17:31ID:???ファイルを、while (<IN>) {〜}といった記述をしないで、
一行ずつ読み込んでいく方法はないものでしょうか。
@file = <IN> といったメモリにファイル全部読み込む方法は使わず、
一行ずつ読み込んで、一行ごとに違う処理をしていきたいのです。
while の中でループ回数カウントしてifで判定しろ、なんていうのはなしで。
ファイルを一行読み込む場合、
open(IN,"$logfile");
$line = <IN>;
と、やれば出きるのはどこにでも書いてあるのですが、
2度目以降 $line = <IN> としても空でした…。
Perl は一行ごとに分けるデータ構造が身についてしまってるのがダメなのかなぁ…。
seek と read 使えばよさそうなのは解ってはいるのですが、
ベースから書き換えなくてはならず、このままの構造でなんとかできないものかと。
0904nobodyさん
03/02/04 17:44ID:???変なの。
0905nobodyさん
03/02/04 17:45ID:???んなこたーない。
これを実行してみればわかる。
#!/usr/bin/perl
use strict;
our $buffer;
$buffer = <DATA>;
print $buffer;
$buffer = <DATA>;
print $buffer;
$buffer = <DATA>;
print $buffer;
__DATA__
foo
bar
baz
0906902
03/02/04 18:00ID:???どこか初歩的なミスしてそうなので探してみます。
どうもでした。
0909nobodyさん
03/02/04 20:00ID:ifLjuw1eopen F,"/bin/gzip -d temp.txt.gz |";
できません。
どうすれば良いでしょうか。
0910909
03/02/04 20:12ID:???出力先間違ってた。
失礼しました〜
0911nobodyさん
03/02/04 20:54ID:???>ファイルを、while (<IN>) {〜}といった記述をしないで、
>一行ずつ読み込んでいく方法はないものでしょうか。
意味不明
while (<IN>) は while($_ = <IN>)と同じ
要するに一行ずつ読み込んでいる。
>Perl は一行ごとに分けるデータ構造が身についてしまってるのがダメなのかなぁ…。
身についてないと思うよ。
0912711
03/02/04 21:43ID:???>翻訳スクリプト作れるくらいの英語力(?)があったら翻訳スクリプトなんて必要ない。
英語に関しては、私自身は翻訳の必要などありません。掲示板に組み込んで
多言語翻訳掲示板を作れないか、ということです。
>>901
infoseek翻訳はそういう形で利用しても大丈夫なのでしょうか?
完全にフリーのものは、殆ど日本語翻訳まではまだサポートしていないし。
http://linguaphile.sourceforge.net/
0915711
03/02/04 22:37ID:???いずれはバレてしまうんでしょうね。
上のLingaphileのように、フリーの翻訳ソフトは色々
開発されてはいるようですが。
GPLTrans http://www.translator.cx/
(こっちはCとPHP?)
0916894
03/02/05 07:12ID:???エラーの内容といいますと?
インターネットサーバーエラーって画面以外にもエラーってあるんですか?
一応&jcode'convert(*{$TEST{$key}}, "euc");
こんな感じにしたらエラーはでなくなりました。
しかしeucにコンバートされてないみたいです。
普通にスカラーを作って日本語を入れて検索した場合は成功しますし、
上記のハッシュに英語をいれてもちゃんとなります。
原因のわかる方がいましたらお願いします。
0917nobodyさん
03/02/05 10:39ID:???自分のPCにPERLをインストールして、それを使ってテストする。
そうすればもっと詳しいエラーメッセージが見れる。
0918nobodyさん
03/02/05 10:44ID:???0919nobodyさん
03/02/05 11:36ID:???Internalすら読めないのに、よくPerlのコードを書けるねえ。
意外とエラーの実体はタイプミスだったりしてな。
とりあえずレンタル鯖でのCGIテストは今すぐやめろ。
0920nobodyさん
03/02/05 11:47ID:???よって、彼には500 Internal Server Eroorで十分だったわけだ。要はエラーが起こったという事実が大切なのだから。
実行したらエラーが出ました。助けてください。
と言う質問がいかに多いか。
0921nobodyさん
03/02/05 12:38ID:???Eroor
0922nobodyさん
03/02/05 12:53ID:???0923nobodyさん
03/02/05 13:28ID:???0924894
03/02/05 14:37ID:???レンタル鯖でのテストはしてませんが?
activeprelとapacheを入れてIEのアドレスにPCのアドレスを入れてやってます。
0925nobodyさん
03/02/05 14:44ID:???百年早い。せめてperlのデバッグ方を学んで出直してこいや。
ttp://www.harukaze.net/~mishima/perl/index.html
ttp://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html
この辺りな。
0926895
03/02/05 14:53ID:???use strict;
require 'jcode.pl';
my %TEST = ('A' =>'あ', 'B' => 'い');
my $key;
foreach $key(keys %TEST){
jcode'convert(\$TEST{$key}, "euc");
}
これで動くだろ。
0927894
03/02/05 16:22ID:???895さん、925さん、その他の方にも迷惑をおかけしました。
もう少し基礎を覚え直します
0928nobodyさん
03/02/05 16:52ID:???100年前にperlはない罠
0929nobodyさん
03/02/05 19:58ID:???100年後にもPerlはない罠
0930nobodyさん
03/02/05 22:39ID:???少し直してみました。
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');
}
0931nobodyさん
03/02/05 23:03ID:???とか、テストコードに言うのは野暮か。
0932nobodyさん
03/02/06 00:06ID:???気をつければ良いのでしょうか。
0934nobodyさん
03/02/06 00:22ID:???スマートな方法はないでしょうか?
$last = @DATA;
@DATA = @DATA[1..$last]
0935nobodyさん
03/02/06 00:31ID:???shift @DATA;
0937nobodyさん
03/02/06 01:02ID:???3つ目で、valuesを使わない理由は、valuesで出てきたリストに対する
変更は、%TESTに反映されないから、です。
ってそういう意味じゃないか。
0939934
03/02/06 01:46ID:???$#DATAで、配列の最後の番号ということでしょうか?
これは応用が利きそうですね。
0940nobodyさん
03/02/06 03:40ID:???.
.
200212.txt
200301.txt
200302.txt
こういう年月の名前のファイルを作り出すプログラムで、そのテキストの中の数字を全部足していきたいので
open(IN,"200301.txt");
open(IN,"200302.txt");
こんな感じで一個一個開いて足しているのですが、
指定した月から現在の月までのファイルを開くような方法があれば教えてください
0941nobodyさん
03/02/06 05:09ID:???readdirでファイルリストを取得して
foreach等で回しつつ、
substrや正規表現で数字を切り出して、
if($xxx >= 200212)
などという条件つけてやれば?
または、予め何月以上というリストを作ってやって、
回しつつif (-e "$_.txt")で処理するか。
0942nobodyさん
03/02/06 06:20ID:???さらにこれからはもう一つ、
年月と数値だけ羅列したインデックスファイルを作っておくと便利だと思うよ。
・
・
200302<>5648
200303<>4421
0944nobodyさん
03/02/06 15:07ID:???そのファイル名が「4桁年2桁月」になっているのであれば、、、
$start = "200201";
$end = "200301";
foreach ($start .. $end) {
open(IN,"$_.txt");
何らかの処理
}
でよいのでは?
0946nobodyさん
03/02/06 17:12ID:???0948nobodyさん
03/02/06 19:23ID:???例えば任意日任意時の10〜20分の間に何か処理をするとして
($minは分)
if($min >= 10 and $min <= 19){⊂}
と
if($min =~ /1[\d]/){⊂}
とやるのはどっちが高速&負荷軽めですか?
つーかもっといい方法ありますでしょうか?
0950nobodyさん
03/02/06 19:52ID:???Benchmark.pm
use Benchmarkね。
0951nobodyさん
03/02/06 19:55ID:???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;
}
単純に書いてみました。
0952別スレの優雅な948
03/02/06 20:02ID:???処理の重さだけなら後者が約2.2倍重いです。
前者を200万回処理するのにかかった時間0.69秒
後者を200万回処理するのにかかった時間1.51秒
実験は当方ローカル環境(CPU2.5GHz)
定期的に処理をしたいのであれば、UNIXコマンドのcronがありますが、
借りているサーバがshellを許可しているか、コントロールパネルにより
提供している必要がります。
0953郵政の歴史年表
03/02/06 21:24ID:iDPmTn07http://www.iptp.go.jp/museum/yusei/tsushin/nenpyou.html
にある1860年代から1990年代までの中から、
「郵便貯金の歴史」だけをgrep見たいに抜き出すこと出来ますか?
0955nobodyさん
03/02/06 21:30ID:???そうじゃないだろ・・・・
0957nobodyさん
03/02/06 21:47ID:???<td valign=top nowrap><b>([^<]*)</b></td>
<td>
<tr>
<td valign=top><font color=(?:ff9cff|9cff31|0031ff)>●</font></td>
<td>([^<]*)</td>
</tr>
0959nobodyさん
03/02/07 03:13ID:Md2X1ufVアップロードする前のオリジナルネームは
どこを参照すればわかるのでしょうか?
環境変数 Perl 一覧
などとググっても見つけられませんでした。
よろしくご教示ください。
0960nobodyさん
03/02/07 03:32ID:???http://www.yo.rim.or.jp/~getsu/document/rfc1867j.txt
こういう意味じゃない?
0961nobodyさん
03/02/07 03:55ID:???なるほど。格納されている場所がわかりました。
実際の取得方法(スカラー変数への代入)を調べてみます。
ありがとうございました。
0962nobodyさん
03/02/07 16:46ID:04vl2wLA全て配列に代入するにはどうすればいいんでしょうか?
例えば、cgi本体と同じ階層にある「log」というディレクトリに
0.dat,1.dat,2.datがある時に、
最終的に@dataに0.dat,1.dat,2.datが代入されている
という風にするにはどうするのでしょうか?
0963nobodyさん
03/02/07 16:54ID:???0964nobodyさん
03/02/07 16:54ID:???http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k03.htm
0965名無しさん@Meadow
03/02/07 17:01ID:???サブディレクトリもでしょ。.とか..とかのディレクトリは
入れないんでしょ。これでいいと思うよ。
#!/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;
}
0966962
03/02/07 17:40ID:???0967nobodyさん
03/02/07 21:04ID:???0969nobodyさん
03/02/08 00:03ID:???なんでPerlを覚えてるの?
借りてるサーバがPerlしか使えないとかかな?
マジレスきぼん。
0970マジレス
03/02/08 00:06ID:???0972nobodyさん
03/02/08 00:24ID:???( ´,_ゝ`) プッ
0973しょしんしゃ
03/02/08 00:26ID:qxZih98+日本語処理が面倒
ソケット通信が未熟
0974nobodyさん
03/02/08 00:43ID:???$no $name $heught $weight
とする場合、身長の降順、同じ場合は体重の昇順に
体重まで同じ場合は、さらに社員番号の昇順に
社員番号、社員名、身長、体重をprintしたい場合は
どうしたらよいでしょうか?(複数キー)
0975940
03/02/08 01:27ID:???0977974
03/02/08 02:37ID:???失礼しました。一応自分で書いてみてテストした結果、
下記のやり方で問題なかったのですが文法的におかしい
ところ、他に綺麗なやり方がありましたらご教授下さい。
(とくに下記の場合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>";
}
0978本7 ◆JMmE5ppk7Y
03/02/08 03:24ID:???トリップ変換のアルゴリズムはその辺のトリップチェッカーを拾ったんで途中に割り込ませようとおもいます。
で、すでにできあがってる2chスクリプトなのですこし強引ですが名前をdatファイルに保存する際に
投稿の際に名前入力してそれをdatファイルに保存してるのがread.cgiだと決めつけて考えてます。
空の変数$karinameを用意してそこに正規の名前変数$nameを代入して料理しよかと思いました。
まず最初に良く分らないのが文字列変数$nameに"#"が入ってる時だけ"#"以降の文字列抜き出しをするに
はどいう形の分がいいんでしょうか?
さらに抜き出せたとしてそれを変換ルーチンで料理。もう一つ用意した$ryouriに代入
$name=$ryouri で元にかえしてやってその後は通常の流れに続くという方法でよいでしょうか?
雑な質問のしかたで申し訳ないです。よろしくお願いします
0979nobodyさん
03/02/08 04:03ID:???こんなデータを作ってみました。
33<>c<>169<>120
22<>b<>169<>68
1<>a<>169<>68
正しくはa,b,cさんの順ですよね?
>>978
正規表現でマッチング。
こんな感じ?
$name =~ s/?#(.+)/&trip($1)/eg;
sub trip {
my ($conv) = @_;
my $conv = substr(crypt($conv, $salt), -8);
($conv);
}
0981同一人物?
03/02/08 04:22ID:???この早さでは言いにくいが
旧2ch式BBS立てたけど誰も来ない
0982nobodyさん
03/02/08 08:23ID:???> 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
0985本7 ◆HON7/awDa.
03/02/08 19:05ID:???アドバイスありがとうございます
抜き取った文字列はどこに代入されるのでしょうか?
どしろうとで申し訳ないです
$name =~ s/¥#(.+)/&trip($1)/eg;
#の後の(.+)がトリップ用数字に相当。
(.+)が$1に入って、
これにsub tripで処理したものを、
元のやつと置換する。
$name = "私の名前 #123456";
が
$name = "私の名前 aKsdjA4w";
みたくなる。
0988nobodyさん
03/02/08 23:15ID:r91Y0UUNwhile(<F>){print;}
seek F,0,0;
print F $temp;
close F;
としたとき、$tempのサイズが元のファイルサイズより小さいと、
$fileの元のデータが後半残ったまま上書きされてしまいました。
これはやはり上書きモードで開き直さなければ駄目でしょうか。
0991本7 ◆HON7/awDa.
03/02/08 23:30ID:???なれこれいじいったらトリップ入ってないときはそのままで出力できるようになりました。
あとは◆を名前欄に入れたら◇になるよう改造してみます
0992nobodyさん
03/02/08 23:43ID:???http://www.yahoo.co.jp/
のソースを $st バイトから $to バイトまでのみ
ネットワーク通信によって取得するにはどうすればいいですか?
LWPとかSocketとか頑張って調べましたがわかりません
よろしくお願いします。
0994nobodyさん
03/02/08 23:54ID:???例:
my $i; # ←はmy変数
my $i,$j,$k; # ←は$iだけがmy変数(残りはglobal?)
my ($i,$j,$k);# ←は全てmy変数
↑このような認識でいいのですか?
0995nobodyさん
03/02/08 23:58ID:???0998nobodyさん
03/02/09 00:15ID:???0999nobodyさん
03/02/09 00:17ID:zusUFu+41000nobodyさん
03/02/09 00:17ID:zusUFu+4あ、誰も>>>999に答えられなくなっちゃうや。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。