【Perl】初心者コーナー Part13
レス数が900を超えています。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あたりを見よう。
0830nobodyさん
02/07/14 15:00ID:xUfIRkakJperlを必要とする既製スクリプトってたいしたことなさそうだから、
一から自分でコーディングしてみては?
0831nobodyさん
02/07/14 15:29ID:ZiG6NcZV>>830さん
レスありがとうございます。確かに、その通りなんですが、
1>そのスクリプトが200KBほどある
2>日本語の文章の構造解析のスクリプトなので、日本語処理がチョット複雑
3>あくまでもテストとして、ちょっと動かしてみたいだけなので、できるだけ手間を
かけたくない
という理由で、Perl5.005のソースをDLして、それにパッチを当てようと思っていた
のですが、Perl5.005のソースがなんか見当たらないのです。
0832nobodyさん
02/07/14 15:52ID:???簡単に見つかる予感。
0833831
02/07/14 16:00ID:ZiG6NcZVググルで、"perl5.005 src"で見つけました。
すんませぬ。"perl5.005 source"とか”rpm"とかで検索していたオラが
間抜けでした。逝ってきます。
Perl暦2日なんで、許してやってくだされ。
0834nobodyさん
02/07/14 19:04ID:???O_RDONLY = 0
O_WRONLY = 1
O_O_RDWR = 2
とかは分かってるけど
O_APPENDとかは?
検索してもヒットせず…
おしえてくらはい
0835nobodyさん
02/07/14 20:53ID:???http://www.linux.or.jp/JM/html/LDP_man-pages/man2/open.2.html
大体こんな所でしょ
0836nobodyさん
02/07/14 21:01ID:???それって歴史的に環境依存だから0.1位しか信用出来ないよ?
0837二つ目のお気に入りとして使って
02/07/14 23:31ID:gWk8eFjtゲーションリンク機能を使って右フ
レームにリンク先をさくさく表示。
今までのリンク集のようにいちいち
戻らなければならないなんてことは
ありません。
http://home9.highway.ne.jp/cym10262/
0838nobodyさん
02/07/15 00:06ID:???元ファイル開いてメモリに読み込んで別ファイルに書き出すじゃメンドイし
どの環境でも使える方法でなんか一発でする方法ないですか?
copy a b
0843838
02/07/15 00:32ID:???やってみたらやっぱりエラーが出ました。
String found where operator expected at test.cgi line 1, near
(Do you need to predeclare copy?)
syntax error at test.cgi line 1, near "copy "a.txt""
String found where operator expected at test.cgi line 1, near
(Missing operator before "b.txt"?)
Execution of test.cgi aborted due to compilation errors.
0847nobodyさん
02/07/15 07:25ID:???という場合は
if(($data !~ /&/) || ($data !~ /=/)) {exit;}
こうでいいんでしょうか?
0848nobodyさん
02/07/15 07:59ID:Gdw1y7VE私も初心者だから違うかもしれないけど
0849nobodyさん
02/07/15 09:00ID:AMXAGLXX聞くより試した方が早いだろうに。
exit if(index($data,'&') == -1 || index($data,'=') == -1);
こっちのが数倍軽い。美しくは無いが。
0851nobodyさん
02/07/15 12:21ID:???0852nobodyさん
02/07/15 12:44ID:???全くもってうまく動きません。
具体的にもうしますと、最近サイトのトップページでよく見かけるようなミニアンケートを作りたいんですが、
ラジオボタンで選択した値などが、まったく送信されてないみたいなんですが、
htmlファイル上のフォームから、別ファイルのCGIへ値を送信する場合なにか特別なことが必要なのでしょうか?
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最後にいつ使ったか
忘れたけど俺が使ったバージョンではマルチホーミングに
対応してなかった気がする。
つーか需要も何も難しくないからめずらしくも無い。
レス数が900を超えています。1000を超えると表示できなくなるよ。