【Perl】初心者コーナー Part13
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
02/05/30 13:06ID:R2kt1mTx1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0853nobodyさん
02/07/15 13:03ID:???↓
送信ボタン押す
↓
ブラウザが、指定されたメソッドに従ってパラメータの名前や値をまとめる
そして cgi に送信
↓
cgi でそれを受け取る
↓
受け取ったのはまとまらさってるので
パラメータの名前や値に分解しなければなりません
↓
分解した
↓
色んな処理
↓
処理が終わったから新しい画面を表示させよう、
表示させるにはブラウザにhtmlを送ります(正確には他にも必要)
↓
cgi からおくらさってきた〜〜
↓
ブラウザに表示
どこでコケてる?
0854nobodyさん
02/07/15 13:18ID:???たぶん、
ブラウザが、指定されたメソッドに従ってパラメータの名前や値をまとめる
そして cgi に送信
↓
cgi でそれを受け取る
あたりでこけてる気がするのですが、
<input type="hidden" name="mode" value="vote">
をフォーム内に記述して、
if($param{mode} eq 'vote'){
簡単な処理
}
としてみても、「簡単な処理」を一切してくれないので、値を送信しないでCGIを起動だけしてる感じです。
$param{mode}が空の時は、投票結果表示の処理をさせてるので、新規ウィンドウに投票結果が反映されていない
グラフがむなしく表示されています。
なにがいけないんだろ。。。。。。
0855nobodyさん
02/07/15 13:29ID:???この処理がやってないぞ。定型。
local($pair,$buffer);
if($ENV{'REQUEST_METHOD'} eq 'POST'){
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}elsif($ENV{'REQUEST_METHOD'} eq 'GET'){
$buffer = $ENV{'QUERY_STRING'};
}
local(@pairs) = split(/&/,$buffer);
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
0856nobodyさん
02/07/15 13:30ID:???0857nobodyさん
02/07/15 13:50ID:???すいません、書き忘れてましたが、データを受け取る処理も書き記しております。
頂いたレスを見ますかぎり、CGI→同じCGIのデータの受け渡しと、特に変わらない処理でデータを受け取れる
ということなのでしょうか。
0858nobodyさん
02/07/15 14:02ID:???0859nobodyさん
02/07/15 14:25ID:???$param{'mode'}にしたら直ったりは?
0861nobodyさん
02/07/15 14:33ID:???$param{'mode'}
$param{"mode"}
どれでも変わらんよ。
0862nobodyさん
02/07/15 14:51ID:???Perlのバージョンに影響されない?
Perl4ならクォートは必須だけど、今更4との互換性を考える必要は無いと思う。
0864nobodyさん
02/07/15 15:59ID:???悪かったな!
漏れのプロバのスペースがPerl4なんだYo!(涙ッシュ
0865nobodyさん
02/07/15 17:20ID:???設置方法が悪いのかな?それとも対応してないとか?
0866nobodyさん
02/07/15 17:20ID:???0867865
02/07/15 17:21ID:XqyW9sRL俺?
0868865
02/07/15 17:22ID:XqyW9sRL0869865
02/07/15 17:27ID:XqyW9sRL0870nobodyさん
02/07/15 17:29ID:???0871nobodyさん
02/07/15 17:30ID:Zf9qVko0http://cgi.tripod.co.jp/
0872865
02/07/15 17:59ID:XqyW9sRL0873nobodyさん
02/07/15 18:13ID:???0874すいません。。。
02/07/15 19:01ID:GXUWDI7HQuid Pro Quo 2.1.2が欲しいんです。
http://www.socialeng.com/html/download.html
で落とせると聞いたのですが、一向につながらない・・・
ここ以外では配付とかされていないんでしょうか??
よろしくおながいします。
ちなみにMacintosh用です。
0875nobodyさん
02/07/15 19:06ID:???とかのスレの方がふさわしくない?
0876nobodyさん
02/07/15 19:25ID:/pkMmlTE配列に入らないのですけれど、どこが変か教えて下さい。
htmlの部分↓
ーーーーーーーーーーーーーーーーーー
<form method="get" action="hoge.cgi">
<input type="text" name="E0" size="4" istyle="4" maxlength="4">年</input><br>
<input type="text" name="E1" size="2" istyle="4" maxlength="2">月</input><br>
<input type="text" name="E2" size="2" istyle="4" maxlength="2">日</input><br>
<input type=radio name="E3" value=1 CHECKED>男<br>
<input type=radio name="E3" value=2>女<br>
<input type="submit" value="押す">
<hr>
</form>
cgiの部分↓
ーーーーーーーーーーーーーーーーーー
$buffer = $ENV{"QUERY_STRING"};
@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
@list = values %FORM;
};
print"list[0] $list[0]<br>\n";
print"list[1] $list[1]<br>\n";
print"list[2] $list[2]<br>\n";
print"list[3] $list[3]<br>\n";
これをやってみるとこんなふう↓になります
ーーーーーーーーーーーーーーーーーーー
list[0] E3の値
list[1] E0の値
list[2] E1の値
list[3] E2の値
0877nobodyさん
02/07/15 19:27ID:???@list = values %FORM;
するのかわからん。
0878すいません。。。
02/07/15 19:43ID:GXUWDI7H逝って来ま。
0879876
02/07/15 19:46ID:???分かりました〜♪ありがとうございます。
$buffer = $ENV{"QUERY_STRING"};
@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
};
print"FORM[0] $FORM{E0}<br>\n";
print"FORM[1] $FORM{E1}<br>\n";
print"EORM[2] $FORM{E2}<br>\n";
print"FORM[3] $FORM{E3}<br>\n";
0880nobodyさん
02/07/15 21:25ID:???print <<"HTML"
<html><body>〜略〜</body></html>
HTML
とやりたいんですがこれだとエラーになります。
タブを入れたまま動くようにするにはどうしたらいいでしょうか?
あとタブを入れてないと動くのですがその中に<a href="mailto:[email protected]">xxx</a>
があるとエラーになります。どうしてなのでしょうか?
0881nobodyさん
02/07/15 21:28ID:???; が入ってないけど、動くの?
>href="mailto:[email protected]">xxx</a>
\でエスケープしたら?
href=\"mailto:aaaa\@hotmail.com\">xxx</a>
0882 ◆Smt8k/ss
02/07/15 21:29ID:wkNqkF1j<html><body>〜略〜</body></html>
HTML
0883nobodyさん
02/07/15 22:32ID:h7+zOLje一応動いたんですがもうちょっと見栄えがいいやり方無いでしょうか?
0884nobodyさん
02/07/16 00:48ID:???<html><body>〜略〜</body></html>
~;
@はエスケープしる
0885nobodyさん
02/07/16 02:17ID:???ダイス機能付きのチャットを作っているのですが、どうにもrand関数の値が偏ります。
3D6(6面ダイス3個の判定)の場合、1個目の数字が連続で同じ数字になります。
試しにWeb上にアップして試した所、そっちでは3個目の数字が連続で同じ数字になりました。
これはrand関数において仕方のないことなのでしょうか?
もし解決策などがあるのでしたらご教授いただけると嬉しく思います。
以下はダイスロール部分のソースです。
# $in{'dice_any'}にダイスの数、$in{'dice'}に何面ダイスかの情報が入ってくる。
srand(time);
$dice_roll = qq(<br><b><font color=0000FF>$in{'dice_any'}D$in{'dice'} ダイス判定</font></b> <font color=0066FF>);
$dice_all = 0; # ダイスの出目の合計用の変数
$plus = "";
while($in{'dice_any'} > 0){# ダイスの数が尽きるまで
$dice = int(rand($in{'dice'})) + 1;
$dice_roll .= qq($plus$dice );
$dice_all += $dice;
$in{'dice_any'}--;
$plus = "+ ";
}
if($dice != $dice_all){# ダイスが2個以上なら
$dice_roll .= qq( = <b>$dice_all</b>); # 合計値表示
}
$dice_roll .= qq(</font> );
# この後$dice_rollをログに保存
どなたかよろしくお願いします。
0886nobodyさん
02/07/16 03:00ID:???0887885
02/07/16 03:07ID:???0888nobodyさん
02/07/16 03:09ID:1NQx5kwR|
|-folder1
|-main.cgi
このようなファイル構造なんですが
main.cgiからtest.plを参照することは可能なんですか・・?
0889887
02/07/16 03:13ID:1NQx5kwRずれてる自己レス・・・
root にtest.plが有って
folder1にmain.cgiが有る状態です
つまり下位のファイルに参照できるかどうかと言うのが疑問なのです・・・
0890nobodyさん
02/07/16 04:53ID:???require '/home/mona/public_html/test.pl';
大体こんな感じ。鯖でちがう。
0891nobodyさん
02/07/16 06:01ID:???ソケットプログラム書くときサーバからのレスポンス(OK 200とか)がうざいんですが
これを消す方法ってないんですか?
0892887
02/07/16 06:35ID:1NQx5kwRwinだと相対パス行けるのですが
いざUPするとできません・・・
相対的にはこんな感じで
../member/data/point.pl
絶対的には
/home/as***/public_html/*****/cgi-bin/member/data/point.pl
こんな風なのですが・・・
HTTPを使う限り、それを消す方法は無いよ。
単に無視するだけなら可能だけどね。
その場合は最初の空行までを読み飛ばせば良い。
>>892
パーミッションがあれば、相対でも絶対でもいけると思うけど。
0894nobodyさん
02/07/16 08:49ID:???0895852
02/07/16 09:20ID:mWVjtM4S送信ボタンに、onMouseUPで新規ウィンドウを開き、そこにデータを受け取った後の結果を表示させるようにCGIにリンクさせてるんですが、
そのjavascriptをいれてると、データが送信されてないみたいです。
試しに投票フォームと同じウィンドウ上で結果を表示させると、うまくいきました。
submitボタンにビヘイビアを仕込むとダメなんでしょうか?
0896ぽよぽようんこ(本物)
02/07/16 13:47ID:???0897chmod
02/07/16 14:34ID:2idpGCxqでファイルがブラウザから見られるのに
$de="0755";
chmod $de, $filename;
でにするとファイルが見られなくなります。
chmod($de, $filename);
もダメです。
どなたか変数で指定する方法を教えて下さい。
0898chmod
02/07/16 14:36ID:2idpGCxqあれ文字化け?してるけど、
コロンでなくカンマです。
0899ぽよぽようんこ(本物)
02/07/16 14:43ID:???0900chmod
02/07/16 14:46ID:2idpGCxqchmod($de,$filename);と755を751にしたらでできました。
しかしFTPプログラムでこのファイルを見るとなぜか
-wxr-xrwxになっています。どうしてでしょう。
0902nobodyさん
02/07/16 15:11ID:???0903nobodyさん
02/07/16 15:12ID:???0904nobodyさん
02/07/16 15:37ID:2idpGCxqumask(0)です。
$de=0755;とかにするとその時点で正しく数字が入りません。
やはり変数を使って設定をするとパーミッションがぼろぼろになります。
Perlの仕様ということで考えます。
0905nobodyさん
02/07/16 15:46ID:???$de_octet = oct($de);
perldoc dhmod
0906885
02/07/16 15:52ID:???ありがとうございました。
srand(time() ^ ($$ + ($$<<15)));
0908nobodyさん
02/07/16 16:07ID:???0909852
02/07/16 16:53ID:???0910nobodyさん
02/07/16 18:06ID:AR5JuM+5今までの出会い系サイトとは一味もニ味も違うサイトです。バーチャルタウンを実際に体験できます!!!
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
0911nobodyさん
02/07/16 18:13ID:XozL7fM5■■■バカ名言■■■
バカって言うだけの奴ほど役に立たないものはない。
助けるか、無視するかをしなさい。
バカというだけというのは、助けもせず、無視もせず、
レスを余計に増やし、雰囲気を悪くする。
そういうのに限って突っ込まれれば適当にごまかしたり、逃げていく。
■■■どうせ六でもない奴だろうが■■■
0912nobodyさん
02/07/16 21:41ID:???陸でもない/碌でもない
バカって言っていいですよね?
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
■■■どうせ六でもない奴だろうが■■■
バカハケ━━━━━(゚∀゚≡゚∀゚)━━━━━━ソ!!!!
0913nobodyさん
02/07/16 23:36ID:???0916nobodyさん
02/07/17 06:20ID:???0917nobodyさん
02/07/17 07:08ID:???$x = qq{<a href="http://www.yahoo.co.jp/">Yahoo! Japan</a>};
$x =~ s/<.+>//g;
のようにすると、最初の < と最後の > で全部消えてしまいそうな気がします。
最短マッチとかを使えばいいんでしょうか、使い方がわからないので教えてください。
(Perlメモを読んだところEUCしかできない方法らしいので
SJISでもやりたいので質問です)
0918nobodyさん
02/07/17 07:41ID:???0919nobodyさん
02/07/17 07:52ID:SEvMu7le$x =~ s/<[^>]*>//g;
>>918
年月日時秒を分解して
(年は-1900してから)全て秒に直して足せば良いんじゃないの?
0920nobodyさん
02/07/17 07:53ID:???timelocal();
0921nobodyさん
02/07/17 07:53ID:???0922919
02/07/17 08:08ID:???0924nobodyさん
02/07/17 12:49ID:???ってやるとunix/perlでは成功するんですが
ActivePerlじゃ成功しないんです。
rename("onefile","pict\$hensuu");
うえのようにしてもだめでした。たすけてちょんまげ
…普通に成功してるけど?
というか、失敗したら$!を見る癖をつけよう。
rename(...) or die $!;
0926nobodyさん
02/07/17 14:25ID:tZJ3+xnSエスケープしなきゃ駄目だよ
pict\$hensuu
↓
pict\\$hensuu
0927nobodyさん
02/07/17 14:52ID:tZJ3+xnSでも動く所がActiveperlさんの偉い所だったり
MACだとこうは行かないそうで
0928nobodyさん
02/07/17 16:15ID:???MACのPerlってどんなんなんですか?
OSXで動くならまぁわかるんですが。
PerlでIriaみたいなの作ったら需要ありますかね?
Macでダウソマネージャーってありましたっけ?
0929nobodyさん
02/07/17 16:28ID:???WWWcp
両方で検索してみれ。ただWWWcp最後にいつ使ったか
忘れたけど俺が使ったバージョンではマルチホーミングに
対応してなかった気がする。
つーか需要も何も難しくないからめずらしくも無い。
0930924
02/07/17 17:45ID:???perl -e 'print $^O;'とかできないんですけど、、
ほかにもいろいろ違うのかな?
0931nobodyさん
02/07/17 17:48ID:???MSWin32
C:\>
ちゃんとなるよ。
0932nobodyさん
02/07/17 17:49ID:???linuxの使い方は必須で覚えないとダメですか?
0933nobodyさん
02/07/17 17:50ID:???0935nobodyさん
02/07/17 18:02ID:0WM/CdU+Perlでこれは可能ですか?
あるソースの保守をやっているんですが、ファイル名をパスの階層ごとに変数にしてて
もうわけがわかりません。変数展開したソースがホスィのです。
こんな感じ
open ("< /foo/bar/giko");
を、わざわざ
$FOO_dir = '/foo';
$BAR_dir = "$FOO_dir/bar";
$GIKO_file = "$BAR_dir/giko";
open ("< $GIKO_file");
としている。こんなのが何十個もある。
残念だけど、プリプロセッサは無いよ。
その目的なら、デバッガが適当かなぁ。
perldoc perldebug
日本語ドキュメントなら、不完全だけど河馬屋のがあるよ。
http://member.nifty.ne.jp/hippo2000/perltips/perldbg.htm
0937nobodyさん
02/07/17 23:14ID:0q/AG7/8超初心者的質問ですが、探しても答えが見つからなかったので質問させてください。
flockでロックしたファイルは、他のcgiからの書き込みに対しても有効ですか?
あるCGIスクリプトでflock中のファイルについて、他のCGIスクリプトからの書き込みも防ぐことができるのでしょうか。
flockは、ファイルハンドルを指定して行うので、1つのCGIスクリプトでしか効果がないのかも知れないと心配になりました。
申し訳ありませんが、どなたかご存じの方、ご回答いただければ幸いです。
0938コギャル&中高生
02/07/17 23:23ID:q1y9WZogお役立ちリンク集
必ず役立ちます
コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便
↓
http://kado7.ug.to/wowo/
http://kado7.ug.to/wowo/-a.htm
0939nobodyさん
02/07/17 23:37ID:/oUfi8FN今までの出会い系サイトとは一味もニ味も違うサイトです。バーチャルタウンを実際に体験できます!!!
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
一つのスクリプトでしか効果ないとしたら、
全く同じ二つのスクリプトがあったらどうなると思う?
1バイトだけ違って他は同じスクリプトがあるとしたら?
そんなんじゃ困るでしょ。
当然だけど、他のあらゆるスクリプト、プロセスに対して有効だよ。
ただし、flockの仕様上「書き込みを防ぐ」ことは出来ないから注意してね。
0941nobodyさん
02/07/17 23:47ID:???全部のスクリプトが正しくflockしてれば排他処理はうまくいく。
flockは紳士協定だから、flockせずにいきなり書き込むような無法者がいると破綻する。
そのファイルにアクセスするのが自作CGIのみなら大丈夫だろ。
0942937
02/07/17 23:48ID:NR9AAdwqまた、flockは書き込みを防ぐのではなく、オープンを防ぐのですよね。
こちらもご指摘ありがとうございました。
0943937
02/07/17 23:51ID:NR9AAdwq>>942さんもありがとうございました。
自作スクリプトだけなので、大丈夫そうです。
安心しました。
本当にありがとうございました。
・・・あ、もちろん、ファイルハンドルは毎回違っても大丈夫ですよね?
>>940さんがあらゆるプロセスに対して有効って言ってくださっているので、
そういうことですよね。
では、頑張ってつくります!
ありがとうございました!!
0944937
02/07/17 23:52ID:NR9AAdwq>>941さんでした。
本当にありがとうございました。
0946nobodyさん
02/07/18 00:21ID:???flockの仕組みってのは信号機みたいなもんなんだよ。
"赤だったらちょいと立ち止まってくれ"という合図に過ぎない。
だから、無視しようと思えば無視できるんだよ。
無論、そんなことをしていればいつか事故が起こるのは必至だけど。
…てな説明を何処かで読んだよ。
0949nobodyさん
02/07/18 03:09ID:ES5M+zj/0950nobodyさん
02/07/18 03:19ID:???これ完璧だと思うけど、違うの?
open(OUT, "+< outfile.txt");
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT "........";
close(OUT);
0951nobodyさん
02/07/18 03:24ID:???それのどこが完璧なのか聞きたい。
tu-ka,ファイルロックスレに逝って叩かれてこい。
レス数が950を超えています。1000を超えると書き込みができなくなります。