Perlコーディング初心者質問スレ Part 43
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/08/12(金) 01:26:47ID:mHnZWvqz【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0516nobodyさん
2005/09/20(火) 18:53:02ID:???それでは、なぜGETとPOSTがあるのかを説明してください。
また、メソッドになぜ両方指定するものがないのかも考えてください。
0517nobodyさん
2005/09/20(火) 18:53:22ID:???(undef, $getval) = split /=/, $ENV{QUERY_STRING};
でOK。
0519nobodyさん
2005/09/20(火) 19:06:19ID:???0520512
2005/09/20(火) 19:12:18ID:???えっと、分かりません(汗
なんでなんでしょう?
私の中では、ブックマーク可能なページはGETにしとく、、くらいの認識しかないです。
あと、URL直接叩かれるとまずいページはPOST、、とか。そんな認識でごめんなさい。
>517
CGI.pmに頼らず、自分でパースしなくてはならない、ということですね。
これならできそうです。
で、
POSTのときってURLでパラメータ渡しちゃダメなんでしょうか?それが普通?
php書くときは結構普通にやってたけど、これって考えを改めたほうが良いですか?
0521nobodyさん
2005/09/20(火) 19:15:09ID:???> POSTのときってURLでパラメータ渡しちゃダメなんでしょうか?それが普通?
お行儀は良くない程度と思っておけばいいんじゃない?
CGI.pmはmethodを見るから受け取れなかっただけ
0522nobodyさん
2005/09/20(火) 19:22:09ID:???> POSTのときってURLでパラメータ渡しちゃダメなんでしょうか?それが普通?
問題ないと思うよ。
おれもよく使ってる。
0523nobodyさん
2005/09/20(火) 21:01:01ID:???もしも下記に間違い等ございましたらご教示いただきたい
次第です。
宜しくお願いいたします。
sub remove_emoji{
my $str = $_[0];
# i-mode, EZweb
my $sjis = '[\x81-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]';
my $emoji = '[\xF8\xF9][\x40-\x7E\x80-\xFC]';
$str =~ s/\G((?:$sjis)*)(?:$emoji)/$1/go;
# vodafone
$str =~ s/\x1B\$[\x21-\x7A]+\x0F//g;
return $str;
}
0526nobodyさん
2005/09/20(火) 22:23:57ID:???不愉快な思いをさせてしまい、本当に申し訳ありませんでした。
今のところ不具合はないのですが、もしもアドバイス等いただ
ければと思い書かせていただいた次第です。
悪気はありませんのでお許しください。
すみませんでした。
0527nobodyさん
2005/09/20(火) 22:29:15ID:???CGIモジュールではPOSTメソッドのときにurlのquery stringで渡した
パラメタはurl_paramっていう別のインタフェースでとるようになって
いるのよ。詳しくはCGIモジュールのマニュアル嫁。特にMIXING POST
AND URL PARAMETERSという見出しのところ。
0528512
2005/09/21(水) 00:16:24ID:???なるほど、安心しました。
>527
ごめんなさい。おもいっきり書いてましたね。
どうもありがとうございます。ものすごく助かりました。
精進します。
0529nobodyさん
2005/09/21(水) 02:03:43ID:???0530nobodyさん
2005/09/21(水) 11:00:47ID:???自作CGIを評価するスレ
http://pc8.2ch.net/test/read.cgi/php/1049514428/
0531nobodyさん
2005/09/21(水) 11:41:12ID:AdBzR2Q9perlで作成したcgiの質問があります。
HTML側で
<input type=file name="aaa">
<input type=file name="bbb">
とファイルを指定して
perlのcgi側で受け取りたいのですが
やり方がわかりません。
色々ネット上を調べたり「とほほ」を見ていたけど
二つ以上ファイルを受け取る方法がわかりません。
なにか情報をいただけますと幸いです。
0533531
2005/09/21(水) 13:22:54ID:AdBzR2Q9今の所
use CGI;
my $cgi = new CGI;
my $comment = $cgi->param('comment');
上記のようにして取得しています。
だたファイルの場合はどうすれば取得できるのか不明だったため
質問させていただきました。
0534nobodyさん
2005/09/21(水) 13:51:44ID:???これが原因じゃなかったら他の回答者のレスに期待してくれ。
0535531
2005/09/21(水) 15:03:05ID:AdBzR2Q9<FORM METHOD=POST ENCTYPE="multipart/form-data" ACTION="test02.cgi">
<INPUT TYPE=file NAME="AAA"><BR>
<INPUT TYPE=file NAME="BBB"><BR>
<INPUT TYPE=submit VALUE="送信">
うーむ 助けて偉い人ー
0537531
2005/09/21(水) 15:56:07ID:AdBzR2Q9INPUT TYPE=file
のデータの取得方法が分からないのです、、、
説明不足で申し訳ありません
0538531
2005/09/21(水) 15:58:18ID:AdBzR2Q9ひとつだけだったら
http://web.archive.org/web/20010210200144/wakusei.cplaza.ne.jp/twn/cgi-bin/wwwupl2.txt
で取れるとわかったのですが。
0541531
2005/09/21(水) 17:13:23ID:AdBzR2Q9えーっとそのCGIモジュールを使用した際の
取得方法をお教えいただきたいのです。
わがままなのは十分承知しておりますが
ヒントではなくズバリッお教えいただけますと幸いです。
0542nobodyさん
2005/09/21(水) 17:21:41ID:???CGIモジュールの使い方をどうやって調べるか?
下記の順序でお試しください。
1.マニュアルを読む
2.和訳がないかググる
3.分かりやすく説明したサイトがないかググる
4.使っている他のスクリプトがないかググる
5.開き直ってにちゃんねるで聞く
0543531
2005/09/21(水) 17:36:51ID:AdBzR2Q9use CGI;
my $buffer;
my $query = CGI->new;
my $file = $query->param('BBB');
#my $file_name = ($file =~ /([^\\\/:]+)$/) ? $1 : 'uploadedd.bin';
my $file_name = 'aaa.jpg';
open(OUT, ">$file_name") or die(qq(Can't open "$file_name".));
binmode OUT;
while (read($file, $buffer, 1024)) {
print OUT $buffer;
}
close OUT;
どうもお騒がせいたしましたっ
0544nobodyさん
2005/09/21(水) 22:30:20ID:???0545nobodyさん
2005/09/21(水) 23:07:53ID:???0546nobodyさん
2005/09/22(木) 02:02:03ID:???0548nobodyさん
2005/09/22(木) 09:00:24ID:???0549nobodyさん
2005/09/22(木) 10:10:21ID:???0550nobodyさん
2005/09/22(木) 17:44:54ID:???0551nobodyさん
2005/09/22(木) 17:46:12ID:???0552nobodyさん
2005/09/22(木) 18:00:03ID:???0553nobodyさん
2005/09/22(木) 18:34:37ID:???0554nobodyさん
2005/09/22(木) 19:49:05ID:???0555nobodyさん
2005/09/22(木) 19:57:59ID:???↓test.pl
-----
#!/usr/bin/perl
use strict;
use const; # この行をコメントアウトすると動く
use func;
my $obj = func->new();
$obj->print_var();
-----
↓func.pm
-----
package func;
use const;
sub new() {
my $class = shift;
my $self = {@_};
bless $self, $class;
}
sub print_var() {
printf('[%s]', FOO);
}
1;
-----
↓const.pm
-----
use constant FOO => 'aaa';
1;
-----
tesp.plを実行しても、const.pmの中のFOOの値が表示されずに、そのまま"[FOO]"が表示されます。
でも、test.plの中の「use const;」をコメントアウトすると、きちんと"[aaa]"が表示されます。
各ページで共通の定数を用意したいときは、違う方法が必要なのでしょうか?
0556nobodyさん
NGNGPerl5.8以降のサーバーで動作しなくなったのですが
使えなくなった関数などがあるのでしょうか?
わかる方いましたら教えてください。
0557nobodyさん
2005/09/22(木) 20:37:31ID:???0559nobodyさん
2005/09/22(木) 20:56:13ID:???そのやり方ではだめ。const.pmが最初にuseされるときにカレントの
パッケージでFOOが定義されて、それ以後のuseでは既に読み込まれている
ので無視されている。test.plのuseをコメントアウトすると動くのは
それによってfunc.pmでのuseが最初になるからだ。
で、こういう用途には定数をexportするモジュールにするのが普通。
perlmod読んでパッケージとモジュールについて勉強するのがいいだろう。
0560nobodyさん
2005/09/22(木) 21:04:17ID:???なら関数とかいうんじゃなくて鯖独自の問題のような希ガス
0561556
NGNGsub NewsChange {
for ($NC = $NewsMax; $NC >= 2; $NC--) {
$News[$NC] = $News[$NC - 1];
}
$News[1] = $_[0];
$GFyear++;
}
ここらへんが誤動作してそうです・・・。
0562556
NGNGsub NewsChange {
for ($NC = $NewsMax; $NC >= 2; $NC--) {
$News[$NC] = $News[$NC - 1];
}
$News[1] = $_[0];
$GFyear++;
}
ここらへんが誤動作してそうです・・・。
0566556
NGNGまったく別なんですが3つのサーバーで試してずっと前から使ってた1つ目のサーバーは大丈夫で
2つ目、3つ目の新しいサーバーが同じようなバグが出て使い物にならなかったので
新しい仕様だから使えないのではないかと思いました。
0567nobodyさん
2005/09/22(木) 22:54:51ID:???0568556
NGNGエラーメッセージは出ません。
まったく同じスクリプトをまったく同じ手順で設置しているんですが
正常にゲームができるサーバーと、ゲーム開始直後に
同じログがずらりと並んでゲームができなくなるサーバーがあります。
0569nobodyさん
2005/09/22(木) 23:15:47ID:???願うしかないような希ガス。
0571nobodyさん
2005/09/23(金) 00:46:02ID:???ログってあんたが勝手に考えた仕組みだろう。
そのログを取る部分、そしてログの意味とか晒してもらわにゃ何とも言えん。
ていうか、変数の流れを追えばちゃんとエラーを特定できるはずだから。
0573エスパー回答者
2005/09/23(金) 01:51:44ID:???FORTRAN に対する郷愁が無いのなら、@Newsは0番目の要素から使うようにすべきだろう。
unshift @News, $new_element;
splice @News, $NewsMax-1;
$GFyear++;
とすれば、誤動作していたサブルーチンNewsChange を削除することができる。
これで問題は全て解決する(......はずだよな)。
0574nobodyさん
2005/09/23(金) 10:48:25ID:???0575nobodyさん
2005/09/23(金) 11:41:48ID:???とか、言ってみたりする。
0576nobodyさん
2005/09/23(金) 11:47:00ID:???JavaScript にしとけ。
0577nobodyさん
2005/09/23(金) 12:07:02ID:???0579nobodyさん
2005/09/23(金) 16:12:52ID:NELxQvyQここのアクセスカウンターって改造されてね?
0580nobodyさん
2005/09/23(金) 16:20:20ID:???0582nobodyさん
2005/09/23(金) 20:49:12ID:???0583nobodyさん
2005/09/23(金) 21:32:21ID:???0584nobodyさん
2005/09/26(月) 01:11:42ID:???Perl内で、他のURLにあるデータを参照することはできますか?
具体的には、
open(WORK,"http://www.hogehoge.net/foo/baa.txt");
みたいな事です。
0587nobodyさん
2005/09/26(月) 02:22:09ID:???なぜゆえ・・・
0588nobodyさん
2005/09/26(月) 02:59:24ID:???0589nobodyさん
2005/09/26(月) 04:43:37ID:???0591nobodyさん
2005/09/26(月) 17:53:48ID:???チェックボックスでデータを受け取って
HTMLの確認画面に反映させるプログラムを作っているのですが
行き詰まりました。
例えば、course1,course2,course3とあってcourse1とcourse3がチェックされたら
course2のところが空白で反映されます。
ex.)HTML出力画面
course1
course3
こんな感じになります。
この空白を詰めて
course1
course3
みたいな風に出力したいのですがどのようにすれば良いでしょうか?
0592591
2005/09/26(月) 17:54:19ID:???if($FORM{'course1'} ne "on"){
print "<TR><TH ALIGN=\"right\" VALIGN=\"top\">希望コース:</TH><TD>\n";
print "$HTML{'course1'}\n";
print "<INPUT TYPE=\"hidden\" NAME=\"course1\" VALUE=\"$FORM{'course1'}\">\n";
print "</TD></TR>\n";
}
if($FORM{'course2'} ne "on"){
print "<TR><TH ALIGN=\"right\" VALIGN=\"top\"></TH><TD>\n";
print "$HTML{'course2'}\n";
print "<br>";
print "<INPUT TYPE=\"hidden\" NAME=\"course2\" VALUE=\"$FORM{'course2'}\">\n";
print "</TD></TR>\n";
}
0593nobodyさん
2005/09/26(月) 18:03:42ID:???>>592も質問するには情報足らないので、エスパーのフリをしてみる。
foerach ('course1','course2','course3') {
if ($FORM{$_} eq "on") { next; }
print "<TR><TH ALIGN=\"right\" VALIGN=\"top\">希望コース:</TH><TD>\n";
print "$HTML{$_}\n";
print "<INPUT TYPE=\"hidden\" NAME=\"$_\" VALUE=\"$FORM{$_}\">\n";
print "</TD></TR>\n";
}
これでまず問題点を切り分けてくれ。
0594nobodyさん
2005/09/26(月) 18:16:11ID:???思うにそれは空白をつめて表示させるためにはどのようなHTMLであるべきか
という問題であって、それさえわかってしまえばその通り出力するプログラムを
書けばいいだけだから、まずHTMLに詳しい人がいるところで質問するのが
スジってもんじゃないだろうか。ここにもいるかもしれないけどさ。
0595591
2005/09/26(月) 18:19:54ID:???ありがとうございます、無事に動きましたw
エスパーですね!
すみません、情報不足で・・。>>594さんが書いた通りです。
>>594
すみませんでした。 orz
0596nobodyさん
2005/09/26(月) 18:27:36ID:???変数以外で同じ文字を出力する場合とかは、とりあえずループにかければ問題点は見つかる。
コピペしたつもりでも、うっかりで変わってたりするから。
0598nobodyさん
2005/09/26(月) 21:18:44ID:Q7jBJFo3<TR>
<TH ALIGN="right" VALIGN="top">希望コース:</TH>
<TD>
$HTML{$_}
<INPUT TYPE="hidden" NAME="$_" VALUE="$FORM{$_}">
</TD>
</TR>
END
エスケープとかprint連記とかキモイからこれぐらいスッキリしてもらえる?
いや、オナニーだけどさ。
0599nobodyさん
2005/09/26(月) 21:48:52ID:fXbmUf3O0600nobodyさん
2005/09/26(月) 22:27:10ID:???ヒントをいただきたく思っております。
cgiで書き出すhtmlページ page1 → page2 に進んで、 page1に戻ったときに 「あんたpage2に進んだからもう戻れないよ!!」
ってやりたいのですが、
集めた情報では cookieでセッション管理して、page1でcookie → page2でcookieになんか値を持たせる。
でもってpage1に戻ったら値違うからダメよ!みたいなことをしろ!!
とあったのですが、どんなソースなのかさっぱりです。。
どなたか道しるべいただけませんでしょうか?所謂ブラウザの戻る制御みたいなことなのですが、
phpではなく perlでやりたいです。
野暮な質問ですいません。何卒宜しくお願いいたします。
0601nobodyさん
2005/09/26(月) 22:38:13ID:???その集めた情報の意味がわからないなら、ここで聞いても意味がないと思います。
クッキーの保存と呼び出しの勉強をしてきてください。
ついでに、ブラウザの戻る進むでは意味がないのであしからず。
0602nobodyさん
2005/09/26(月) 22:44:25ID:???ブラウザのバックはjavascriptで消せる。
Cookieの送り方が分からないんじゃどうしようも無いがな。
0603nobodyさん
2005/09/26(月) 23:05:12ID:???http://www.google.com/search?num=50&hl=ja&q=perl+%E3%82%AF%E3%83%83%E3%82%AD%E3%83%BC&lr=lang_ja
0604nobodyさん
2005/09/26(月) 23:07:24ID:???レスありがとうございます。
最近cookieの勉強を始めたばかりなので、ほんとに基本しか知らないのですが、
この場合は、NAME= 値(たとえば1)、 print "path=", "/page2 "; でpage2に値を持たせて。。
戻ったときにエラーを出す方法がよくわからないのですが。。。勉強不足ですいません。
0606nobodyさん
2005/09/26(月) 23:45:44ID:???いやいや、俺始めてクッキーを知った日に応用は出来なかったけどそれぐらいの事は出来たが・・・・
まぁ>>601氏の言うようにブラウザの戻るはキャッシュがほとんどなので(略
0607nobodyさん
2005/09/27(火) 09:58:18ID:???http://perldoc.jp/docs/modules/CGI-Session-3.11/Tutorial.pod
http://perldoc.jp/docs/modules/CGI-Session-3.11/Session.pod
これでセッションは、だいたい分かると思うけど。
0608nobodyさん
2005/09/27(火) 23:34:13ID:1E14u9Kmこれがおかしな挙動を見せるのでググってみたところ、
%は%%でエスケープすることを学習したのですが、
$sql =~ s/(\\|\'|%%|\,)/\\$1/g;
こうした場合、「%」1つの入力であれば正常にエスケープされるように
なってのですが、「%%」と入力するとなぜか\\%%になってしまいます。
ご教示いただけますと非常に助かります。
0609nobodyさん
2005/09/27(火) 23:41:28ID:???$sql =~ tr/\'%,/\\\'\%\,/;
それと安易にエスケープするな\Q使え
0610nobodyさん
2005/09/27(火) 23:56:08ID:???早速のご返答有難うございます。
しかし、「\\\\\'''''%%%%%」と入力したところ、
「\\\\\\\\\\'''''%%%%%」となりました。
前の\のみエスケープされているみたいです。
0611nobodyさん
2005/09/28(水) 00:02:13ID:???$sql =~ s/\Q(\\|'|%|,)\E/\\$1/g;
これですと
「\\\\\'''''%%%%%」は「\\'''%%%%%,,,,,」になってしまいました。。
0612nobodyさん
2005/09/28(水) 00:07:50ID:???0613584
2005/09/28(水) 00:12:25ID:???LWP・・・。
プロレス団体みたいですね。
0614nobodyさん
2005/09/28(水) 00:14:48ID:???0615nobodyさん
2005/09/28(水) 00:46:08ID:???よくわかりませんが、
$sql =~ s/(\\|\'|\\%|\,)/\\$1/g;
にすることによって解決しました。
お騒がせしました。
■ このスレッドは過去ログ倉庫に格納されています