Perlコーディング初心者質問スレ Part 50
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/06/26(月) 00:46:38ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0759nobodyさん
2006/07/20(木) 12:01:19ID:WCdGbBzjところが、openでエラーになります。
majordomoのファイルが
オーナー:mail
グループ:deamon
属性:777
なのが原因だと思うのですが、このファイルを上記条件から書き換えるようにするには、cgiのプログラム
からどのようにしたら良いでしょうか?
0760nobodyさん
2006/07/20(木) 12:12:22ID:???$!の値も示せよ。
0761756
2006/07/20(木) 12:13:08ID:OwGfxror0762nobodyさん
2006/07/20(木) 12:16:44ID:???その理屈ならYAHOOは死刑になっちゃいそうな勢いだな。
あんな有名なサイトが無許可で他人のサイトのアドレスを晒しまくって。
とりあえず削除申請してこいよ。
0763756
2006/07/20(木) 12:24:17ID:OwGfxror荒れるから止めて欲しいのですm(__)m
私あてのレスです。
本人である私がスルーしてるのですから、察してくださいませんか。
宜しくお願いします。
0764nobodyさん
2006/07/20(木) 12:35:40ID:???system('perl access.cgi');とか?
というか、そのaccess.cgiの返してくる画像は必要なんですか?
画像だけが、必要なら<img src="access.cgi">とか?
でも、そのくらい知ってそうっていう雰囲気ですよね・・・・・・・・
なんだろう・・・
0765756
2006/07/20(木) 12:46:10ID:OwGfxror言葉足らずだったかもしれません。ごめんなさい。
access.cgiはアクセスログを取っていくcgiなんです。
test.cgiは今仮で作ってるアクセス解析cgiなんです。
test.cgiからaccess.cgiを呼びたいのは最新の情報を読みたいからなんです。
つまりaccess.cgi直後のaccess.logが一番精度が高いわけです。
秒単位で誰がどこにいるかを表示してますので意外と重要なのです。
ですからaccess.cgiからの戻り値はまるでいりません。
要はaccess.cgiに処理をさせればいいだけなんです。
それこそ最悪access.cgiの中身をtest.cgiに書いて解決です。あまりにひどい決着ですが。
返してくるgif画像自体はまるでいりません。
長文すみません。ご飯を食べてまいります。
0766nobodyさん
2006/07/20(木) 13:09:01ID:???0767756
2006/07/20(木) 13:10:51ID:OwGfxrorexampleですね。ありがとうございます。
以後そういたします。
0768nobodyさん
2006/07/20(木) 13:13:04ID:???その前になぜかむかつくんだがなんでだぜ?
0769nobodyさん
2006/07/20(木) 13:20:02ID:???0770759
2006/07/20(木) 13:32:32ID:WCdGbBzj権限の問題だと思うのですが・・・どうすれば処理できるでしょうか?
0771756
2006/07/20(木) 13:32:50ID:OwGfxror呼び出したいがためだけにaccess.cgiに手を加えるのは避けたかったです。
他のケースのときでも全部そうなってしまうのは愚の骨頂みたいに思ってましたが
その認識が間違ってるのですかね。
ちょっとガッカリです。
0772nobodyさん
2006/07/20(木) 13:37:48ID:???0773nobodyさん
2006/07/20(木) 13:38:45ID:???ファイル自体が777なのでそれは問題ないと思うから経由するディレクトリだろうな。
どういう風にパス指定しているのかは知らないが関係するディレクトリを全部確認してみ。
0775nobodyさん
2006/07/20(木) 13:44:36ID:???へぇ。Operaは何がしたいんだろう・・・・
そもそも偽装するなよって話だよな。製作者への嫌がらせとしか思えない。
製作者協会とかあればなぁ。ふざけた実装を排除していけるのに。
>>768
まあまあ。今日はなかなかすごしやすい気温なんだからおっとりしようぜ
0777nobodyさん
2006/07/20(木) 13:48:44ID:???0778756
2006/07/20(木) 13:55:49ID:OwGfxrorいえ、それは勘違いですよ・・・(´・ω・`)
0779nobodyさん
2006/07/20(木) 13:58:35ID:???UAにIEを含んだらヤフにでも飛ばしたろとか思ったことあるはずだ
0780nobodyさん
2006/07/20(木) 14:05:54ID:???違うよ。
>>779
ん?なんか変だぞ?
そもそも「XHTML+CSSで凝ったサイト作ろうと」ってのがどうなんだろうか。
XHTMLやCSSは目的を果たすための一つの手段に過ぎないというのに、
その手段を目的としてるということは、何かを伝えたいんじゃなくて、使いたいだけという可能性もあるな。
それこそIEの挙動なんて無視すればいいじゃない。使いたいだけなんだから。
なんちゃって。人間がそれほど単純なら苦労はないよね。
やっぱり制作協会ってのがあればいいと思うんだよな。
0781nobodyさん
2006/07/20(木) 14:08:55ID:???0782nobodyさん
2006/07/20(木) 14:10:18ID:???access.logの内容はIPとかUAとか時刻とかがずらずら並んだ状態ですか?
もしそうだったら、別にいつ読み込んでも、新鮮とか新鮮じゃないとか
関係ない気がしますが・・・
それとも、なんか特殊な、フォーマットのデータがaccess.logには含まれてるんでしょうか?
0783759
2006/07/20(木) 14:11:14ID:WCdGbBzj/usr/local/majordomo/lists/ なので上位全ての777にするのは気がひけます。
listsだけは 777 にしみましたが、同じエラーでした。
linuxのfs設定で何かあるのでしょうかねぇ?
0784756
2006/07/20(木) 14:14:40ID:OwGfxrorありがとうございます。
ずらずら並んだ状態です。
アクセス時刻ももちろん並んでおります。アクセス時刻が一定を過ぎると削除し
リアルタイムで誰がどこにいるかをある程度特定するアクセスプログラムになっております。
ですので新鮮さは重要なのです。
でももう最悪の方法で片付けてしまいました。せっかくご親切に気に掛けていただいたのにすみませんです。
access.cgiの一部をそのままコピペしましたtest.cgiにorz
0786nobodyさん
2006/07/20(木) 14:19:19ID:???また同じこと繰り返すことになるぞ
0787nobodyさん
2006/07/20(木) 17:29:45ID:gqKAMnqO1)combbslog.cgiというファイルを一行読み込んで
$rl,$yl,$gl,$wl,$blにそれぞれの値を代入して
すべてが1より大きければ実行する。
プログラムを書いてみたつもりです。
ちなみにcombbslog.cgiの中身は
<>1<>3<>1<>1<>1<>
↑こんな感じです
2)open(IN,"combbslog.cgi") || &error("Open Error: combbslog.cgi");
local(@file) = <IN>;
close(IN);
local($rl,$yl,$gl,$wl,$bl) = split(/<>/);
if(($rl > 1) && ($gl >1) && ($yl > 1) && ($wl > 1)){実行したい内容;}
3)とくにエラーなどは出ないのですが条件を満たしていても実行されません。
ファイルを読み込む当たりが良くわかっていないのでそのあたりがおかしいのではないかと思っています。
どこかおかしいところがありましたら教えてください。
0788nobodyさん
2006/07/20(木) 17:38:15ID:???とりあえず
print $rl,$yl,$gl,$wl,$bl;
してみろ
0789nobodyさん
2006/07/20(木) 17:44:06ID:???if文の所。
>
の演算子の意味はわかってるよね?1には反応しないよそれじゃあ。2からだな
だからファイルの中身が全部2以上なら実行されるだろうね。
0790nobodyさん
2006/07/20(木) 17:48:57ID:???$rlの値がいつも空になると思うよ。
split(/<>/) だと
$rl<>$yl<>$gl<>$wl<>$bl<> こうでしょ。
>>788
> データファイルに*.cgiという拡張子をつけるのはおかしい。
( ´_ゝ`)・・・
>>789
すべてが1より大きければ実行する。ってことだからいいんじゃないの
0792787
2006/07/20(木) 18:00:12ID:???とりあえず全部2以上にしてみて
あと$rl<>$yl<>$gl<>$wl<>$bl<>にしてみますね
0793787
2006/07/20(木) 18:13:32ID:gqKAMnqO上記のことをやってみましたが出来ませんでした・・・
ためしに
print $rl,$yl,$gl,$wl,$bl;
しても何も表示されなかったのでどこか他のところがおかしいのかな?
以下にプログラム全文載せますので、もしよろしかったらまたお願いします。
-selectcol.cgi-
#!/usr/bin/perl --
open(IN,"combbslog.cgi") || &error("Open Error: combbslog.cgi");
local(@file) = <IN>;
close(IN);
local($no,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$tim,$rl,$yl,$gl,$wl,$bl) = split(/<>/);
print $rl,$yl,$gl,$wl,$bl;
__END__
-combbslog.cgi-
1<>2006/07/20(Thu) 00:06<>blackh.gif<><><>北朝鮮がミサイルを発射することで国際社会からより疎外されている<><>127.0.0.1<><>1153321603<>2<>2<>2<>2<>2<>
0794nobodyさん
2006/07/20(木) 18:17:11ID:???.r‐――'i / > _ ,ノ~';;. .....,,、 l´゙|゛ |´゙l゙ ,,,,,,,...... --、,
. ̄ ゙̄} | / ./ .;;./ '、 / ,./ ,! ./____| |__________、 ,,............-! !ー'''"゙.l .ヽ --‐= /
.r‐―" |'l゙_,,, ̄'i --、'ッ / / ./ ...........、 ,,................,! ゙‐'ー''''''''''、 '.l゙´_,,,, 、 /./
l |゙゙゙゙"'".._.... ! .|........ニ / / / / || .l'''''''''''''''''''_.゛,,.... --′ ./ .イ-―ー 、
! .―--ィ .! .r‐''i .r‐‐i ! ..l ヽ. ゙'/l'''''''''''''′゙'''''''''''''''i `゙゙゙゙゙゙´゙_,゙,゙,,,,゙;;..\, ./ ,..-''''^゙゙゙゙゙''''、 ヽ
.゙‐'"^゙| ! .| .゙‐'''" !―" | \ .\. `゙゙゙゙゙゙゙゙゙| .!゙゙゙゙゙゙゙゙゙´ ,r'",, ---- ..,,/ < / .| |
.| ! .゙‐'゙゙゙゙゙! .!゙゙.l゙'│ .\. ゙'-, ,! ! ! l゙ ゛ ._./ ./
.,,,,,,,ノ !.r‐―ー" ゙''二、ヽ .\ .゙> .!^^^^^^^^^゛ `^^^^^^^^.! .\`'''''''''''''''''''''> 'l'''''''''^゙゙_,,..-'゛
.ゝ--‐゛ ゙‐''"゙ ̄´゛ `'´ ` . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄゛ `゙゙''''''''''''''''"  ̄ ̄゛
0795nobodyさん
2006/07/20(木) 18:19:15ID:???local(@file) = <IN>;
ぢゃなくて
@_ = <IN>;
なら動くんで内科医?
0796nobodyさん
2006/07/20(木) 18:19:15ID:???あえてソコだったんだがただのかわいそうな人になってしまったw
0798787
2006/07/20(木) 18:25:43ID:gqKAMnqO>>795さんのいうとおりにしたら
error500
CGIエラー-Content-Typeヘッダが正しくありません。
とでてしまいました。これはどういうことでしょうか?
0799nobodyさん
2006/07/20(木) 18:25:51ID:???おかしいと思う理由が知りたいんだが
0800nobodyさん
2006/07/20(木) 18:27:34ID:???0801nobodyさん
2006/07/20(木) 18:29:28ID:???っつーかもう触れないでくれw
どおりで俺の冗談には誰も笑わないわけだ
0803nobodyさん
2006/07/20(木) 18:32:45ID:???> close(IN);
> local($no,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$tim,$rl,$yl,$gl,$wl,$bl) = split(/<>/);
$_ に何入ってんだよwww
foreach (@file) {
local($no,$dat,$nam,$eml,$sub,$com,$url,$hos,$pw,$tim,$rl,$yl,$gl,$wl,$bl) = split(/<>/);
・・・
}
こうしたいんじゃねえのかい?
0804nobodyさん
2006/07/20(木) 18:33:56ID:???0805nobodyさん
2006/07/20(木) 18:34:18ID:???print "Content-type: text/html\n\n";
を出力の前に入れないと駄目でしょ。
それと>>793が全文だとすると、sub error はいずこへ
0807nobodyさん
2006/07/20(木) 18:35:31ID:???ブラウザでやってんの?
なら
つ【print "Content-type: text/html;\n\n"】
0808nobodyさん
NGNG0809787
2006/07/20(木) 18:41:17ID:gqKAMnqOパーミッションの設定はまだ関係ないですよね。
0810787
2006/07/20(木) 18:44:23ID:gqKAMnqO>>803さんや>>805さんのとおりにしてみたらエラーは出なくなりました。
ただ何も出力されてきません。
0811nobodyさん
2006/07/20(木) 18:48:34ID:???とりあえず
open(IN,"combbslog.cgi") || &error("Open Error: combbslog.cgi");
print <IN>;
close(IN);
とかからやってみたら。
あと無意味に local 使ってるのが kentくさくてイヤ。
0812787
2006/07/20(木) 18:51:54ID:???はい、デバックは自分で頑張ってみますね。
Kentさんのところをすごく参考にしていたのでそうなってしまいました。
0813787
2006/07/20(木) 18:55:45ID:gqKAMnqOファイルを読み込むとき
最初の一行だけを読み込むとか出来ますか?
0814789
2006/07/20(木) 18:57:06ID:???まあ雨がひどいからな。
0815nobodyさん
2006/07/20(木) 18:58:03ID:???$data = <IN>;
close(IN);
0817787
2006/07/20(木) 19:02:37ID:???雨の日でよかったです。
0818787
2006/07/20(木) 19:18:46ID:???本当にありがとうございました。
花火大会を中止に追い込んだにっくき雨でしたが、
いまでは感謝しています
0819nobodyさん
2006/07/20(木) 19:47:26ID:???0821nobodyさん
2006/07/20(木) 20:18:14ID:???0822nobodyさん
2006/07/20(木) 23:14:01ID:???IE7って最高だな。
0823nobodyさん
2006/07/20(木) 23:25:57ID:???0824nobodyさん
2006/07/20(木) 23:27:54ID:???0825nobodyさん
2006/07/20(木) 23:55:28ID:???0826nobodyさん
2006/07/21(金) 01:52:13ID:VvqLR3Fu例えば、「この文字列はindex.cgiの563行目で出力されました」と動的に出力できますか?
0827nobodyさん
2006/07/21(金) 01:53:59ID:???0828nobodyさん
2006/07/21(金) 01:56:42ID:???1: 自分は明日休みで暇だから・・・
2: なんかおまいらにコーディングの問題でも出して・・・
3: みようかな・・・
問題
・DATログをGrepして表示する
・検索語は任意の文字
・表示方法は100個づつ
最速コーディング達成者には妹の入浴画像を賞品(ry
0829nobodyさん
2006/07/21(金) 02:00:29ID:???おお!感動しました。そんな簡単にできたんですね。
エラー処理関数内でdieしたらデバッグの役に立たない行数がログに残るので
その対策をと考えておりました。ありがとうございます!
0831830
2006/07/21(金) 02:20:35ID:???呼び出し元の行をログに書きたいならcaller関数をあたると良い。後Carpモジュールも
0832nobodyさん
2006/07/21(金) 02:24:01ID:???丁度、callerを発見して感動して、その報告をしに来たところでした。
ありがとうございます!
0833nobodyさん
2006/07/21(金) 03:50:54ID:???0834nobodyさん
2006/07/21(金) 10:04:09ID:???注文こねえかな
0835nobodyさん
2006/07/21(金) 10:25:40ID:???チェックされた項目は別ファイルに時刻付きで書き出すつもりでした。
2. ttp://marco.s4.xrea.com/cgi-bin/check/check.cgi
を元にいろいろ変えて見てます。
3.入力フォームからpostでデータを渡して、表示上はどのチェックボックスもオンではないのに、
ブラウザをリロードすると、前にチェックされたデータが再度チェックされてます。
これは、どうしてでしょうか?
初心者で、不具合をうまく言えなくてごめんなさい。またこちらでの書き込みが不適切でしたら、該当スレをご教示いただければ有りがたく存じます。
下記は、ソースの一部分です。
print "<form action=$script method=post>\n";
print "<tr><td bgcolor=$page_color><font color=$bg_color>Check</font></td>\n";
print "<td bgcolor=$page_color><font color=$bg_color>項目</font></td></tr>\n";
open(LST,"$listfile");
@LIST=<LST>;
close(LST);
$cnt=0;
foreach (@LIST){
chomp($_); #chomp 行末の改行を削除
$cnt++;
print "<tr><td><input type=checkbox name=chk$cnt value=1";
print "></td><td><b>$_</b></td></tr>\n";
}
print "</table>\n";
print "<input type=hidden name=checkcnt value=$cnt>\n";
print "<input type=submit value=送信>\n";
print "</form>\n";
0836nobodyさん
2006/07/21(金) 10:31:20ID:???http://pc8.2ch.net/test/read.cgi/php/1141174205/
0838nobodyさん
2006/07/21(金) 12:09:34ID:NKhAgGvd入力されたURLが正しいURLかを判断するソースはどのようになるのでしょうか?
メールアドレスを判断するスクリプトは何とか分かるのですが、
URLとなると・・・どのようにしたらよいか・・・・
0839nobodyさん
2006/07/21(金) 12:17:55ID:???ttp://www.din.or.jp/~ohzaki/perl.htm#httpURL
まあここまでやらなくてもいいと思うが
0841nobodyさん
2006/07/21(金) 12:25:52ID:???とよくバカにされるんですが、どうしたら良いでしょうか?
0842nobodyさん
2006/07/21(金) 12:30:03ID:???スレ違い、そしてその人は無知
ttp://www.kanzaki.com/docs/html/htminfo-uri.html#uri
ttp://www.alib.jp/html/uri.html
0843nobodyさん
2006/07/21(金) 12:31:22ID:???0844nobodyさん
2006/07/21(金) 12:59:56ID:???0845nobodyさん
2006/07/21(金) 15:15:48ID:???--ここから--
my $param = '123a456';
my $n = '';
for (;;) {
$param =~ s/[0-9]+//;
$n = defined($&) ? $& : '';
print 'debug $n='.$n.' $parm='.$param."\r\n";
last if ($n eq '') ;
}
print 'end';
--ここまで--
とりあえず for(;;0) のように第三パラメータになんでもいいから
突っ込めば $& が再評価されてループを抜けるのはわかったが、Bad
Know-How くさいので正しいコードを誰か教えて。
0846nobodyさん
2006/07/21(金) 15:33:56ID:bw5ViySCというのを正規表現で書くとどうなりますか?
0847nobodyさん
2006/07/21(金) 15:36:13ID:???こうやったけどこうなってできませんでした、とか
0848nobodyさん
2006/07/21(金) 15:39:23ID:???$&はThe string matched by the last successful pattern match なので
マッチしなくて置換が行われなかったときに値が変わるのを期待する方が
危険な気がする。s///は置換に成功したかどうかを返すのでそれで分岐
するのが筋じゃないかと。
forの第三パラメタがあったときに値が変わるほうがむしろ不思議だな。
どっちにしろ成功したパターンマッチのすぐ後以外のところでマッチ関係の
変数($<数字>とか$&とか)を使うのは怖いので自分ならしない。
0849846
2006/07/21(金) 15:49:32ID:bw5ViySC$moji =~ s/ / /g;
my ($temp undef) = split(/ /,$moji);
0850845
2006/07/21(金) 16:05:32ID:???サンクス
$& はマッチしなかった場合 undef になるというのをどっかで読んだんだが。
defined($&) の条件分岐はしないほうがいいてこと?でも for(;;0)のときには
ちゃんと評価されるのが謎なんだよな。
0851nobodyさん
2006/07/21(金) 16:08:33ID:???perl -MO=Deparse foo.plで for(;;) とfor(;;1)を比べてみたが、
for(;;)の方は単純に
while(1) { ... }
になるのに対して、for(;;1)の方は
while (1) { do { ... }; '???'; }
となってループ内の実行文がdo ブロックの中に入るかたちに
なっていた。このためfor(;;)の方では最後に成功したマッチが
456の置換になるのに対して、for(;;1)の方ではこのループに入る
前(一度もないのでundef)になるのだろうと思われる。
ちなみに、プログラムの先頭に 'hoge' =~ /.*/; を追加して
for(;;1)を試すと3回目からhogeになる。
0852845
2006/07/21(金) 16:35:45ID:???my $param = '123a456';
my $n = '';
while (1) {
last unless ($param =~ s/[0-9]+//);
$n = $&;
print 'debug $n='.$n.' $parm='.$param."\r\n";
}
print 'end';
0853nobodyさん
2006/07/21(金) 17:08:27ID:???my $param = '123a456';
my $n = '';
while ($param =~ s/[0-9]+//) {
$n = $&;
print 'debug $n='.$n.' $parm='.$param."\r\n";
}
print 'end';
0856nobodyさん
2006/07/21(金) 18:49:30ID:???s/\s.*//; かな? split を使うなら、第三引数に1がいいかも
>>853
my $param = '123a456';
while ($param =~ s/([0-9]+)//) {
print 'debug $n='.$1.' $parm='.$param."\r\n";
}
$& を使うと全体が遅くなるから、キャプチャした方が良くない?
0857nobodyさん
2006/07/21(金) 19:06:38ID:???0858nobodyさん
2006/07/21(金) 20:22:51ID:???余程凄いもん作るわけ?
俺はちょくちょく書き換えるから最適なコードなんて求めない。
早く仕上げることの方が面白いしね。
漫画みたいにズダダダダダーって物事を進めていくのが面白いんだよ。
っていうか画像サイズとかをかんぺきにするだけでじゅうぶんだそ。
■ このスレッドは過去ログ倉庫に格納されています