【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あたりを見よう。
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,ファイルロックスレに逝って叩かれてこい。
別に問題ないのでは?
>openとlockの間に他プロセスからのopenが来たらどうするつもりなんだろう・・・。
とのことだけど、ファイルを破壊しているわけじゃないので無問題でしょ。
「他プロセスからのopen」がファイルを破壊したりflockを伴わなかったりしたら
そりゃ問題だけど、そんな赤信号を無視して突っ込んでくるヤツを止めることは出来ないし。
0954バカです
02/07/18 11:38ID:w/uBOa7pmySQLとPerl使っているのですが,ハッシュのことがよく分かりません。
while(@res = $st->fetchrow_array) {
$data{$res[0]}=1;
}
こうすると、ハッシュdataに何も入って無いのですが、↓の様にすると
ちゃんと、ハッシュに格納されます。何故ですか?
$i=0;
while(@res = $st->fetchrow_array) {
$data[$i]=$res[0];
$i++;
}
foreach(@data){$data{$_}=1}
0955nobodyさん
02/07/18 13:17ID:pqv4qZv6sub A{
$a = "aaa";
&B;
}
sub B{
print $a;
}
&A;
サブルーチンAの中にサブルーチンBがある時、
Bの始めに引数の取得をしなくてもBの中で$aって使えるんでしょうか。
というか、今やったら出来たんですけど、どうしですか?
引数は必ず受け取らないとダメなんですよね?
0956nobodyさん
02/07/18 13:19ID:pqv4qZv6>Bの始めに引数の取得をしなくてもBの中で$aって使えるんでしょうか。
Bの呼び出しの時に引数を与えなくてもBの中で$aって使えるんでしょうか。
0957nobodyさん
02/07/18 13:20ID:???だって、$aはmyなりlocalなりしてないのでスコープがグローバル。
もっともやってはいけないコーディング法の一つです。
0958nobodyさん
02/07/18 13:21ID:???Perlはデフォでグローバル変数扱いになるから使える。
0959nobodyさん
02/07/18 13:25ID:pqv4qZv6sub A{
&B;
}
sub B{
@array = @_;
print $array[0];
}
$a = "aaa";
&A($a);
この時、Aで引数を取得しないで飛ばしてBで取得しちゃってもいいんでしょうか。
0960nobodyさん
02/07/18 13:26ID:???0961ぽよぽようんこ(本物)
02/07/18 13:27ID:???おいっ! my と local の違いを勉強せいっ!
この場合、local でも使えるだろ!
0962nobodyさん
02/07/18 13:37ID:Rz8eDFr/グローバルな特殊変数。
0964nobodyさん
02/07/18 13:42ID:pqv4qZv6グローバル変数は引数を与えたり取得なんかしなくても
どこでも関係なく使えるってことだ!!
0965nobodyさん
02/07/18 13:42ID:???ネタ?
グローバルが最悪というが、状況次第だろ
それにこれはローカルが要求される程
莫大な規模ではないし
>>960
ダネ
Bが@_ではなく、$aで取得すれば問題ない
0967nobodyさん
02/07/18 13:43ID:???>グローバルが最悪というが、状況次第だろ
こんな小規模なプログラムかつ引数で渡せるものをわざわざグローバルにすべきではない。
0968nobodyさん
02/07/18 13:44ID:???レス数が950を超えています。1000を超えると書き込みができなくなります。