Perl コーディング初心者質問コーナー Part26
あぼーん
9 :
nobodyさん :03/07/24 21:45 ID:Wz9DxOV5
srand は rand が正確になったもんなんですか? rand の変わりに srand を使えば良いんですか?
10 :
nobodyさん :03/07/24 21:49 ID:Wz9DxOV5
いや違いますね。
11 :
nobodyさん :03/07/24 21:56 ID:wyC1cRIx
>>9 Perl4までは、srandで一旦初期化する必要があったのだ
しかし5からはsrandはいらない
変数の名前を取得するにはどうすればいいですか? $xxxx="test"; $nameに"test"なく"xxxx"を代入したいんですが・・・。
13 :
nobodyさん :03/07/24 22:00 ID:Wz9DxOV5
>>11 有難うございました。
ところで、そのPerl4かPerl5かは、
どこで分かりますか?
>>13 perlのバージョンもわからずにコード書いてるのかい?
もう4は少ないだろうが、もしそうだったら大きな影響があるのだから
先にそういうことは知っておくこと
>>12 どういう場面でそれが必要になるのか分からん……
18 :
nobodyさん :03/07/24 23:20 ID:2xdh5YDx
プログラム全体でなく、あるディレクトリ だけロック処理をしたいんですが、 その場合にはどうしたら良いのでしょうか?
あぼーん
>>21 それならどういうケースでそんなことしたいか説明してくれ
サンプルのソースを添えてな
>>12 変数の名前はプログラムを書いた人が知ってるから、調べなくてよい。
乱数の話しもう終わったかな。 おれはいつも、 rand(time*$$)ってやってるけど。。。
あぼーん
>>25 それは意味のあるものが返ってくるのか?
じゃなくて、、、コンピューターが出せる乱数は(rand())、擬似乱数なんだ、
ということを認識していないと、おもしろいことをされる可能性がある。
要約すると、srand()で/dev/randomを使おう!
前スレで既出だった模様…
>>23 12にそういうコードを教えるのはよくないと思うぞ
CGI.pm なんて使ってねーしぃ
>>32 start_form()使ってないですね。
フォーム生成にCGI.pm使います?
>>12 意図がつかめない…。
具体的に何をしたいかを書くと答えが得られるかもね。
多分、ハッシュを使うと解決しそうな問題な気がする。。
>>28 既にデフォルトのseedは/dev/randomがあれば/dev/randomを使うようになってる。
Windowsとかだとどうしようもないけどね。
CGI.pm はフォームのデータをひらったり、クッキーを作ったりするのに 使ってたりする。 HTMLを生成するのには使ってない。。。だって 手で直接打った方が早いし、外部テンプレにしたら もっと楽だし
>>12 って超初心者でプログラムの流れをうまく書けなくて
あんなこと思いついただけのような気がする
>>39 38の言ってることが当たりなのか?12よ
すみません、教えてください。 <FILEHANDLE> while ( $count-- < 0 ); ってやったあと、tellしたら、データのバイト数分の値がでたんです。 これはFILEHANDLEで指定しているファイルを1行ずつ読んでるんだと思うんですが、 $_には入ってないみたいなんです。 いったい読み込んだデータはどこいっちゃったんでしょう。
それ、ほんとに1行ずつ読んでると思うか?
>>43 いや、読んでない。
(正確には、読んでるけど全部捨ててるようなもの)
基本的なファイルの読み方をもう一度おさらいしてみよう。
はい、なんとなく思います。
48 :
12 :03/07/25 02:56 ID:???
なんとなく読みこんでるとおもったんですが、、、
どひゃー
51 :
43 :03/07/25 03:05 ID:???
43 ne 12 です。
>>45 >>46 ファイルは、$/をセパレータに、なんというか、セパレータまでのデータを
1行として、そこまでを評価していくんだと思います。
その、全部捨ててるっていうのがなんというか、腑に落ちないんです。
あの、ダンプでしたっけ?PERLがなにやってるかを逐一ログに残すやつ。
それを見たら少しは理解できるとおもうんですが、
abnormal program termination
ってでちゃうんです。
困ったなあ
あぼーん
53 :
38 :03/07/25 03:15 ID:???
すまん。俺も超初心者なんだ・・・。
>>51 単に1行読むたびに$_に代入されるから、直前に読んだデータが上書きされてるだけ。
それが見かけ上「捨ててる」ってこと。
んでEOFまで逝っちゃうと、あとは何度読んでもundefが返ってくる。
それと、普通はwhileの条件式に<FILEHANDLE>を書いてループをまわすものだけど、
謎の変数$countでまわしてる。これは一体どこから出てきて何が入ってるのか。
腑に落ちないって、どういう結果を期待してるの?まずそれを教えてよ。
>>43 そのコードに入る前の $count の値が 0 以上ならば $count-- < 0 は偽。
よって <FILEHANDLE> は一度も評価されないまま while から抜けるから、
これ以前に読み込んでいないなら tell は -1 を返す筈。
$count の値が 0 未満なら無限ループ。
あと行入力演算子が $_ に自動で代入してくれるのは while の条件部に
書いた時のみ。
56 :
38 :03/07/25 03:54 ID:???
すみませんでした。 なんとなくで、分かりにくい説明ありがとうございました。
57 :
54 :03/07/25 03:55 ID:???
>あと行入力演算子が $_ に自動で代入してくれるのは while の条件部に >書いた時のみ。 あ、ほんとだ。リファレンス本見たらそう書いてあった…… おいらも適当なこと言ってすまんかった。反省。そしてありがとう。
質問に混じって茶々入れまでしてるのかよ まじめにやれや
59 :
38 :03/07/25 04:21 ID:???
すみませんでした。
60 :
nobodyさん :03/07/25 04:22 ID:4OBr2CQn
要は… $lolita = <FILE>; こういうコードがどういう動きをするか理解しないとだめだ
"12<>34"という形のデータを左側優先で大きい順に並べ、 左の値が同じなら、右の値の大きさの順に並べるプログラムを作ろうと思うのですが ヒントをください。 "1<>9" "2<>3" "8<>4" "2<>8" "8<>8" を "8<>8" "8<>4" "2<>8" "2<>3" "1<>9" と並び替えるようなものです。
64 :
43 :03/07/25 07:30 ID:???
>>54-57 すみません。説明不足でした。
やりたいのは、ファイルの読み飛ばしです。
$count=10だとすると、
11行目以降のファイル内容を取得することなんです・
<FILEHANDLE> while ( $count-- < 0 );
としたあとで、
push(@line,scalar(<DAT>)) while($line-- > 0); #$lineは$count以降の取得したい行数
ってやると、ちゃんと11行目以降の内容が@lineにはいるんです。
つまり<FILEHANDLE>に対するファイルポインタは、巻き戻ってないから、それを
逆に利用してるんだそうです。
で、腑に落ちないのは
>あと行入力演算子が $_ に自動で代入してくれるのは while の条件部に
>書いた時のみ。
ってところで、$_に代入しなきゃどこに入れてるんだ、っていうことです。
PERLの、なんというか一時記憶領域みたいなものに入れてるんでしょうか。
あと、$_に代入しない場合でも、やっぱり1行ずつ読んでるんですよね???
結果はいいけと、PERLがやってることがなんとなくでも理解できないと、
応用できないんかなって。
あぼーん
あぼーん
| <FILEHANDLE> while ( $count-- < 0 );
…これで動いてるって?
既に
>>55 で指摘されてるけど、比較演算子が逆じゃない?
| ってところで、$_に代入しなきゃどこに入れてるんだ、っていうことです。
| Perlの、なんというか一時記憶領域みたいなものに入れてるんでしょうか。
そうだよ。
<FILEHANDLE>ではなく、readline(FILEHANDLE)と関数呼び出しとして書くと分かるかな?
ついでに言うと、print()とかも成功/失敗を知らせる値を返してる。
大抵は必要ないから即座に捨ててるだけで。
>>64 最初からその2行のコードと説明してくれれば早かったのに。
$_ を気にしてるようだが、$_ には読み込まれないから考える必要はない。
scalar(<DAT>) ← これがミソで、リストである<DAT>を強制的に
スカラとして評価することによって<DAT>の1行だけを取得しているので
ここでは1行読み込みみたいな動きになる。
リストと配列って同じ意味ですか?
そんな事より、リファンレンスが解らない…(´д⊂ヾ
ああ、いけね なんでリストなんて書いちゃったんだろ
73 :
nobodyさん :03/07/25 16:09 ID:ysQnpLo4
ソースをSJISで書けといわれたのですが、「表」等の文字化け 対象文字列の扱いに困っております。 $htmlの中に「表」等の文字が入っている場合、 $html =~ s/5C/5C5C/sig; これで回避できるかと思ったのですが、どうもうまくいきません。 教えていただけたら幸いです。
\x5c
>>74 お返事有難うございます。
早速下記のようにやってみましたが、まだいかないようです。
$html =~ s/\x5c/\x5c\x5c/sig;
初心者で申し訳ないです、、、
>>75 $html = "表示";
この時点で、$html内には0x5cが含まれないことに注意。
あとは自分で考えてみて。
$html = '表示';
78 :
73 :03/07/25 17:23 ID:???
うーん、素で分かりません、、、 $htmlは、ヒアドキュメントを使って内部に変数が含まれて いるため、シングルクォーと等は使えません、、、 再度しばらく考えてみます、、、
ヒアドキュメントでソースに直で書いてるんなら、 表\示 でいいじゃん。
80 :
73 :03/07/25 17:48 ID:???
メンテナンスはプログラムが分からない人がやるので、 「表」や「能」等を平気で普通に使ってしまう可能性が あるため、最後にまとめて変換してしまおうと考えました。 出力形式は要望であるため、変えられないのが痛い です、、、
>>80 HTMLをヒアドキュメントではなく、外部ファイルにする。
これで解決。メンテナンス性もよくなって一石二鳥。
82 :
73 :03/07/25 18:00 ID:???
>>81 それが許されないからヒアドキュメントなのです。
できればそうしたいのですが、ロードバランサーを使用した
サーバ3台体勢なため、どんなに説明しても1ファイルで
完結してくれと、、、
すみません、無駄にスレ消費させているので書き込み自粛
します。
>>82 __DATA__ トークン以下に HTML データを書いて <DATA> で読む。
>>73 シングルクォートで囲んでおいて、変数部分を置換する。
85 :
nobodyさん :03/07/25 20:25 ID:cdWg8/H5
あるcgiでは<img src="$imgs/seee.png">できちんと画像が 表示されるのに、これでは画像が×印になってしまい 表示されません。何が抜けているのか何でも良いので 気付いた所を教えて欲しい。 sub wedd{ if(!$tpre){ $log .= "<img src=''$imgs/seee.png''><br>\n"; $tm=0; $trpe=''; } です。
>>85 サブルーチンだけでわかるわけないだろう
このサブルーチンを呼び出す前、あるいは呼び出した後のどこかが
おかしいだけ
$log .= "<img src=\''$imgs/seee.png\''><br>\n";
みんな釣られたんじゃないの?
>>87 は当然としても、エスケープしないと500エラーで
画像が×どころじゃないだろ
釣りで処理する回答者はいらね。
>87,>89 ダブルクォーテーション内のシングルクォーテーションを、しかも2個の内一つだけエスケープして意味あるのか? >85はただの間違い探しだろ。
$log .= qq{<img src="$imgs/seee.png"><br>\n}; これで何点貰えるのかなぁ。
94 :
nobodyさん :03/07/25 23:31 ID:uJCpPyXD
どこにシングルクウォーテーションがあるのかぜひ教えてもらいたいものだ
95 :
nobodyさん :03/07/25 23:32 ID:uJCpPyXD
クォー の間違いだ。スマソ
ここはクイズスレになったのか?
98 :
85 :03/07/25 23:59 ID:qXznWoh0
>>93 おお!
とりあえず、それで出来ました。
これで道は開けます。
どうも有り難うございました。
99 :
43 :03/07/26 00:58 ID:???
>>67-68 ありがとうございました。そうかreadlineか。PERLFUNCを読み直して
すっきりしました。
比較演算子は逆ですね。($count-- > 0)ですよね。
>>98 お前
>>85 のソースはコピペしたのか?
あと出力結果のHTMLソースは眺めたのか?
101 :
nobodyさん :03/07/26 03:55 ID:4h1zCzy4
perl5.005からしか使ったことがなかったのですが、 perl5.003の環境で使う状況になってしまいました、 5.003で使えない表現を纏めるにはどこをみれば良い でしょうか? また、HTML::Templateをつかいたいのですが、 対応していない表現が多いようで使えません。 書き換えることでつかえるようになるでしょうか?
あぼーん
あぼーん
あぼーん
106 :
nobodyさん :03/07/26 11:25 ID:NdYn8w9o
perlのインデントとhtmlのインデントについて皆様の意見を聞かせて頂きたいと 思っております。 昔C言語を少しだけ使っておりまして、その習性に引きずられてか、htmlを作るときは 何となくインデントさせていました。例えば <HEAD> <META HTTP-EQUIV="content-type" CONTENT="text/HTML;charset=euc-jp"> <TITLE>title</TITLE> </HEAD> の様にですね(無駄といえば無駄なんでしょうけど…)。 そして上記のhtmlをperlで出力させる際には、 #!/usr/bin/perl print " <HEAD>"; print " <META HTTP-EQUIV=\"content-type\" CONTENT=\"text/HTML;charset=euc-jp\">"; print " <TITLE>title</TITLE>"; print " </HEAD>"; 等と書いてインデントされた状態のhtmlが出力されるようにしていました。 しかしif文やfor文内にてhtmlを出力する処理となった場合等、perlのソースを インデントさせて、そこでまたさらにインデントされたhtmlを出力するために 文字列を記述していくと、なんだか非常に見づらいソースになってしまうように 感じてしまいます(ソース内でhtml部分のインデントが一致しない等)。 今後メンテするのはperlのソースなので、perlのソースとして読みやすいものにすれば よいと思うのですが、かといって出力であるhtmlが読みづらいとメンテが大変であるとも 思います。皆様どのように考えて作られてますでしょうか?
107 :
106 :03/07/26 11:42 ID:???
すみません、自己レスで一部修正します。 > print " <HEAD>"; print "<HEAD>"; ですね。 ソースからコピペして、インデントを全角スペースにする時に間違えました…
print でスタティックに html を出力するよりは別ファイルにしたほうがよくないか?
俺はperl自体の記述がもっとも見やすいようにしてる。 ループとかでテーブル生成、とかそーゆー時は、出力したところが見やすいようにする。 で、最終的にプログラムが完成し、出力するHTMLが意図した通りになったのを確認したら、 出力時のタブや改行などは全部消す(出力直前に正規表現で)。 文字のスペースは全て&nbsp;を使ってるからスペースも消す。
別ファイルにすれば見た目に悩まなくてすむと思うけど 行数も減って処理の流れが読みやすくなるし
111 :
106 :03/07/26 12:33 ID:???
>>108 >>110 別ファイルということは、やっぱりrequire文でhtmlを出力するためのスクリプトを
呼び出すということでしょうか?
いろいろとあたっている時に、
>>106 で例に挙げているようなスクリプトで
TITLEタグの内容を変数で与えてあげられるようにしているのをよく見てまして、
やっぱり処理部分と出力部分は分けたほうがいいのでしょうねぇ、と思っては
います。
ちなみに別ファイル内でのhtml部分のインデントはどうされていますか?
ヒアドキュメントは? またはprintの部分だけインデントしないとか。
113 :
106 :03/07/26 12:36 ID:???
>>109 デバッグ終了時に、出力時に不要な文字を消す処理を有効にする、という事ですか?
ちなみにそうなると、完成版が出力するHTMLはインデント無しですか?
>>112 そうですね。ヒアドキュメントも考えてみたのですが、bash等で使えるような
空白+終端文字列(<<-でしたっけ?)等が無さそうで、難儀しています…
>>111 ファイルオープン→読む→出力→ファイルクローズだと思うけど。
>>114 bashでシェルスクリプト組んでるの?
ちょっと良くわからない。。
>>115 > ファイルオープン→読む→出力→ファイルクローズだと思うけど。
それだと、外部ファイルをそのまま出力という形になって、例えばファイル中に
変数を仕込んでおいて、その変数の値を表示させる…等という事をしたい場合、
何か上手い方法はありますか?sed的な置換を駆使でしょうか?
>
>>114 > bashでシェルスクリプト組んでるの?
実はOSがVineLinux2.6R1でして、/bin/sh -> bashとなっているので…
117 :
109 :03/07/26 13:15 ID:???
俺の場合、単純なのなら >ファイルオープン→読む→出力→ファイルクローズだと思うけど。 これと同じようにしてる。 ただ、やや複雑になってきたりするとやっぱプログラム内で生成する。 ループでテーブル生成、ってのを多用するから。 ヒアドキュメントは、絶対左側に書くって規則があるから使わない。 しかもヒアドキュメントだと状況によって細かく出力を変えれないからあんま使い道ない気が…。 ヒアドキュメント使うなら外部にHTMLを書いたtxtを置くかな。 >別ファイルということは、やっぱりrequire文でhtmlを出力するためのスクリプトを >呼び出すということでしょうか? プログラム内でHTMLを生成する必要がある上、あまりに縦長で邪魔になった時は、 こーゆーのも作った事あるよ。俺は。
requireのほうが簡単でしょ 変数だってリファレンス使えばいいし
あぼーん
120 :
115 :03/07/26 14:02 ID:???
>>116 独自なタグとか作って置換、splitで切り張りとか。
書き換える部分が一点に集中してる(単一テーブルなど)の場合、
二つのファイル(ヘッダ部とフッタ部)を作ったり。
>>117 >ヒアドキュメントは、絶対左側に書くって規則があるから使わない。
変数に入れれば、思いのままに整形できるよ。
クックブックのレシピ1.11
121 :
115 :03/07/26 14:37 ID:???
外部ファイルを使うなら、HTML::Templateモジュールを使うと便利になるかも。 連続カキコ失礼。
123 :
nobodyさん :03/07/26 23:22 ID:UhENImdi
確か、perldocをWindows help形式に変換したものを、どこかで配ってたと思うのですが、 どこで配ってたか忘れてしまいました。 ぐぐったものの見つからず。 どなたかご存じだったら教えてください。
124 :
nobodyさん :03/07/26 23:34 ID:P3xPXFZK
}if($yh > 250 && $yh <= 280 && $gt < 51 && $iu < 71 && $gg < 71 && $fd < 71 && $ar < 71 && $ss < 2500 ){ を書きました。 ちょっと長いから難しいかなあと思って一通りテスト したんですが、なんと全部正しかったです。 しかし、やはりプログラム処理も間違える事 はあるんでしょうか?
Perlの場合って、変数名や関数名の付け方で、 ある程度、グローバルスタンダードというか、 おきまりの付け方って存在するんでしょうか?
<!HOGEHOGE> これはHTMLだとコメントになりむしされる。 これを利用して、このように。 $hoge = "seiseishitai html no naiyou"; $hogehoge = "mouhitotsu seisei shitai html no naiyou"; open TEMP,"/path/to/template.html"> while(<TEMP>){ s/<!HOGEHOGE>/$hoge/g; s/<!HOGE>/$hogehoge/g; print; }
>>127 > <!HOGEHOGE>
> これはHTMLだとコメントになりむしされる。
初めて知ったよ。
<!--HOGEHOGE--> だった。
>>125 ない。「それにはいくとおりもやりかたがある」から。
C言語出身のやつはC言語での命名規則を、
Java出身のやつはJavaでの命名規則を、
使えばそれでいい。
"use 全部小文字"は予約されてるからパッケージ名に全部小文字は使わない。 全部大文字のsubも使わないほうが良かったような。
132 :
nobodyさん :03/07/27 11:40 ID:qAaynntQ
フォームから送られてきたデータを切り分ける処理を foreach(split(/&/,$query)){略} とした場合、splitは1回だけ実行されるのでしょうか。 ループのたびに実行されてたら馬鹿みたいなので。
ループのたびにsplitされたら、永久にまわり続けるだろう。
134 :
132 :03/07/27 11:54 ID:???
…そうか。少しは考えろよ俺。 くだらない質問失礼しました。
あぼーん
あぼーん
>>132 なんで最近こんな奴ばっかなんだよ。
>splitは1回だけ実行されるのでしょうか。
他人に聞くよりPerlに聞いた方が正確だし早い。やればわかるだろ。
138 :
nobodyさん :03/07/27 17:20 ID:LVhmum4F
テキストから、条件にあてはまるものの件数、文字、を出力します。 件数を先に出力したいから、 $n=0; open(DATA,"data.txt"); foreach(<DATA>){ if($_ =~ m/$keyword/){ $n+=1; } } print "$n件見つかりました。<br><br>"; close(DATA); open(DATA,"data.txt"); foreach(<DATA>){ if($_ =~ m/$keyword/){ print "$_<br>"; } } こうやってるんですが、2回データ開くってのが、ソースが変だし、効率が悪いと思うんですが、効率いい方法ありませんか? 「件数」を先に出力するので、この方法以外考えられません。 条件に当てはまったものを、配列に入れて、後で出力ってのも考えましたが、 配列は効率わるそうで・・・ ご教授お願いします
無限ループが心配な場合は$f++>=100 last; とかストッパーかけておくと良い。
while (??) { if ( 表示する条件 ) { continue; } $n++; if (??) { contine; } if(??) { contine; } print $_; or $xx = $_; } $n件見つかりました 結果$xx
if (??) { contine; } if(??) { contine; } ↑ゴメン s/contine/last/g ついでに、ここは表示するページのはじめの数から後の行数を先に求めておく。
142 :
nobodyさん :03/07/27 17:45 ID:LVhmum4F
>>140 ゴメン。難しくて理解できない・・・
ちょっと解説お願いできますか?
配列は効率が悪いの?
同じファイルを2回読むよりは効率いいんでない? メモリは食うだろうが。
$n=0; open(DATA,"data.txt"); while(<DATA>){ if($_ =~ m/$keyword/){ $n+=1; $str .= "$_<br>"; } } close(DATA); print "$n件見つかりました。<br><br>$str"; これじゃだめなのん? オープン2回が気になるなら、seekで戻せば開きなおす必要はなし。
@hit = (); $n=0; open(DATA,"data.txt"); while(<DATA>){ if(/$keyword/o){ push(@hit, $_); $n++; } } print $n. '件見つかりました。<br><br>'; foreach(@hit){ print $_. '<br>'; } close(DATA); んじゃ、配列使うやつ。 DATAファイルハンドルは避けたほうがいいよ。 改行もしっかり処理しよー。
147 :
nobodyさん :03/07/27 19:03 ID:bAtOJVka
Aというサーバーで動くperlスクリプトが Bというサーバーでは動きません。 原因として考えられるのって何があるでしょうか?
150 :
nobodyさん :03/07/27 19:58 ID:LVhmum4F
>>143 効率は悪くないんですかね・
>>145 >>146 ありがとうございます。
ソートもできたらなぁ、と今思っていたので配列にすることにします。
どうもありがとうございました
あぼーん
あぼーん
配列につっこんでまた回すよりも 文字列として $str .= $_; ってやったほうが良いでしょう。
>>154 は引き篭もり板のコテハン「chan」か??
>>155 (*゚p゚)σ違うにゃりよ!!!
ε=ε=ε=┌(*゚p゚)ノ サササッ
(´-`).。oO(どこにもバカコテっているもんだなぁ。。。)
コテハンはデフォルトでバカ。バカじゃないコテのほうが珍しい。
アクセスログをopen(FH,">>log.dat")で書き込みして生ログがどんどんかさばってく スクリプトなのですが、どのへんまでたまったら古いログを消していくべきか こまっています。 たとえば1MBのログファイルを開け閉めするのと10KBのログファイルを開け閉めするので 処理時間に差が出たりするのでしょうか?
>>159 >たとえば1MBのログファイルを開け閉めするのと10KBのログファイルを開け閉めするので
>処理時間に差が出たりするのでしょうか?
聞く前に試せよ。その試した結果に疑問があるなら質問しに来い。
>>159 あるんじゃないの?
何のアクセスログか知らないけれど、
ログを切る方法なんていろいろあるでしょ。
apacheのログ?
rotatelogs。。
logrotate。。。
あるいはシェルとか。
>>159 アペンドなら有意な差(特に1Mと10Kなら)はないと思う。実測した事ないので
>>160 が言ってるように
測定して報告してくれ。
>>161 いえ、apacheのじゃなくてよくある画像を用いたアクセスログです。
あくまで一般的な知識としてどうなのか、と思って訊いてみたんですが。
測定する方法を考えて出なおしてきます。
効率が気になる奴は自分でプロファイリングでもしてみろっつの。 DProfとかあんだろ。
なるほ。
167 :
159 :03/07/28 04:46 ID:???
やってみた。 空のファイルに対してopen(FH,">>$file")でlocaltimeを書き込んでいくループを やらせてみたら、ファイルサイズが100KBだろうか1MBだろうが10MBになろうが 処理のスピードは変化無しでした。 まあ考えてみたら>>で書き込むのってファイルを開いてポインタを末尾に移動して 書き込むだけだから、そのファイルが小さかろうが大きかろうが関係無いっぽいけど。 ちなみに同じことを毎回行を配列化→pushで追加→>で新規書き込みっていう ループでやってみたら、当然処理はだんだん遅くなりました。 16[4-5]のモジュールは使い方よくわかりませんでした。
168 :
nobodyさん :03/07/28 06:36 ID:+imB0DDx
教えてください。 サーバー上に掲示板のログが大量にあります。 これらを小さくまとめる&転送速度を上げるために、gzipで圧縮して閲覧可能にしたいと思っています。 gzipの圧縮は1度行えばいいので、Windows上かシェルで行い、サーバー上に置いておくことになりますが、 そのファイル名が、$FORM{url} だとすれば、 print "Content-type: text/html;charset=Shift_JIS\n"; unless($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/){&error($FORM{url}); exit; } if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/){ print "Content-encoding: x-gzip\n\n"; } elsif ($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/){ print "Content-encoding: gzip\n\n"; } if (!open(GURL,"<$FORM{url}")){ &error(1); exit; } binmode GURL; @gzipdata = <GURL>; close(GURL); print @gzipdata; exit; #エラーの場合はURLをリンクで示してダウンロードしてローカルで解凍してもらうよう表示する。 こうなるのかと、とりあえず書いてはみたものの、一度メモりに読むのは避けられないのか、 バイナリ扱うPerl書いたことないからこれでいいのか。 あるいはもっと効率的な方法をご存じの方は教えてください。
下のようにファイルの内容を処理しているのですが、一行ずつ処理する場合 後ろから処理するということはできないでしょうか? while( <FILE> ) { 処理 } 配列などに入れてしまえばできるのですが、メモリとしてはこちらの方がよいと 思いまして、どうかよろしくお願い致します。
>169 逆順は難しいと思われ。 一行のバイト数が固定なら色々とやりようもあるだろうが。 可変行の場合、俺はやり方を知らない。 配列でやるんだったら配列の入れ方を工夫するといいかも。 @data = <FILE>; @data = reverse(@data); とやるよりも @data = (); while(<FILE>){unshift(@data);} とした方がいいかもしれない。
>170 =~ s/可変行の場合/一行のバイト数が可変の場合/;
>>168 試してないけど。
binmode STDOUT;
my $CRLF = "\x0d\x0a";
my $encoding = $ENV{'HTTP_ACCEPT_ENCODING'};
print 'Content-Type: text/html; charset=Shift_JIS', $CRLF;
$encoding =~ /gzip/ or &error($FORM{url}, exit;
open GURL, '<' . $FORM{url} or &error(1), exit;
if ($encoding =~ /x-gzip/) { print 'Content-Encoding: x-gzip', $CRLF }
elsif ($encoding =~ /gzip/) { print 'Content-Encoding: gzip', $CRLF }
print $CRLF;
print while read GURL $_, 1024; # LENGTH は適宜調整
close GURL;
>>169 http://www.din.or.jp/~ohzaki/perl.htm#File_Reverse
>>169 File::ReadBackwards
>>168 Content Negotiationに任せればいいのでは?
175 :
nobodyさん :03/07/28 13:21 ID:ZypqctSD
変数はmyで局所化するのが基本みたいなんでそうしていますが、 例えば同じ変数をどこのサブルーチンで使いたい場合はどうするんでしょうか。 いちいち変数の受け渡しをしないといけないんでしょうか。
>>168 174が言ってるように、ファイル名に.gz追加
logfile1.html.gz
HTTP_ACCEPT_ENCODING見てサーバがファイルを選んでくれる。
178 :
nobodyさん :03/07/28 13:49 ID:mZs5gojb
>>175 our。バージョン古くて使えなければuse vars。
>>175 妙な静的変数
{
my $static;
sub hoge {
}
sub hogehoge {
}
sub hagehage {
}
}
180 :
nobodyさん :03/07/28 14:33 ID:MPvwsvte
画像掲示板をつくっています。参照ボタンでローカルパソコン内の画像を選んだあと、 確認ボタンでその画像がブラウザで確認出来るようにしたいのですが、 良い方法ないでしょうか?
>>167 > 16[4-5]のモジュールは使い方よくわかりませんでした。
使えるようになると便利だぞ。
面倒かもしれんけど、ぐぐってみるなりして使いこなせ。
>>180 送信する前にプレビューってことか?
JavaScriptでフォームからファイルパス取って、IMGに埋め込むとか。
できるかわからんけど。
とりあえずスレ違いなので詳細はそれ系スレで。
183 :
nobody :03/07/28 21:25 ID:0jEUdWDa
ス…スマン。大学のperlの課題で四苦八苦している者です。 「じゃんけん」ができるプログラムを作りたいんだけど 何かいい方法ありますか? 当方かなり初心者なんで print"〜";#って文字を出力することしかできないんですけど。 えーと質問の意味がわからなかったらスルーしてもらってもかまいません。
あぼーん
>183 まずフローチャートを書け。 それ以降は大学で聞け。
print "じゃんけん\n"; sleep(1); print "ぽん\n";
あぼーん
189 :
nobodyさん :03/07/28 22:10 ID:TipKdKzd
じゃんけん・・・ ランダムに3つの中から選ぶプログラムを作って 自分で入力した文字と比較。 結果を出力。でいいんじゃない?
あぼーん
>>183 print "じゃんけん(1=ぐー、2=ぱー、3=ちょき)\n";
<>;chop;
$a = int rand(3)+1;
$hoge = (($a == 1 && $_ == 2) || ($a == 2 && $_ == 3) || ($a == 3 && $_ == 1)) ? '勝ち' : '負け';
print $hoge,"\n";
# お粗末
183は課題がでるたびにここで聞くのかね。
print "じゃんけん(1=ぐー、2=ぱー、3=ちょき)\n"; <>; print ('勝ち', '負け')[int rand 2];
>>193 /⌒ヽ
/ ´_ゝ`)時間的に、ここ笑わないといけないので、笑いますよ・・・
| /
| /| |
// | |
U .U
195 :
183 :03/07/28 23:46 ID:xYLAJnZK
課題今日中にメールで提出ということだったんで…出しました。 みなさんいろいろ案出していただいてありがとうございます。 結局自分の力不足で課題内容変えちゃいましたけど。 (みなさんの案は今後参考にさせてもらいます) >192 今日始めてここに来たんですけど まぁ課題が出るたびにここで聞くのと同じような根性の持ち主です。 とにかく…評価はCにケテーイぽ(つД`)
あぼーん
>>183 っていうか、おまえ。答え丸写しじゃねぇかw
あいこが出ないコードを提出。-10点
あぼーん
200 :
183 :03/07/29 00:01 ID:BcdoPCM8
>197 いやしてないし。むしろじゃんけんにしなかったし。 ウザイのでそろそろ逝きます。
まあ、はじめから丸写しするつもりで聞いたんだろう。 自分の期待する答えがなかったからしなかった(というかできなかった)だけで。
そういうやつのためにも時々ウソを教えないとね 試したらわかる程度に軽いやつで
それにしても 183 よ。そんな事を2ちゃんねるで聞くのもどうかと思うぞw
204 :
168 :03/07/29 07:41 ID:???
>>174 他
ありがとうございました。
Content Negotiationというのがあるとは全く知らず、そのまま表示できたのでびっくりです。
板違いでしたね(汗)
全部圧縮して、リンク先のアドレス変えるだけで問題はすべて解決しました。
大変感謝しております。
205 :
nobodyさん :03/07/29 08:56 ID:pmxt/hz7
crontabで、AM6:00,AM7:00に1回起動設定しているとして、 cgiの中でlocaltimeで、6:00と7:00で処理を分けているんですけど、 crontabの時計とlocaltimeの時計は完全に一致しているんでしょうか? スクリプトの中で6:00丁度だったらA、7:00丁度だったらBとやっても crontabが起動した時間が5:58とかだったらAの処理が行われないと思うんです。
cgiがperlで書かれているとすれば。 perldoc を調べなさい。 それから man crontab。
ちがう。 crontabはcrontableのことだ。 要するにcronの設定ファイル(といっていいかどうかわからんが) man cron をすべき。
ついでにいうと、localtimeじゃなくてtimeだよな。
>>205 6:00丁度に起動されたとしてもlocaltimeとるまでにタイムラグがある。
ちょっと考えればわかりそうなもんだが。
man cron ってヤラスィ〜響き (*´Д`*) マンコロン・・・
あぼーん
212 :
nobodyさん :03/07/29 11:44 ID:pmxt/hz7
man cronってなんざんすか?
213 :
nobodyさん :03/07/29 11:47 ID:MFa+8P58
一定時間ごとにある処理をさせますが、特定のキー入力で抜けます。 <STDIN>; ではうまくいかないので下のコードのようにしましたが、 2つ目のwhileを無駄に回さなくてもいいようにする方法はありますかね? 今のところsleepを入れるくらいしか思いつかないです。 sub { my $sig = 0; local $SIG{INT} = sub {$sig = 1;}; while (1) { # ここに$interval(分)ごとにする処理 while (time() % ($interval * 60)) { sleep (1); return 1 if($sig); } } }
あぼーん
>>213 1 TTYをnon-canonicalモードにする。
プラットフォーム依存。モジュールあるかも。
2 特定のキーでシグナル発生させる。
219 :
217 :03/07/29 16:39 ID:???
>>218 バーチャルホストへは
print SOCKET "Host:$host:$port\r\n";
で対応できているんですよね?
何だか原因はスペルミスだけだった気がしてきました。
>>218 (゚Д゚)ハァ?
>>217 サーバーの DirectoryIndex (クライアントがディレクトリをリクエストしたときに調べるリソースのリスト)確認しろ。
>>220 (゚Д゚)ハァ?
>(勿論ブラウザなら両方OKです。)
222 :
nobodyさん :03/07/29 19:38 ID:71pkcqEp
>>220 (゚Д゚ )ハァ?
それで返ってくるのは403だろ。氏ねや
あぼーん
connect の後に SELECT してるけど、代わりに autoflush SOCKET (1); は?
>>213 alarm使って、キー待ちにしたらどう?
time値の0秒ジャストで動かせないけど。
local $SIG{ALRM} = sub { die 'timeout' };
...
my $c = &keywait(1);
...
sub keywait
{
my $interval = shift;
eval{
alarm($interval*60);
<>;
alarm(0);
};
if ($@){
alarm(0);
($@ =~ /timeout/) or die;
return(0);
}
return(1);
}
>>217 プロトコルをHTTP/1.1にしたら?
227 :
nobodyさん :03/07/29 23:46 ID:Y5f15xmJ
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); #$buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/, $buffer); foreach (@pairs) { ($key, $val) = split(/=/); $in{$key} = $val; } ここまでやった後で連想配列の中身を見る方法を教えてください。 どんなkeyが入ってるか知りたいのです。それによって処理を分岐するので。 初歩的な質問ですみません。
keys
>>227 foreach $key ( sort( keys %ENV ) ) {
print "$key = $ENV{$key}\n";
}
>>227 print map { "$_ : $in{$_}\n" } keys %in;
あぼーん
234 :
nobodyさん :03/07/30 00:01 ID:KKMTj9U0
分解数がわからないsplitの場合、 $name = 'c:\windows\system32'; $i = 0; while($name =~ /\\/g){ $i+=1; } @match = (); for($n=1; $n<=$i+1; $n++){ $a = '$path'.$n; push(@match,"$a"); } @match = split(/\\/,$name); foreach $col (@match){ print "$col<br>"; } がんばってこんな感じになりました。 けっこう長いです・・サブルーチンになりそう・・・ もっと簡潔な方法あれば教えてください。
235 :
234 :03/07/30 00:06 ID:KKMTj9U0
すんません。 $a = '$path'.$n; push(@match,"$a"); これは、 push(@match,"%n");に変えます。 配列の全値をjoinでスカラ($match)に代入 そして、($match) =split・・・・ ってやるつもりだったんですが、$matchが展開されないってことに気づいて、 リファレンス良く見ると、そのまま配列でsplitできることがわかって、 $pathっての消すの忘れてました。
236 :
234 :03/07/30 00:06 ID:KKMTj9U0
× %n ○ $n 何回もすいません。
>>234 >>1 の
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
これを読め。結局何がしたのが伝わってこない
×結局何がしたのが伝わってこない ○結局何がしたいのか伝わってこない
239 :
234 :03/07/30 00:09 ID:KKMTj9U0
>>237 簡潔な方法がないか聞きたかったんです。
けっこう長いから・・・
241 :
234 :03/07/30 00:10 ID:KKMTj9U0
ここは、エラーがどうしても消えなくて、助けをほしい人がくるスレなんですね。 簡略なソースを求めるスレでないんですね。 どうもすいませんでした。
どんな結果を言葉で示してくれないと答えようがない。 ただ単にソースをダラダラ書かれても困るだけ。 このスレの解答者はソース解析屋でもないんだから
あぼーん
245 :
nobodyさん :03/07/30 00:14 ID:QkXS28T1
デバッガ付きのPerl処理系ありますか? ErrorメッセージがInternal Server Errorだけじゃ捗りませんよね。
perl -d
247 :
234 :03/07/30 00:17 ID:KKMTj9U0
>>243 ええと、このソースは、フォームから「文字列」と、「分解の基準になる文字列」(なんか分かりにくいかな・・
split(/aa/,"")←ここのaaの部分です。
で、フォームからだと、だれがどんな文字列もってくるかわからないでしょ?
だから、当然分解数も違う。
それで、分解数がはじめから分からなくても、ちゃんとsplitで分解する
っていうのが上のスクリプトなんです。
あぁ、説明下手で伝わらなかったらゴメン
248 :
234 :03/07/30 00:20 ID:KKMTj9U0
なんかダラダラ書いてるから日本語おかしくなってる・・・ 4行目の「で」は「受け取って、splitで分解するスクリプトなんです。」ですね・ なんか日本語変になってる
日本語の解析も必要みたいです。
>>248 とりあえず、年齢とPerl歴、日本語歴をお書きになってください。
251 :
234 :03/07/30 00:24 ID:KKMTj9U0
ごめんなさい。書き直します。
>>234 のスクリプトは、フォームから「文字列」と「分解の基準になる文字」を受け取って、
それをsplitして表示する、というものです。
でも、フォームから送られてくるのは人によってまちまちだし、当然分解する数も違うので、はじめっから
($a,$b) = split(/$bunkaimojiretu/,"$mojiretu");なんてできません。
だから、上のようにまず、whileで「分解の基準になる文字列」の数を調べて、
次に、その数+1個分の値がある配列を作ります。
そして、その配列を分解
こうすれば、分解数がわからなくても、ちゃんとsplitしてくれる、そういうスクリプトです。
252 :
234 :03/07/30 00:26 ID:KKMTj9U0
それで、自分なりにがんばってみて
>>234 ができあがったわけなんですが、
どうもソースが長いなぁ、と思い、簡略化できないかと聞いてみた次第です。
お手数かけてすみません。これでマシな日本語になりましたか?
>>251 なんでそんなことをする必要があるのか全然わからん。
@pairs = split /\&/, $STDIN;
foreach ( @pairs ) {
($k, $v) = split /=/;
$form{$k} = $v;
}
これでは何故いかんのか?
>>234 $name = 'c:\windows\system32';
foreach (split(/\\/,$name)) {
print "$_<br>";
}
もう飽きた。
256 :
234 :03/07/30 00:29 ID:KKMTj9U0
$STDIN??? 僕がやっているのは、ブラウザからなんですよ。DOS窓じゃないんです・・・
257 :
213 :03/07/30 00:30 ID:???
収束してから書き込もう…
split(/\\/,$name)は\で区切った配列になるのだ。
259 :
234 :03/07/30 00:30 ID:KKMTj9U0
>>254 えと、この場合は、フォームからの文字列が、たとえば「c:\windows\system32」の場合の話ですよ〜
ってことです。
なにも言ってなくてスイマセン。
260 :
234 :03/07/30 00:31 ID:KKMTj9U0
そうですね。この場合は、ちゃんと split(/$cut/,$name)くらいにしておけばよかったです。 誤解を招くようなこと書いてすいません。
>>260 おまい、どんどん頭よくなっていくなぁ・・。
262 :
234 :03/07/30 00:33 ID:KKMTj9U0
すいません。 初めの一行に「フォームからの文字列(c:\windows\system32)、分解の基準の文字(\)の場合の例」 と、一言かいておければよかったです。 無駄なレスさしてほんとに申し訳ないです。。
>>256 その台詞で貴様の技能がどの程度かよくわかった。
標準入力からだろうがブラウザからだろうが入力は入力だろうが。応用の利かない阿呆が。
>>263 はぁ、アフォだ。STDINなんかcgiで使えるわけないだろ、氏ね
265 :
234 :03/07/30 00:37 ID:KKMTj9U0
>>263 え?STDINって、DOS窓じゃなかったんですか?
フォームのデータは、ReadParse使って、変数に格納してる状態なんですけど・・・
266 :
234 :03/07/30 00:37 ID:KKMTj9U0
もしかして、POSTの場合の、フォームの受け取りのことを言っていたんでしょうか?
264nobodyさんsage03/07/30 00:36 ID:???
>>263 はぁ、アフォだ。STDINなんかcgiで使えるわけないだろ、氏ね
234 の混乱ぶりが面白いw
269 :
234 :03/07/30 00:43 ID:KKMTj9U0
253の言いたいことがようやくわかりました。 標準入力、GETの場合は?以降を、分割するってことを言っていたんですね。 そういうことではないんです。 フォームから、好きな文字列とキーの文字を送ってもらって、 そのキーで「文字列」を分解するってことです。 GETの場合でいうと、 ?moji=c:\windows\system32&key=\ それで、この「\」で「c:\windows\system32」を分解したいんです。 ?moji=aiueo,kakikukeko,sasisuseso&key=, こんなことです。
>>269 だから応用できるだろって言ってるだろ。
俺、未だに 234 が何をしたいのか良く解らないんだけど… > 初めの一行に「フォームからの文字列(c:\windows\system32)、分解の基準の文字(\)の場合の例」 要は、ある文字列を分解の基準の文字で分解してリストにしたいって事? split でいいんじゃねーの?って思うが、肝心な「期待しているリストにはこう入って欲しい」 みたいなこと書いてねーからさっぱり解らん
234のしゃべりとスクリプトがそっくりでおもしろい。
273 :
234 :03/07/30 00:53 ID:0qjcwLeT
>>271 そういうことです。
それで、「ある文字列」も、「基準の文字」も、「何分割される」かも、分からない、という状況で、
どういうスクリプトで処理したらいいかといろいろ試行錯誤して、上のスクリプトができました。
それで、このスクリプトは正しいのか?、もっと簡単にできるんではないか?と思いまして、聞いてみました。
で、@match にはどう入って欲しい訳? 君はその事について未だ何も記述してないね
275 :
234 :03/07/30 01:00 ID:0qjcwLeT
>>274 @match = split(/$kijun/,"$data")って処理されるわけですから、
基準の文字の数+1が必要な値になりますよね?
たとえば、\で切る、データが「a\b」だったら、2個という具合で。
だから、
@match = ();
for($n=1; $n<=$i+1; $n++){
push(@match,"$n");
}
ここで、その数だけ、配列の値を・・・・・・・・・・
あら、もしやこれ不要なんでは・・・
まさか、いらない・・・
あぁ、いらないんだ。。。
そーだったのか、アフォなことをした・・・・
276 :
234 :03/07/30 01:02 ID:0qjcwLeT
あっはっは $name = 'c:\windows\system32'; @match = split(/\\/,$name); foreach $col (@match){ print "$col<br>"; } これでいけたわ すまんな、
277 :
254 :03/07/30 01:04 ID:???
278 :
234 :03/07/30 01:05 ID:0qjcwLeT
いやぁ、@matchってのは、splitで分割する数だけ値をいれてやらないかんと思っとったんよ。 でも、良く考えると、 push(@match,"$n")って、値がはいってるのに、 なんでc:とか変わってるのかと思ったら あっはっは
280 :
234 :03/07/30 01:06 ID:0qjcwLeT
よーするにだ、 @aaa = split(/$aa/,$bb) ってすりゃぁ、 勝手に@aaaの値の数が調節されるんだな あっはっは すごいな、パールって あっはっは
281 :
234 :03/07/30 01:08 ID:0qjcwLeT
ほんとにすまんな、みんな あっはっは えらい迷惑かけちまってあっはっは パールってのはすごい言語だ あっはっは 俺としたことが・・ みんなこれ知っててだまってたんだろ? まったく、恥かくぜあっはっは
282 :
234 :03/07/30 01:10 ID:0qjcwLeT
しかも
>>254 のって
foreach (split(/\\/,$name)) {
だったんだな
なんかほかの物に見えたよ。
この時点で答えでてんじゃん
あっはっは
俺ってどんくさいな
次の方お待たせ。 ↓
アハハ吊られたね。 では次の質問どーぞ!
286 :
234 :03/07/30 01:19 ID:0qjcwLeT
確かにそうかも、 授業でCあるからな・・
>>286 配列の大きさとか初めに宣言しなくていいのばペールですよ^^;
すみません、「<>;」ってどういう意味なんですか?
<ARGV>
<^ ^;>
292 :
213 :03/07/30 01:59 ID:???
>>215 ぐぐったけど敷居が高そう。今後の課題にします。
>>225 <>で入力完了を待ってシグナルを発生させるみたいです。
294 :
292 :03/07/30 03:18 ID:???
295 :
nobodyさん :03/07/30 03:25 ID:JGELpVxk
cgiproxyの動作は アクセスがあったらその間だけ proxyサーバとして動作させ、目的のページを吐き出したら proxyサーバを終了させる。といった感じですか? それともproxyサーバとcgiproxyは別の原理ですか?
296 :
nobodyさん :03/07/30 03:31 ID:chNZYbR6
すいません。 Perlのことで質問したいのですが。 変数名の一部に変数の中の数字を埋め込んで その変数名を代入したいのですが どのようにいくのでしょうか? ちょっと、言葉では分かりにくいので例を挙げると 例えば、$a1 $a2 $a3という変数があって $bの中に1〜3のいずれかの数字が含まれているとし この$bの中の数字を変数名として使いたいのです。 これを $c = '$a' . "$b"; といった感じでやれば$aの方はそのまま文字列として出て $bの方は変数の中身が展開されて出ると思ってやってみたのですが エラーが出てしまいます。 どなたかお助けください。 よろしくお願いいたします。
あぼーん
print ${'a'.$b};
↑答えもう出てるだろ( ´,_ゝ`)プッ 300 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
こういう、変数名自体を動的に云々っていう質問よく見かけるけど、 なんでそういう発想になるんかね。 他の言語じゃそういう質問見かけないんだが(ないことはないと思う)。 やっぱソフトリファレンスのせいなんだろうか。
>>296 > すいません。
> Perlのことで質問したいのですが。
> どのようにいくのでしょうか?
> ちょっと、言葉では分かりにくいので例を挙げると
> どなたかお助けください。
> よろしくお願いいたします。
読みにくくなるだけだから無駄に6行も余計なことを書くな
>>301 リファレンスとかじゃなく、単に発想がおかしいだけなんじゃない?
ソフトリファレンスは悪です・・・ まぁ、ちゃんと変数の整理が出来てないつーのと、変数のスコープを理解してないってことじゃないだろうか・・・
Perlはその辺を逐一理解してなくても扱える言語だからな。 それはPerlの優秀な点である。 その分ユーザーのレベルが下がるのは仕方がない。
下手にソフトリファレンスなんてもんがあるせいで、配列やハッシュの有効な使い方を 理解しないまま進んでしまうんじゃないかな。
307 :
296 :03/07/30 13:22 ID:VqnJP0e8
質問にお答えくださってありがとうございます。 print ${'a'.$b}; だとスカラ変数だとうまくいったのですが 配列の変数だとうまくいかないようです。 $sen1[] $sen2[] $sen3[]という変数があって $randaに1〜3という値が入ていて print("{${sen$randa}[$i]}"); のように書いたのですが、どうもうまくいかないみたいです。
>"{${sen$randa}[$i]}" ヽ(*`Д´)ノ むちゃくちゃやんけー!
>>304 モジュールまたがってソフトリファレンス使ってるソースを見たことがある。
最初どこから変数が湧いてくるのか理解できなくて気絶するかと思った。
……って、これはマ板ネタか。
>>307 勉強しなおした方が良いと思われる。
310 :
296 :03/07/30 14:09 ID:QHsgEgDp
>>308-309 Perlは今回初めての仕様で、まだ慣れてないんで
お許しください。
外の括弧で囲めば、配列の[]が文字列として認識されずに済むと
聞いてやってみたのですが
もしかして、これはPHPの文法でしょうか?
311 :
296 :03/07/30 14:10 ID:QHsgEgDp
仕様→使用でした
あぼーん
>>307 > $sen1[] $sen2[] $sen3[]という変数があって
ってのは@sen1, @sen2, @sen3ってことか?
perlの配列がわかってれば、こんな書き方にはならないと思うのだが。
${'a'.$b}という回答を貰っておいて${sen$randa}[$i]はないだろ……。
print ${'sen' . $randa}[$i];
315 :
nobodyさん :03/07/30 16:38 ID:Nvxneeyi
初心者質問失礼致します。 if(!open(FH, ">>file")){ print 'file open error'; } else{ flock(FH, 2); print FH 'abcde'; close(FH); } このように追記モードの場合、flockは必要になるの でしょうか。
うん
あぼーん
>>315 モードに関係なく必要なときは必要だと思うが。
>>318 お返事有難うございます。
ロック使うことにしました。
有難うございました。
320 :
nobodyさん :03/07/31 05:53 ID:INH5PtXx
readline,<FH>を使ってデータを取り込みたいのですが、 上(最初)から順ではなく、下(最後)から読ませることは出来ませんか?
了解 seekで頑張ります 有難うございました。
unshiftしたらえんちゃうんかと
あぼーん
あぼーん
あぼーん
あぼーん
use Time::Local; $t = time; print "UTC =", timegm( gmtime( $t ) ), "\n"; print "UTC =", timelocal( localtime( $t ) ), "\n"; gmtime とか localtime で返してくる値を time で 返す値の形式に戻すコードってこんなんでいい? テストしたら一応2つとも同じ値返す様になったけど…。
希望通り動いてんのならここで聞かなくてもいいでしょ。 誰かのお墨付きが欲しいの?
いや、ちょっと自信が無かっただけ…。 UTC の解釈もチョット間違ってたし<自分
戻すと言ってもそれじゃ無意味だしな
あぼーん
$t = 10.2 - 10.0 のような小数計算で$tに正しく答が代入されないのはなぜですか?
↑確認の方法どうやってるの?それが、間違ってるような気がするが
>>334 不動小数点数の精度の問題ですね。
一般に小数の最後の桁は信用できません。
337 :
336 :03/07/31 14:22 ID:???
浮動小数点です。
338 :
334 :03/07/31 14:29 ID:???
>335 代入して、htmlに書き出すだけです。 >336 そうなのですか… 遠回りですが整数でやることにします。ありがとうございました。
cgi内部で外部cgiファイルを起動する方法を教えてください。 HTMLだと、<img>タグを使ってたのですが、 <img src="./hoge.cgi"> CGIファイルだと、これがうまく起動されないわけです。 print "<img src=\"./hoge.cgi\">"; どうしたら良いでしょうか?ご教授お願いします。
>>340 当たり前ですがエラーはでません。
起動したいファイルから吐き出しファイルが更新ができないだけなので、
どう質問したらいいでしょうか?よろしくお願いします。
って340じゃ無理か。(w
>>339 CGIから別のCGIを呼び出して、その出力を利用したいという事か?
お前の質問からそれを読み取るのは著しく困難だし、態度悪いから教えない。
おちえない
>>339 いやもう見てて哀れだよ。
自分がたたかれてる理由がわからない奴ってのは。
しかしここで教えるとためにならんしなあ。
辛いところだ。
だいたいそのCGI、直接叩いてちゃんと出力するんかい。 んでエラー吐かんのは当たり前なんかい。 ちゃんと動かんかったらエラー吐くようにしとらんだけやんか。 それがあんたにとって当たり前なら、あんたの書いたコードは書いた通り 正常にうごいとるわけで、プログラムはなんも悪くないとオモーヨ。 はぁ
おもろい
自演ウザ。(*^。^*)
ちょっとした煽りにいちいちキレてるような奴は、真面目に回答してくれた人に対しても そういう態度を取る可能性があるからね。 思い通りに動作しなかったり、質疑応答が長引いて耐え切れなくなったときに。 お互いがイヤな気持ちにならないためにも、そしてスレのためにもそういうアフォな質問者は さっくりと無視しましょう。
if ($a>1) if ($a<10) これを if ($a>1 && $a<10) と書くような技法を何ていうんでしたっけ?知ってる人教えてください。
あぼーん
あぼーん
自演うぜー。まじで。 いやなら無視すりゃいいのに。
結合演算子を使う技法w
ていうか名前なんてあるのか
2行を1行にする技法
>>354 自演?
心配すな。
おまいも端役のひとりじゃ
いらっしゃーい、Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 1: 自分はこう言う事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 ソース貼る時は、全角スペースでインデント忘れずに。 良い回答は良い質問から。一緒に勉強しましょう。
ここって初心者スレのワリにレベル高いんですけど。
本漁ったりググって分かる疑問は質問するまでもないからでしょ
人に聞いているうちは初心者。 たいていのことを自分で解決できるようになれば、まずは初心者脱出ってこと。
364に勝手に追加 自分で調べる前に聞いているうちは一生初心者にすらなれない。
馬鹿高い本を買って自己解決する 安めの本を買って、足りない部分は周りを利用する どっちが初心者だろうね
付属ドキュメントで自己解決する
初心者は「初心者の質問板」or「PC初心者板」へGo!!
安い本で慣れて高い本で補う。
先人たちの築いた知識を上手に利用して上達への近道を選ぶのは初心者でつか?
> 安めの本を買って、足りない部分は周りを利用する 「周り」が正規のマニュアルを指しているなら賛成だけど、 そうじゃないなら、たとえ馬鹿高くてもちゃんとした本を買うべきだと思う。
こんなところで質問するようなやつは上達しないってことだ
このスレ腐ったな
夏は腐りやすいのでご用心
>先人たちの築いた知識を上手に利用して上達への近道を選ぶのは初心者でつか? ヒントを乞う位なら構わんけどさ、自助努力の前にしつこく説明してクレクレ言う椰子は嫌だな。 一々誰かの時間を奪ってまで問答を求めるのは「上手な利用」とは言わない。 先人の知識ってのは先に書籍とかを当たった方がはやい。 それでも詰まったときに質問するのはアリ。 試行錯誤をめんどくさがり過ぎてるのがミエミエな奴はムカツク。
>>370 >上手に利用
もちろんまず初めにGoogleだよな???
もちろんはじめに燃料投下
テンプレに(・∀・)イイ!!質問者の例とイク(・A・)ナイ質問者の例を載せれよ
>>379 >>1 に書いてあるじゃん
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
これに反するような質問が悪い例
「例」という日本語が理解できてない香具師はけん
1.
>>1 嫁。
2. 過去ログ嫁。
3. ググるれ。
>>379 そんな事言う様なら質問以前の問題だと思う
このスレ、ちょっとPerl覚えた厨に汚染されて臭いね。 質問を乞うぐらいにならんと上達せんよ。 まあ、中途半端な奴に言ってもわからかな。はは。
Perl覚えたばかりでもいいからさ。 常識や礼儀を覚えてない奴は勘弁してくれ。
( ´∀`)ここ2ちゃん
>質問を乞うぐらいにならんと上達せんよ。 マトモな質問者なら大歓迎なのれす。
>386みたいに思ってる奴は当然、2ちゃんだから嘘を教えられても文句言わないよな?
そんなアフォはほっとけや。イチイチ相手にしてるだけ無駄
正直、昔のほうが質問者叩きはひどかったわけだが。 普通に質問しても「氏ね」とか言われたもんだ。 ここまで丸くなった2ちゃんでまだ叩かれてるような奴って……
>>390 うれしげに・・・とかするなドアフォ
言いたいことあるなら最後まで言ってくれ
アフォだらけ
>良い回答は良い質問から。 これが見事に実践されてるわけだな。 アフォな質問にはアフォな回答が。
初心者だらけだから仕方ないよ 質問するときは内容をよく吟味してから投稿してください。
396 :
nobodyさん :03/08/02 01:55 ID:O5cg5dSH
perl5ですけど srand(time|$$); を付けないと、rand が時間で決まってしまいます。 そんなもんなんですか?
∧_∧ ( ^^ )< ぬるぽ(^^)
>>396 試してないけど
srand($$|time);
これじゃ、駄目か?w
∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
401 :
398 :03/08/02 04:51 ID:???
(´・ω・`)<俺、日本語が不自由なんだよ。
あげ
トッカロピ
>>396 while(time%60){
# wait..
}
print rand(), "\n";
をf複数のプロセスで動かしてみたけど、全部違う値になったよ。
WindowsXpHome ActivePerl 5.6.1/FreeBSD Perl 5.8.0/Linux Perl 5.6.1
実行環境と同じ値になる根拠をしめしてください。
>>396 の PC は時計が動いていないという罠
$tmp = $log[$i]; @dat = split(/<>/, chomp $tmp); $log[$i] の改行コードを省いたものをカットして @dat に格納して処理したいんですが、 $log[$i] そのものの改行コードは残しておきたく、$tmp を使っています。 これを一発で表現する方法を教えてもらえませんか?
一発じゃないが @dat = split(/<>/, $log[$i]); chomp $dat[-1];
>>408 thx
そちらの方がスマートですね。参考になりました
************************************************** *** Hello! Welcome to the 2ch World! *** ************************************************** と表示しようとして、 #!/usr/bin/perl print "content-type: text/html\n\n"; print "**************************************************\n"; print "*** Hello! Welcome to the 2ch World! ***\n"; print "**************************************************\n"; とメモ帳に入力してmona.cgiという名前で保存し、tok2.comにffftpを使ってうpしたのですが、 いざ結果を見てみると、 ************************************************* *** Hello! Welcome to the 2ch World! *** ************************************************* と言う風に表示されてしまいます。 どうしたら一番上のような結果にすることができるのでしょうか? OSはWindowsです。どうかよろしくお願いします<(_ _)>
>>410 print "content-type: text/plain\n\n";
412 :
410 :03/08/02 20:53 ID:lcThEZov
>>411 レスありがとうございます。
早速、 print "content-type: text/html\n\n";を print "content-type: text/plain\n\n";
に直して再度うpしてみたのですが、結果は同じでした(´・ω・`)ショボーン
誠にあつかましいのですが、他に良い方法は無いでしょうか?
どうかよろしくお願いします。
トクトクは勝手にヘッダ情報変えなかったっけ?
415 :
nobodyさん :03/08/02 21:04 ID:84QkeiYe
<a href="
http://i.2ch.net/ ">2ちゃんねる(巨大掲示板)</a>の<a href="
http://book.2ch.net/poem/i/ ">詩・ポエム板</a>
を、
2ちゃんねる(巨大掲示板)の詩・ポエム板
としたい(ようは、リンクを取り除きたい)のですが、
どうすればいいのでしょうか・・・?
わからないながらに、やってみましたが、
$HTMLContents =~ s/<a href="
http:\/\/ (.*)">(.*)<\/a>/$2/g;
とすると、「詩・ポエム板」しか$2に入りません。。。
>415 最小マッチングでぐぐれ。
417 :
415 :03/08/02 21:21 ID:84QkeiYe
>>416 さんくすです。
ぐぐりました。
$HTMLContents =~ s/<a href="
http:\/\/ (.*?)">(.*?)<\/a>/$2/g;
で解決しますた。
418 :
nobodyさん :03/08/02 21:40 ID:lx3eHYOp
CGIとは関係ないんだけど @INCをコマンドラインで指定して実行する方法ってありましたっけ?
すみません。 -Iオプションですね。。。
>>418 何故ヘルプを見ない?
-Idirectory specify @INC/#include directory (several -I's allowed)
>>418 どうでもいいが、ここはCGIスレじゃないので一行目は余計。
>>412 print "**************************************************<BR>\n";
print "*** Hello! Welcome to the 2ch World! ***<BR>\n";
print "**************************************************<BR>\n";
\nはプロンプトでの改行 htmlの場合はソース内の改行 当然見た目を改行させるには<br>がいる
425 :
412 :03/08/03 09:51 ID:???
>>425 くだらないつーか。text/plainを勝手にtext/htmlと解釈することがあるという
IEの仕様にからむ、とても難儀な問題なのだよ。
text/plainにかぎらず、例えばimage/jpegでも中身がHTMLらしければ。
あるブラウザは Content-Type: を無視して送られてきたコンテントの 内容を走査して、勝手に振る舞ってるってことかな
>>428 そういう糞ブラウザは、image/png でハードディスクの内容を消去するバイナリが埋め込まれていると、
実行しちゃうんだろうなぁ。。。
&foo( %ENV, "sample", 123456 ); sub foo { my (%a, $b, $c ) = @_; } こうやっても、%a $b $c に何も入ってこないよ〜 解らないよ〜ヽ(´Д`;)ノ
return
リファレンス
>>433 先越された(´・ω・`)
んじゃ一応補足……$a->{HOGE} とやればハッシュをコピーしなくてもそのまま参照可能。
配列の場合も同じように。
>>430 ハッシュは(key1,value1,key2,value2・・・)となってるただの配列。
で、配列は展開されちゃうから、
my %hoge = (1=>'a', 2=>'b');
&foo(%hoge, "sample", 123456);
sub foo {
my (%a, $b, $c ) = @_;
}
と書くと、%aには(1,'a',2,'b',"sample",123456)が入り、$b,$cはからになる。
ちなみにリファレンスを使うのが普通だが、使わないでやりたいなら
my %hoge = (1=>'a', 2=>'b');
&foo("sample", 123456, %hoge);
sub foo {
my ($b, $c,%a) = @_;
}
とすることもできる。
>434に補足してみる。 $a->{HOGE}とやると参照渡しになるので、その中身を変更しようとすると実引数の中身も書き変わる。 $ENV{HOGE} = 'hage'; &foo( \%ENV, "sample", 123456 ); print $ENV{HOGE}; # higeが表示される sub foo { my ($a, $b, $c ) = @_; $a->{HOGE} = 'hige' }
大きいハッシュや配列にリファレンスを使わないと 値を@_へコピーするのに時間がかかる(メモリも喰う)から、 なるべくリファレンスを使うのをお勧めします。
>>435 > ハッシュは(key1,value1,key2,value2・・・)となってるただの配列
ソースキボンヌ
つーか、ただの配列だったらでかいハッシュに対して$foo{bar}なんてことは気軽に出来ないから、間違いじゃねーの。
配列型(AV)とハッシュ型(HV)は別物。ただし代入はできます。
440 :
430 :03/08/03 19:27 ID:???
レスどうもです。リファレンス…奥が深そうですね。
Cで言うと、アドレス(orポインター)渡しみたいなもんですか?
なんか、少し混乱気味ヽ(´Д`;)ノ
>>433-435 さんのレスを参考にコーディングしてみます。
>>440 ポインタを理解してるんなら、覚えるのは早いと思うよ。
リファレンスを使えるようになったら脱初心者といえますか?
>>438 ハァ?
>ただの配列だったらでかいハッシュに対して$foo{bar}なんてことは気軽に出来ないから
何をおっしゃってますか?
内部でハッシュ関数を呼び出して、得られた値をインデックスとして使っているのですよ。
配列はランダムアクセスできるからO(1)じゃん。
>>438 ああ、もしかしてC++で言うこところのlist<string>だと思ってるわけ?間違いじゃねーの。
>>438 %hogeは配列に見えるし、配列で代入できる。
けれど内部的にはハッシュ。何も問題なし。
447 :
nobodyさん :03/08/03 21:55 ID:HoJp4WnK
html.gzファイルをopenして書き出してもブラウザにうまく表示されません。 Content-typeの表示が問題と思い、 なんとかEncoding:gzipかなんか書いたんですがだめでした。 何が問題と考えられるでしょう。
Content-Encoding
>>447 >>1 を読まないのが問題。
2度と来るなとは言わんが、
>>1 を1日10回読んで1週間後にまた質問しに来い。
今日はもう書き込むな。
>>449 そういうの辞めて無視し。いい加減バカかと。
>>450 なら、文句をいわずに、お前が回答しろ。
そういうの辞めて無視し。いい加減バカかと。
なら、文句をいわずに、お前が回答しろ。
コピペやめれ。無視しとき。
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
また過去ログも情報の宝庫です。よく探してみましょうね。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
【よくある勘違い】
CGI ≠ Perl です。
判らなければまずはググってみましょう。>
http://www.google.co.jp/ 【初心者の扱い】
「初心者」だからといっても容赦しませんことよ。ふふふ。
Perlのソース同士を比べて書き換えたりしたいのですが(差分を取ったりしたいです)、 差分取るソフトで使いやすくて便利なソフト教えてください。 早速、落としてこれから使っていこうと思いますので。
>>457 レスありがとう。
早速HPnなるもいったんですが、分からない…。
diff,patchをうまく使えば効率が良くなるんだが、
>>456 の想像しているものとは違う気がする。
気の利いたエディタなら普通についてそうだし、
Windows用のを探しているなら「Windiff」で腐るほどヒットする。
# つか捻りの無いソフト名多すぎ:)
461 :
457 :03/08/04 16:48 ID:???
>>460 # つか捻りの無いソフト名多すぎ:)
だな。俺もさっき調べてたけどWindiffって名前で色んな奴があるよな。
Cygwin入れてるから別にいいんだけどな。
462 :
nobodyさん :03/08/04 20:00 ID:IP9MFG+G
>>447 >>449 パソコン買い替え中で正確な記述が調べられないのれす。
でも争いが起きているとは驚きますた。
>>448 Content-Encoding
これでだと思いますが変わらなかったのですが
鯖が消してしまうとか
>>462 環境が整わないのに開発なんかしようとするな。
またファイト 漏れもうすぐネカフェの時間なので
あぼーん
あぼーん
あぼーん
あるモジュールがあるときでも無い時でも動くようにしたいのですが 負荷を考えると、ループの中でevalを使いたくないのです。 (ループさせる回数がとても多いので。) 現状では、こういう風にやってます。 eval('use Time::HiRes;'); if ( $@ eq undef ) { require './lib/bench.pl'; $HIRES = 1; &bench::start; } else { require './lib/dummy_bench.pl'; } 最初にこういう風にしておいて、 続く
bench.plの中身は package bench; use strict; use Time::HiRes; sub start { 処理ほげほげ } sub check { 処理ほげほげ } 1; dummy_bench.plの中身は package bench; sub start { } sub check { } 1: Time::HiResが必要な処理の時は &bench::check 等として呼ばれるわけですが、最初のevalのチェックで失敗してたら ダミーのほうが読み込まれているので空のサブルーチンが呼ばれます。 このやり方について2点疑問があります。 1.ファイル名とパッケージ名は同一でなければならないと聞いたことがありますが、これはやってはいけない方法なのですか? 2.もっとスマートな方法があるならご教授ください。
オーバーライドすれば?
>>469-470 1. 自分が何をやっているのか理解しているなら問題ない。
2. Time::HiRes の存在チェックを bench.pl 内でやれば
dummy_bench.pl は不要。
#--- Bench.pm ---
package Bench; # 小文字のみのパッケージ名はプラグマ
use strict;
eval ('use Time::HiRes;');
my $EnableHiRes = $@ ? 0 : 1;
sub start;
*start = $EnableHiRes ? sub { ... } : sub { ... };
#--- Bench.pm を使うスクリプト ---
use Bench;
Bench::start();
473 :
469 :03/08/04 21:50 ID:???
ありがとうございます。 とてもためになります! これがきっかけで ついでにいろいろ気になることも増えてきたので 勉強中です。。
474 :
469 :03/08/04 23:32 ID:???
事後報告っす。 サブルーチンの定義自体をevalしないと モジュールがないとき動きませんでした。 sub start; *start = $EnableHiRes ? eval 'sub { use Time::HiRes; ほげほげ }' : sub {}; #単純にevalの中でuseしてもされてないのでこうするしかないような
>>474 何故また use し直すんだ? 下のコードで試してみ。
Time::HiRes が存在すれば実際に sleep した時間が、
無ければ常に 1 が返ってくる。
#--- Stop.pm ---
package Stop;
use strict;
eval('use Time::HiRes qw(usleep);');
my $Enable = $@ ? 0 : 1;
sub stop;
*stop = $Enable ? sub { usleep($_[0] * 1_000_000) } : sub { sleep($_[0]) };
1;
__END__
#--- test.p ---
#!/usr/local/bin/perl
use strict;
use Stop;
local $| = 1;
print 'foo,';
my $wait = Stop::stop($ARGV[0]);
print "bar. ($wait)\n";
__END__
476 :
469 :03/08/05 01:03 ID:???
あ、動きました。汁 まじすいませんです。 475のコードでもいろいろやってみました。 evalしないと動かなくなっていたのは 以後の処理のほうに問題があるっぽいです。 あるっぽいというのは、最小限の部分だけコード取り出して いろいろ試してたら今動いたので。 これからじくーり調べます。 ほんとたすかりました。
my $Enable; if (require Time::HiRes) { $Enable = 1; Time::HiRes->import('usleep'); }
日本語をブラウザのアドレスバーに入れたとき見たいな文字列に変換したいのですが 具体的には 「日本語 ファイル名テスト用ファイル.txt」を %C6%FC%CB%DC%B8%EC%20%A5%D5%A5%A1%A5%A4%A5%EB%CC%BE%A5%C6%A5%B9%A5%C8%CD%D1%A5%D5%A5%A1%A5%A4%A5%EB.txt このようにしたいのです、変換元の日本語はEUC(自身無い)です 今、他人のCGIをいじっているのですがそもそも反対のことをしているのはわかっているのですが うまく、上の形になりません、何か効率のいい方法はありませんか?
479 :
478 :03/08/05 05:33 ID:???
訂正、 >うまく、上の形になりません、 うまく、上の形の文字列が取得できません
$str = '日本語 ファイル名テスト用ファイル.txt'; $str =~ s/(\W)/'%'.unpack("H2", $1)/ego; print $str;
use Time::HiRes; と eval('use Time::HiRes;'); は何が違うの?
>481 前者は実行できなかった時にコンパイルエラーになる。 後者は実行できなくてもそのまま進む。
CGIとして使っているperlなのですが、バグが発生し、 俺の実力では原因が特定出来ないので相談にのってもらいに来ました。 ファイルの書き換えなのですが、日頃正常に動いていた動作で、 突然ファイルの中身が消滅してしまい、「0バイトのファイル」になってしまいました。 記述内では、ファイルを書きかえる処理として、 open(FILE,">$log_file"); print FILE $log_code; close(FILE); このようなもの「のみ」あり、$log_codeには必ず何かが代入されています。 $log_code に何かが代入されているのはこのプログラムの基本で、代入されていないわけはありません。 また、今回発生したバグと同一の処理は日頃から普通に行っていました。 また、このファイルは複数人数が書き換える物ではなく、 ID登録した「一人の人物」が書き換えるものなので、ファイルロックなどはしていませんでした。 今回のバグで、ファイルの中身が消滅してしまう原因となったアクセス者は、 「俺自身」です。 プログラム作者は俺自身なので、微妙に動作は怪しいですが、今回のは想定外のバグで、原因がつかめないでいます。 記述を考えても、処理自体のバグでファイルが消えてしまった事は非常に考えにくいのですが、 これは取り敢えず、 「処理自体のバグ」を疑うべきでしょうか? 「システムのファイル書き換えミス」を疑うべきでしょうか? m(__)m
あぼーん
>$log_code に何かが代入されているのはこのプログラムの基本で、代入されていないわけはありません。 デバッグにおいてこういう思い込みは最大の敵。 必ずテストを行ない、その結果を確認する事。 この場合なら、openの前後の行にprintで$log_codeを表示させてみる。 はっきり言えば、>483の説明だけではなんとも言えない。 情報が少なすぎる。
再現できなさそうだしopenの前に die "Error : \$log_code" unless ($log_code); とか これを機にいろいろトラップしとき
>>482 ありがと。
eval 文字列でも、eval { }のように、エラートラップできるとは
知らなかった。勉強になりました。
>>487 両者の違いは、一気に構文解析がされるかされないか。
eval BLOCKの場合はそうされるので、eval 文字列よりも高速
489 :
483 :03/08/05 14:46 ID:???
>>485-486 ありがとうございます。
同じように再現しようと思っても日頃からやってるのと同じ処理なので困ってました。
今度から、ことごとくプログラム内でエラーチェックしておくようにします。
バグの原因が分からない時ってスッキリしないですね。。。。汗
一人の人物だからロックしないってありなん? 超高速でダブルクリックして呼び出しかけたらどうなんねん?
複数窓開くのもあるな。ってか、そのCGIはゲーム系? クレス
>>483 消えて当然かと。
今まで運良くopenとcloseの間で処理が停止しなかっただけ。
493 :
492 :03/08/05 18:45 ID:???
>>483 もうひと言付け加えると今まで正常に動いていたのは$log_fileが軽かったから。
$log_fileのサイズが臨界点に達すると、鯖がいい加減にしろと作業途中で職場放棄。
494 :
483 :03/08/05 20:36 ID:???
>>490-493 みなさんありがとうございました。
大変参考になりました。
>>492 それを回避するには、ファイルを2つ用意し、バックアップも常に生成しておけ…
と言う事でしょうか?
排他制御を知らない奴はCGI作るなという事でFA。
Func (・∀・) Anal
> $log_fileのサイズが臨界点に達すると どのくらいよ?
499 :
nobodyさん :03/08/05 22:25 ID:LRtAIpMc
srand(time|$$); my $et = int(rand(9)); if($et == 3){ srand(time|$$); $et =int(rand(2)) ; if($et == 0) { @ }else{ A だと、全部@になります。 2つ目の srand(time|$$); を無くすと、 正常になりますが、どうしてでしょうか?
>>495 排泄処理…?プロセス事故死の話だろ?
>>494 が正解。
ただlogを毎回自動バックアップしてたら壊れたファイルも…ってことになるから、
その変自分のにあったうまい方法を考えておく事。
>>498 perlのメモリ管理はperl自身でやっているから、
つまり鯖によって設定が(ry
>>499 なんで2回も初期化してるのかは知らんけど。
randの出しかたはアルゴリズムがマシンによって違うぞ。
俺の勘では、それwin系のシステムで使ってないか?
あぼーん
>>500 > 排泄処理…?
おまるを用意しる!(w
>>499 これを動かしてみそ。
srand(time|$$);
my $base = rand;
print "base = ", $base, "\n";
srand(time|$$);
print "base*3 = ", $base*3, " rand(3) = ", rand(3), "\n";
srand(time|$$);
print "base*2 = ", $base*2, " rand(2) = ", rand(2), "\n";
しかし、srand(time|$$)って、Win系だと数列がほとんど変化しない予感。
あぼーん
507 :
504 :03/08/06 01:10 ID:???
説明が無いのもなんですので。。
処理系によるかもしれませんが、大抵、srandに同じ乱数シードを与えると
randで読み出す乱数列が同じ物になります。
>>499 の複数回のsrand(time|$$)で、$$(プロセスナンバー)は変化しません。
timeは一秒ごとに更新なので、これもほとんど変化しません。
つまりrandの前でsrand(time|$$)を実行することによって、(かなりの確率で)
同じ数列を読み出してることになります。
rand(n)はrand()*nと(最低でもperl5.005_03以降は)等価なので、
int(rand(9))==3が成り立ちrand()値が同じ場合、rand(2)で得られる値は
3.0/9*2=0.666..から3.999../9*2=0.888..までの値になります。
よってint(rand(2))で得られる値は常に0になります。
…多分ね。
508 :
nobodyさん :03/08/06 09:23 ID:7imIHn2W
evalについて教えてください。 パッケージ($package)のシンボルテーブルを、%stabで参照できるようにする コードとして、赤ラクダ本に次のように書いてありました。 local(*stab) = eval("*_$package"); (*_$packageの部分は、Perl5では、*{${package}::}だと思います。) このevalは何をしているのでしょうか? あっても、なくても同じでしょうか?
>>508 perl4ではシンボリックリファレンスは使えなかったから、eval()が必要だった。
今ではわざわざeval()する必要はないね。
ついでに型グロブで別名をつける必要も無い。
my $stab_ref = \*{$package."::"};
これでシンボルテーブルへの参照を直接使えばいい。
510 :
nobodyさん :03/08/06 10:57 ID:7imIHn2W
>>509 さん
どうも有り難うございます。でも、Perl5でシンボリックリファレンスを使え
ないようにして、しかもevalなしでも動いてしまうのが不思議です。
use strict 'refs';
$package = 'main';
local(*stab) = "*${package}::";
while (($key, $val) = each(%stab)) {
local(*glob) = $val;
if (defined $glob) { print "$key => $glob\n"; }
}
>>510 あ、ホントだ。
多分、perl5からだと思う。
でも折角のstrict 'refs'なのに…変な仕様だね。
512 :
nobodyさん :03/08/06 11:45 ID:JjxVikEH
HP管理システムのCGIを作ろうとしてるんですが、 フォームから取り入れた情報にファイルを書き換えるコードを書いたんです。 そしたらその書き換えるファイルを開こうとしてもそのOPEN行でエラーが起こってしまうんです どうしたらいいのでしょうか open(FILE,"+<$fileini"); ご要望ならソースコードの一部または全部を載せますが・・・。 誰か教えてください。
>>1 【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
エラーが起きました、開けません。 だってさ。 しかも、「ご要望なら」ソースを見せますが。だってさ。 誰の要望だよ。 ちなみにそのopenは書式ミスしてないよ。
>>500 Perlは変数の大きさを勝手に制限するような事はしないから、
Perlの設定や、鯖の設定(もしかしてこれは資源の制限値?)には関係なく、
Perlが取れる最大のメモリが影響する。
>>498 CGIとして動かすなら、ブラウザのタイムアウトでプロセスが殺されるという限界になるはず。
あぁ、httpdのCGIプログラムに対するタイムアウトの方が厳しいか。普通。
ブラウザのタイムアウトでは鯖のプロセスが死ぬの??
>>517 「CGI signal タイムアウト」でググってみ。
書籍があるならsignalの章を見てもいいぞ。
て、ここperlコーディングスレじゃん....
519 :
512 :03/08/06 14:37 ID:JjxVikEH
すいません、なにぶんわきまえがないもので・・・ HPの諸設定の書き換えがしたくてCGIをコーディングしたんですが フォームで設定ファイルを書き換える段階まで来て、 このOPEN行で Unterminated <> operator at administrator.cgi line 194. ってでるんです。194行目は open(FILE,"+<$fileini"); です。
あぼーん
521 :
336 :03/08/06 14:51 ID:???
522 :
519 :03/08/06 15:03 ID:JjxVikEH
523 :
519 :03/08/06 15:06 ID:JjxVikEH
なんかエラー増えちゃいました・・・(泣) Scalar found where operator expected at administrator.cgi line 194, at end of li ne syntax error at administrator.cgi line 194, near "open(FILE,"$fileini" String found where operator expected at administrator.cgi line 201, near "print FILE "" (Might be a runaway multi-line "" string starting on line 194) (Missing semicolon on previous line?) Backslash found where operator expected at administrator.cgi line 201, near "pri nt FILE "\" (Do you need to predeclare print?) syntax error at administrator.cgi line 227, near "}" administrator.cgi had compilation errors.
>>508-511 local(*stab) = *{"${package}::"}; # シンボリックリファレンス
local(*stab) = "*${package}::"; # シンボリックリファレンスではない
$pkg = 'ABC';
print "*${pkg}::"; # *ABC::と表示
print eval("*${pkg}::"); # *main::ABC::と表示、何でこうなるかは不明
525 :
336 :03/08/06 15:11 ID:???
その行そのものは間違ってないがエラー表示で<>がおかしいといっているので とりあえず削除してみてどうなるのか確認したかった。 どっか前の行で"を付け忘れたりとかそんなミスじゃないの。
526 :
336 :03/08/06 15:19 ID:???
>>519 $file ="test.txt;
open(IN, "+<$file");
これで同じエラーが出ます。
>>526 カッコや""なんかの対応が合ってないだろ。
エラーメッセージ行は考えずにそのルーチン内を全部見てみれ。
528 :
519 :03/08/06 16:00 ID:JjxVikEH
>>527 一応一通り見てみたんですけど、おかしいとこはなかったんです。
sub formset {
# フォームデータ取得
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
$query="$ENV{'QUERY_STRING'};
}
# フォームデータ復元
foreach $pair (split(/&/, $query)) {
($key, $value) = split(/=/, $pair);
# 文字のデコード
$value =~ tr/+/ /;
$value =~ s/%[0-9a-fA-F][0-9a-fA-F]/chr(hex($1))/eg;
$foem{$key} = $value;
}
# ファイル出力
open(FILE,"+<$fileini");
seek(FILE,0,0);
foreach $key (sort keys %form) {
print FILE "\$$key=\"$form{$key}\"\;\n";
}
# ファイルを閉じる
close(FILE);
}
これがこのコードの入ったサブルーチンです。
このルーチンを抜いてチェックしてみたらsyntax OKでした。
529 :
519 :03/08/06 16:01 ID:JjxVikEH
すいません、かなり、見づらくなってしまいました(汗)
$query="$ENV{'QUERY_STRING'};
あぼーん
533 :
519 :03/08/06 16:20 ID:JjxVikEH
ほんとだ! 今の今までまったく気がつきませんでした。 syntax OK出ました!! ありがとうございました!
情報を小出しにすると解決までの道のりが遠くなる、という見本のような質問だったな。
うぜぇ
つーか括弧の対応とかクォーテーションの数を確認するスレではないんだが
perlの気持ちになってみると、 $query="$ENV{'QUERY_STRING'}; .....次の " を探し中.... open(FILE,"+<$fileini"); ビクッ. ∧ ∧ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Σ(゚Д゚;≡;゚д゚) < うおっ、 " がでてきたが、なんかすげえ所に迷い込んじまったぞ、ゴルァ! ./ つ つ \______________________ 〜(_⌒ヽ ドキドキ )ノ `Jззз
>>533 悪いが、この程度も自力解決できないようだと、プログラミングは難しい。
試しに聞いてみるが、この程度のエラーが出る度に2chで何日もかけて尋ねるのか?
明らかに構文が正しい行でエラーが出た場合は、
>>528 みたいに、前の"の対応ができてない。
EOFにエラー出る場合は、大体括弧の対応がおかしい。
このくらいは覚えれ
>試しに聞いてみるが、この程度のエラーが出る度に2chで何日もかけて尋ねるのか? そういう奴が以前いたな。
opun(DATA,"data.txt"); で動きません。どうしてですか?
>>541 >>1 1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ファイルハンドルをDATAとして、data.txtを開きたい Syntax errorがでました。
厨な質問が増えたな
>>543 構文エラーです。
構文を確認してください。
ローマ字perlというのが出来たのか?
>>541 わざとか?ネタか?いいかげんにしてくれ。
open
さぁ、さっさと帰れ。
541です。すいません、構文エラー直りました。 それと、 if(!iguzisuto "data.txtx"){処理;} が動きません。 どうしてでしょうか。イグジストであってるはずなんですが・・・
o . 。 . . , . , o 。゚. ,゚ 。 + 。 。,゚.。 ゚ , , 。 . + ゚ 。 。゚ . ゚。, ☆ * 。゚. o.゚ 。 . 。 。 . .。 o .. 。 ゚ ゚ , 。. o 。* 。 . o. 。 . . 。 . 。 . .゚o 。 *. 。 .. ☆ . +. . . 。 . . . . . 。 ゚。, ☆ ゚. + 。 ゚ ,。 . 。 , .。 ゚ 。 ゚ . +。 ゚ * 。. , 。゚ +. 。*。 ゚. . . . . 。 . . 。 。゚. 。* 。, ´。. ☆。。. ゚。+ 。 .。 . 。 . . 。 ゚ ゚。 。, .。o ☆ + ,゚。 *。. 。 。 . 。 . ゚ .゚ ゚ 。゚ + 。. +。 * 。゚。゚., ,+ 。゚. 。 . . , , . ゚。゚+゚`, o。。.゚*。゚ 。.゚ 。 ☆+。。゚. ° 。 . , ゚ ゚ 。, .゚。 + ☆。,゚. o。 。+ 。゚., . ゚ , 。 。 . . ゚. o * 。゚。゚.。゚。+゚ 。 。 ゚。 ゚ 。 ゚ ゚` .゚ .゚. ゚. . ゚ . ゚ . , . . . 。 ゚ . . . . , 。 . . , . 。 ゚ . 。 , . . , . . 夏だね 。 V ∧∧ ∧∧ <うん。夏だ ( :;;;;;:::) ( :;;;;: ) . . /:;;;;;: | | :;;;:ヽ 〜(::;;;;;;:/. |:;;;;;;: ) ‐''"´'''"""''"`''""`"""''''''"´'''"""''"`''""""'''"''''''"`"""''''``'‐
いや、そりゃ8月は夏でしょ
ニュージーランドでは冬。とってもさむい。
552 :
nobodyさん :03/08/06 21:27 ID:ihwsdtLY
delete $hash{'name'}; はvalueを削除するがエントリーは残る、よって $hash{'name'} = ''; と同じ。 undef $hash{'name'}; は未定義だからエントリーそのものがなくなる。 であってますか?
いいえ
>>552 existsやってみたらすぐわかるじゃん。
ちょうど逆。
>>554 センセー definedだと思いますっ。
センセー ボクがまちがっていましたっ。
558 :
552 :03/08/06 23:10 ID:???
>>554 コマンドラインでやってみたら全く逆でした。
すません。
keyからそっくりなくすにはdeleteなんですね。
マニュアル *読めば* 理解できる事だが…
560 :
nobodyさん :03/08/07 10:17 ID:MNjVgF7U
簡単なことかもしれないけど $aの属性 $a = 100 $a1 = 200 $a2 = 300 $b があるとする。このとき、$aの属性と$aの属性がぶつかったときは なんともにないけど、$aの属性と$bの属性がぶつかったときは 条件が加えるようにしたい それで $aのときは条件をつけようと思ったんですけど、属性$aの定数が変数なので 条件がうまくつけられない よい方法はないだろうか? if = $a だと下の2つが含まれなくなる。初心者だけど、わかりますか?
561 :
:03/08/07 10:20 ID:???
>>560 変な自分用語を使わないでクレ。
あと簡単な例でも書いてくれ。
563 :
nobodyさん :03/08/07 10:29 ID:MNjVgF7U
ゲームなんだけど 属性というのは火属性は$aとする $a1や$a2もダメージが違うだけで、火属性としたい。 $bや$cの属性も作りたいけど、ダメージ違いのものもたくさん作る。 このとき火属性と水属性がぶつかったら命中力がおちるとか 条件をつけたい その属性を特定づける、うまい書き方ってありますか? ダメージは相手の防御でランだムに減るので、数字は変数なので 固定させることはできないです。
いらっしゃーい、Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 1: 自分はこう言う事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 ソース貼る時は、全角スペースでインデント忘れずに。 良い回答は良い質問から。一緒に勉強しましょう。 『どういう入力に対してどういう出力が出るのか書け』
565 :
nobodyさん :03/08/07 10:36 ID:MNjVgF7U
出力というよりも、入力のしかたがわからないです。
566 :
nobodyさん :03/08/07 10:41 ID:MNjVgF7U
$ = int(rand 6); $aは火 $a = 100 $a1 = 200 $a2 = 300 属性は水 $b = 100 $b1 = 200 $b2 = 300 if { $火属製 = 条件 else { 水属性の条件
567 :
nobodyさん :03/08/07 10:44 ID:MNjVgF7U
火属性に条件を加えたいが、 $aで加えても$a1 $a2 は火属性の条件がつかないので、困る
568 :
nobodyさん :03/08/07 10:45 ID:MNjVgF7U
100とか200にしてるけど、実際の数字は300×ランダム値−(魔法防御) とか変数になる
### 魔法の処理 ### $magic[$zokusei]['lv1'] = 100; $magic[$zokusei]['lv2'] = 200; if($zokusei == "fire"){ if($zokusei == "water"){ 水の時の処理; }elsif($zokusei == "earth"){ 土の時の処理; } } 俺ならこんな感じかな(手抜きでスマソ
570 :
569 :03/08/07 10:49 ID:???
ついタブを _| ̄|○
571 :
569 :03/08/07 10:56 ID:???
しかもこれじゃ駄目じゃん!<俺 phpと混ざってるし… ちゃんと回線切って吊ってきて直してくる…
572 :
nobodyさん :03/08/07 10:57 ID:MNjVgF7U
なるほど。[$zokusei]['lv1']の方法を初めてみました。 自分のは無駄が多かったみたいです。ありがとうございます。
573 :
569 :03/08/07 11:00 ID:???
>>572 まあ、ハッシュを使ってくれという事だ…。
さて吊ってくる
574 :
nobodyさん :03/08/07 11:07 ID:MNjVgF7U
え!?まちがってるんですか!?
575 :
:03/08/07 11:14 ID:???
>>574 とりあえずgoogleさんでハッシュに関して調べてみるべし。
多分お前が望んでいる答えがそこにある。
$magic{$zokusei}{LV}
上記は、「魔法」の「属性」が「レベル幾つ」のものであるか、という意味だ。
プレイヤー1の魔法属性(仮に$magic_p1)とプレイヤー2の魔法属性($magic_p2)とする。
で
if($magic_p1 == "fire"){ ### プレイヤー1の属性が火の時
とかでいいんでない?
細かくはリファレンスでも見るよろし。
576 :
nobodyさん :03/08/07 11:16 ID:MNjVgF7U
[$a]などを名前の後ろに属性としてばばばって書いてしまいましたが、 これは問題ないですよね? Perl のゲームに適した文法の辞書サイとを知りませんか?
577 :
:03/08/07 11:18 ID:???
ここは確かに初心者コーナーだが、1から10まで面倒を見てやるところじゃない。
578 :
nobodyさん :03/08/07 11:28 ID:MNjVgF7U
直しました あと、簡単なことは自分で調べたいんですが、 手元にある入門の本は不十分で、いろいろできないんですよ。 いいサイトしりませんか? ちなみに、パール、辞書で調べると、パールスクリプトの辞書が ひっかかって、肝心の言語辞書が全くみつからないです
「言語辞書」って一体何だよ…
属性もそうだが、自分用語を改めないことにはこの先もトラブルが絶えないぞ。
とりあえず先人のまとめてくれたテンプレ
>>4-6 を参考にすべし。
よく分からんが、この質問は 「ある1つの魔法に、属性や攻撃力など 複数のパラメータを設定するうまい書き方を教えてくれ」 と解釈して良いか? ↓複数のパラメータを設定する方法 $magic{'メラ'} = ['fire','100']; $magic{'バキ'} = ['air','500']; ↓各パラメータの参照方法 print "$magic{'メラ'}[0]"; print "$magic{'バキ'}[1]";
ハッシュがとうとかより、もっと多次元な気がするからリファレンスだと思うんだけど。
>>581 の例はハッシュの中に無名配列のリファレンスを入れた例かな。
実際はもっと複雑になると思われ。
ファイル abc.html に含まれる あいうえお という文字列を かきくけこ に変換して上書き保存したい場合はどう記述すればいいんでしょうか? ご回答よろしくお願いします。
585 :
nobodyさん :03/08/07 13:44 ID:fxtSTKIN
#!/path/to/perl open IN,"file/name/to/convert"; open OUT,">file/name/to/convert.tmp"; while(<FILE>){ s/あいうえお/かきくけこ/g; print OUT; } rename "file/name/to/convert.tmp","file/name/to/convert";
586 :
nobodyさん :03/08/07 13:57 ID:2CZr0oID
FreeBSDのみでしか動作確認ができていないperl-cgiをANHTTPD+ActivePerlで動かしたいけど、 open($fh, "-|"); が開けなくて困っています。 Windows版のperlは-|は対応していないのですか? 素敵な対応方法を教えてください。
>>586 perldoc -f open は読んだかい?
マックやウィンドウズでは使えないっすよ
589 :
nobodyさん :03/08/07 15:12 ID:2CZr0oID
さげるの忘れてますた
あぼーん
592 :
nobodyさん :03/08/07 16:03 ID:MNjVgF7U
ゲームで、対戦で、攻撃はパンチとキック、どちらかは2分の1 パンチの場合は、5回に1回はダメージ低い。 さらに5分の2の確率でミスをする。 というのを、1ターンの各攻撃を下のスクリプトに書いたが動かない 誰かこの初心者を助けてください
593 :
nobodyさん :03/08/07 16:03 ID:MNjVgF7U
プレイヤー1は$play11の攻撃 プレイヤー2は$play22の攻撃 $play11 = $sentaku1 $play22 = $sentaku1 $kik = 60 $sentaku = { $play1 = int(rand 2) if($play1 == 0) { $kik } } else($play1 == 1) { $bougyo = int(rand 5) if($bougyo =< 1){ 0; else($bougyo >= 2) { 1; } { $panti = int(rand 5); if($panti == 0) { $panti1 = 10; else($panti > 0) { $panti2 = 20; } * $bougyo; } }
( ゚д゚)ポカーン あきれて何も言えん・・・
>>592 ちみ、潔いですね!男らしいですね!
ということで、『今回だけ特別に』解答してさしあげる。
構造化プログラミングが苦手そうなちみは、gotoを使いなさい。
>>592-593 ここはお前の相談コーナーじゃないし、質問以前の問題だ
文法を一から勉強しなおしてこい
ゲームで値を決める場合 $temp = A1 ? B : A2 ? C ; A3 ? D : ''; とか、オレならやるかな…
$panti = black; (;´Д`)ハァハァ…
$panti = t_back; (;´Д`)ハァハァ…
600 :
:03/08/07 17:43 ID:???
$panti = heibon; (;´Д`)ハァハァ…
601 :
nobodyさん :03/08/07 18:06 ID:fDShQWtW
質問させてください。 192\.168\.0\.[24-26] こんなイメージで正規表現使いたいのですが、勿論このままでは とおりません。 何かいい書き方ありましたら教えてください。
192\.168\.0\.[24|25|26]
603 :
601 :03/08/07 18:07 ID:???
すみません、実際やってるIPは 192\.168\.0\.[65-94] です。
あぼーん
ピリオドでsplit
>>603 192\.168\.0\.((6[56789])|([78][0-9])|(9[1234]))
607 :
601 :03/08/07 18:16 ID:???
>>606 マジで感謝でございます。
有難うございました。
あぼーん
あぼーん
>>603 $addr="192.168.0.78";
$addr=~/192\.168\.0\.(\d+)/;
if($1>=65&&$1<=94){
611 :
nobodyさん :03/08/07 20:28 ID:MNjVgF7U
あなたたち、これのどこがおかしいんですか? とてもすばらしいじゃないですか 僕の芸術をケチつけられても困ります。 もっといい方法があるなら教えてくださいよ
あぼーん
613 :
nobodyさん :03/08/07 20:30 ID:MNjVgF7U
プレイヤー1は$play11の攻撃 プレイヤー2は$play22の攻撃 $play11 = $sentaku1 $play22 = $sentaku1 $kik = 60 $sentaku = { $play1 = int(rand 2) if($play1 == 0) { $kik } } else($play1 == 1) { $bougyo = int(rand 5) if($bougyo =< 1){ 0; else($bougyo >= 2) { 1; } { $panti = int(rand 5); if($panti == 0) { $panti1 = 10; else($panti > 0) { $panti2 = 20; } * $bougyo; } }
もう来るなと言ったろ
それ、エラーチェックしてんの??????????????? とりあえず、まず文法守れや。
foreachは foreach $a ($b) {} とするか foreach ($b) {} とするのはどっちのほうがいいのですか?
>>616 ケースバイケース。
後者は $_ に入るだけだから、うまく使い分ける。
618 :
nobodyさん :03/08/08 01:06 ID:XW8ex5pf
あるCGIに半角カナも投稿出来るように改造したいなと思い、
ライブラリ、jcode.plをjcodeg.plに変更し、コンバート処理を
&jcode'convert(*value, sjis);
から、
&jcode'convert(*value, "sjis", "", "z");
のように変更しました。
これで一応は半角カナも文字化けせず投稿できるようにはなったんですが、
ログファイルの更新ごとに、ログファイル先頭の部分に、
「*main::valuesjisz」
という何とも意味がわからぬ文字がついてしまうようになりました...
色々いじってみたのですが、上手くいきません。
どうしたら上手く処理出来るんでしょうか...
jocdeg.pl :
ttp://jo.st45.arena.ne.jp/script/
>>618 これでやってみそ。
&jcode'h2z_sjis(*value);
620 :
nobodyさん :03/08/08 01:21 ID:RBuH2Puu
プレイヤー1は$play11の攻撃 プレイヤー2は$play22の攻撃 $play11 = $sentaku1 $play22 = $sentaku1 $kik = 60 だけど、エラーが出ます。なんでエラーでるんすか? イフとエルスの置き方はちゃんとしてますよ。 ふざけてますね。
あぼーん
なんでそんなんも分からん状態で質問してんのさ。 最低限文法とか調べてや。 ふざけてるのは(ry 単純文の終わりにはセミコロンがいるよ。
>611 :nobodyさん :03/08/07 20:28 ID:MNjVgF7U >あなたたち、これのどこがおかしいんですか? >とてもすばらしいじゃないですか >僕の芸術をケチつけられても困ります。 > >もっといい方法があるなら教えてくださいよ
あぼーん
キリないから相手にするなって
626 :
618 :03/08/08 01:41 ID:???
>>619 どうもありがとうございます。
早速やってみたところ、500 Internal Server Errorが出てしまいました(~_~;)
他に手立てはないでしょうか?
よろしくお願いします。
>>626 ちゃんとエラーの読める環境で試しましょう。
>>618 さん
&jcode::convert(\$value, "sjis", "", "z");
と書いてもダメぽ?
629 :
618 :03/08/08 02:05 ID:???
>>628 エラーも出ず、ログファイルも正常に更新されました!!
どうもありがとうございます!(^^)!
630 :
nobodyさん :03/08/08 02:41 ID:RBuH2Puu
攻撃 イフキック エルス、パンチ(イフ、命中(イフ、5分の1で会心の一撃 (エルス、普通 (エルス、ミス と言う様に、イフの中に、さらに3重、4重にイフやエルスを クませることってできますよね? あと、エラー出ても、500さーバーエラー、中見が悪いって内容の エラーしか出ないんですけど、どこが悪いか詳細の出すことできないっすか? 自分のパソコンにアクティブ入れると、詳細出ますかね?
各生徒のテストの成績データをperlで扱うとき、どのようなデータ型を使うのが ベストでしょうか?DBは使わないとします。 要するに、行が色々なテスト名、列が生徒名となっているような典型的なテーブルです。
生徒名・テスト名から点数にアクセスできるようにしたいのですが、 ハッシュだとキーはどうなりますか?
リファレンスでも勉強してくれば〜??
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
641 :
nobodyさん :03/08/08 04:32 ID:RBuH2Puu
攻撃 イフキック エルス、パンチ(イフ、命中(イフ、5分の1で会心の一撃 (エルス、普通 (エルス、ミス と言う様に、イフの中に、さらに3重、4重にイフやエルスを クませることってできますよね?
642 :
nobodyさん :03/08/08 04:34 ID:RBuH2Puu
こうなる プレイヤー1は$play11の攻撃 プレイヤー2の$play22の攻撃; $play11 = $sentaku1; $play22 = $sentaku1; $kik = 60; $sentaku = { $play1 = int(rand 2); if($play1 == 0) { $kik; } } else($play1 == 1) { $bougyo = int(rand 5); if($bougyo =< 1){ 0; else($bougyo >= 2) { 1; } { $panti = int(rand 5); if($panti == 0) { $panti1 = 10; else($panti > 0) { $panti2 = 20; } * $bougyo; } }
644 :
nobodyさん :03/08/08 04:44 ID:RBuH2Puu
フセイン イフ捕まる(アメリカに核を落とす エルス捕まらない(イフ包茎じゃない(イフ、オレは天才(オレを総理に 逆らう者北朝鮮へ (エルス、オレは天才じゃない (世界を滅ぼす (エルス包茎(世界を滅ぼす と言う様に、イフの中に、さらに3重、4重にイフやエルスを クませることってできますよね?
>>644 もう寝れ。二度とくるな。基本的な文法くらいわかってから来い
646 :
nobodyさん :03/08/08 04:49 ID:RBuH2Puu
10日でおぼえる Perl/CGI 入門教室 <h1>定価2800円 税なし
648 :
nobodyさん :03/08/08 04:54 ID:RBuH2Puu
おれのパーるは動かないぞ サーバーはエラーばっか出しヤガル 自分のパソコンにアクティブ入れようか考え中
ところで全然関係ないけど。 今日、オートロードってヤツをなんと初めて知った。恥ずかしい限り。 見た瞬間感動しちまった初心者な自分。 うん、いいね。あれ。 それだけです。
650 :
nobodyさん :03/08/08 04:55 ID:RBuH2Puu
おみくじの部分を入れかえて パわーアップさせたら、そうなった
651 :
nobodyさん :03/08/08 04:56 ID:RBuH2Puu
この本、全然使えないな
>>649 名前しか知らない。解説して。
ぐぐるの面倒だ
>>651 使えないのはお前の脳みそです。
俺はそれでPerl始めましたから。
かなりわかりやすい本だと思いますが?
654 :
nobodyさん :03/08/08 04:58 ID:RBuH2Puu
3000円返せ
655 :
nobodyさん :03/08/08 05:01 ID:RBuH2Puu
半か丁かのところで 半を選ぶ そこにさらに半を選ぶと、半か丁か選ばれて内容がかわる 半か丁かを簡単に改造しただけなんだが この始末だ 10日でおぼえるどころか、1日目から動かない この本、だめすぎ
>>655 解説嫁。カスガ。けなすな、人が気に入ってる本を
と、反応してしまう自分が悲しい
657 :
nobodyさん :03/08/08 05:13 ID:RBuH2Puu
わかった if($bougyo =< 1){ の=と<が逆だな 56Pでわかったよ これで動きそうだ
658 :
nobodyさん :03/08/08 05:30 ID:fJ1eIuTw
>>657 いや、報告しなくていいから。
ここはあんたの日記帳じゃないんだし。
ゲームで、対戦で、攻撃はパンチとキック、どちらかは2分の1パンチの場合は、5回に1回はダメージ低い。さらに5分の2の確率でミスをする。 -------------- 実行してないから動くのか知らんけど暇つぶしに。誰が攻撃するのか分からんかったからこう書いた。 -------------- srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'攻撃力'} - $defense->{'守備力'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'攻撃力'} - $defense->{'守備力'}; } ($damage < 0) and ($damage = 0); $defense->{'HP'} -= $damage;
>>652 間違って存在しないサブルーチンに飛んだら、エラーを発生させず、特定のサブルーチンに移動してもらう昨日。
引数もちゃんと受け継がれる。
変数名で飛んでくルーチンを指定してる時とか便利かも。
使いかたは検索して。
fJ1eIuTw は自演か? 二度と来るな!
>>661 違う。頭の柔軟体操のため、作ってみただけ。
スマソ。
663 :
662 :03/08/08 05:58 ID:???
RBuH2Puuって、ちょっと前に探してますスレにいた粘着と行動が似てるな。
自分も以前、半角カナのやつで行き詰まったことがあるけど、適当にいじってたら投稿できるようになった。 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } jcode::convert(\$buffer, 'euc'); @pairs = split(/&/,$buffer); foreach $pair (@pairs) { てな感じで… チャットなんもんで、htmlで出力してるんだけど ヘッダには charset=Shift_JIS って書いてる。 でも文字化け全然しない… 不思議……(@▽@;)
>>659 お前はバカか?やるなら荒らしと廃スレでやれや
669 :
nobodyさん :03/08/08 14:21 ID:awu4UezK
配列のなかの要素(数字)をすべて足した数値を出すには foreachを使うのが一番いいのでしょうか?
>>669 $ perl -e '@array=(1,2,3);print eval join("+",@array);'
:で区切られた文字列があります。 もし、 : の後にhogehogeがあるなら、:から:までを消すのはできたんですが ※こんな感じで s/:hogehoge.*?://g その逆の、 : の後にhogehogeが ない なら、:から:までを消す 方法を教えてください。
age
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
681 :
nobodyさん :03/08/08 16:47 ID:RBuH2Puu
#!/usr/bin/perl # CGIヘッダの出力 print "Content-type: text/html\n\n"; srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'攻撃力'} - $defense->{'守備力'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'攻撃力'} - $defense->{'守備力'}; } ($damage < 0) and ($damage = 0); $defense->{'HP'} -= $damage;
682 :
nobodyさん :03/08/08 16:52 ID:RBuH2Puu
これで動かないんですけど、 あと何が必要ですか? キャラはPlayer1とPlayer2 Player1はHP400、キック力は60、パンチ力は20、防御力は10 Player2はHP300、キック力は100、パンチ力は40、防御力は0 とりあえず1回動かしてみないと、先にすすめないし、 勉強もできない 困ったもんだ
683 :
nobodyさん :03/08/08 16:55 ID:dNGBD9SF
%Japan = ( 'tokyo' => [ qw(新宿 渋谷 原宿 池袋 秋葉原) ] , 'kanagawa' => [ qw(横浜 藤沢 厚木 茅ヶ崎 横須賀) ] , ); という感じのデータで、$Japan{tokyo}を配列としてforeachでぐるぐる回したいのですが、 どのようにすればいいのでしょう? foreach ( @$Japan{tokyo} ) { print; } とやったのでは出来ませんでした。
Perlの初心者スレが無かったのでここで質問です。 サーバ上のPerlのバージョンを調べたいのです。 Niftyを利用しているのですが、 説明のページにもPerl5としかかかれておらず細かいところがわかりません。 #例えば5.6なのか5.8なのか不明だったり Perlスクリプトで調べるにはどうやれば良いのでしょうか。 因みにNiftyはtelnet不可で標準モジュールも全く使えません。
>>684 #! /usr/local/bin/perl
print 'Content-Type: text/html',"\n\n";
print '<html>';
print $];
print '</html>';
ってな感じのCGIを設置してアクセスする。
#質問でsageてた >685 ありがとうございます。 5.00503だとわかりすっきりしました。
687 :
674 :03/08/08 17:17 ID:???
…かいけつしますた
>>683 の質問ムズイ(;´Д`)・・・これが解ければリファレンスが理解できた事になるかな・・・
689 :
688 :03/08/08 17:20 ID:???
と思ったら、ぐぐったらあっさり解決したよ(´・ω・`)ションボリ
>>683 foreach (@{$Japan{tokyo}})
括弧ひとつ余計につけないとダメらしい
690 :
nobodyさん :03/08/08 17:33 ID:RBuH2Puu
#!/usr/bin/perl # CGIヘッダの出力 print "Content-type: text/html\n\n"; # Player1 $HP = 400; $KIK = 60; $PAN = 20; $DF = 10; # Player2 $HP = 300; $KIK = 100; $PAN = 40; $DF = 0; # Player1 $kougeki1 = srand; # Player2 $kougeki2 = srand; srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; }
691 :
nobodyさん :03/08/08 17:33 ID:RBuH2Puu
if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN'} - $defense->{'$DF'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK'} - $defense->{'$DF'}; } ($damage < 0) and ($damage = 0); $defense->{'HP'} -= $damage; # HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えた。</p> <p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p></body>\n"; print "</html>";
692 :
nobodyさん :03/08/08 17:34 ID:RBuH2Puu
やっぱ動かない 考えるか
>>RBuH2Puu わざわざ貼らんでよろしい。
スルーでお願いします
695 :
nobodyさん :03/08/08 17:57 ID:RBuH2Puu
動くまで貼るけどな
一生貼り続けるってことだね( ´,_ゝ`)プッ
697 :
683 :03/08/08 18:13 ID:???
>>688 さん
ありがとうございます!見事に出来ました!
それにしても、やっぱりリファレンスって難しいんですね…。
つーかattackとかkickとかしろよ、名前 KIKって(;´Д`)
>>659 が余計なコト書くから。
RBuH2Puuがわけの分からん行動はじめた。
ぷうまだ居たんだ。
もうすでに意地になってるだけだろ。一番ダサいパターンだ。
($damage < 0) and ($damage = 0); $defense->{'HP'} -= $damage;
ある変数を複数の条件で比較したいのですがどうすれば良いのでしょう。 例えば$hogeは$fooか$barか$baz以外の値であればエラーとしたくて if ($hoge ne ($foo or $bar or $baz)){&error(不正な値が混じってます);} のように書いたりしたのですがダメでした。
if (($hoge ne $foo) or ($hoge ne $bar) or ($hoge ne $baz)){&error(不正な値が混じってます);}
>>704 書いた本人もわかってると思うけど、orはandの間違いだよね。
706 :
nobodyさん :03/08/09 02:34 ID:9s2Ca0tO
# Player1 $HP = 400; $KIK = 60; $PAN = 20; $DF = 10; # Player2 $HP = 300; $KIK = 100; $PAN = 40; $DF = 0; # Player1 $kougeki1 = srand; # Player2 $kougeki2 = srand;
707 :
nobodyさん :03/08/09 02:34 ID:9s2Ca0tO
srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN'} - $defense->{'$DF'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK'} - $defense->{'$DF'}; } ($damage < 0) and ($damage = 0); $defense->{'HP'} -= $damage;
708 :
nobodyさん :03/08/09 02:34 ID:9s2Ca0tO
# HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えた。</p> <p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p></body>\n"; print "</html>";
あぼーん
あぼーん
あぼーん
いつまで荒らせば気が済むんだ
あぼーん
あぼーん
($damage < 0) and ($damage = 0); $defense->{'HP'} -= $damage;
>>715 相手にするなよ
お前みたいなのがいるからつけ上げるんだ
あぼーん
いるんだよな。 教えたがりというか、得意になりたがるというか。 感謝のレスをもらって満足したいんだろうなぁ。
糞な質問は仕方ないとしてもデカイAA貼るのはム板では論外。
荒らしとしても最低の部類に入る。
あ、
>>715 と
>>718 見て気付いた。ここWebProgだったか。ならいいや。
>>720 馬鹿にして満足しているようだが、つまらんな。
いなくても誰も困らないからム板に引っ込んでいれば?
ム板住人にしては最低の部類に入るけどな。
723 :
nobodyさん :03/08/09 05:20 ID:9s2Ca0tO
なめてやがんな おれは荒らしじゃねーよ!ヴォケ!! 相手にすんなよ、とか言ってる馬鹿がいるから荒れるんだよ もとは、てめーみたいな無脳がいるから、住みつくんだっつーの!! 無脳を相手にするのは一番、気持ちいいからな!!馬鹿だから!!
724 :
nobodyさん :03/08/09 05:40 ID:9s2Ca0tO
#!/usr/bin/perl # CGIヘッダの出力 print "Content-type: text/html\n\n"; while($HP1 > 0) and ($HP2 > 0){ srand1; srand2; } # Player1 $HP1 = 400 - $kougeki1; $KIK1 = 60; $PAN1 = 20; $DF1 = 10; # Player2 $HP2 = 300 - $kougeki2; $KIK2 = 100; $PAN2 = 40; $DF2 = 0; # Player1 $kougeki1 = srand; # Player2 $kougeki2 = srand2;
725 :
nobodyさん :03/08/09 05:40 ID:9s2Ca0tO
srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN1'} - $defense->{'$DF2'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK1'} - $defense->{'$DF2'}; }
726 :
nobodyさん :03/08/09 05:40 ID:9s2Ca0tO
srand2; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN2'} - $defense->{'$DF1'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK2'} - $defense->{'$DF1'}; } ($damage < 0) and ($damage = 0); $defense->{'HP1'} -= $damage; ($damage < 0) and ($damage = 0); $defense->{'HP2'} -= $damage;
727 :
nobodyさん :03/08/09 05:41 ID:9s2Ca0tO
# HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えた。</p> <p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p></body>\n"; print "</html>";
728 :
nobodyさん :03/08/09 05:42 ID:9s2Ca0tO
やっぱり動かないっすね ($damage < 0) and ($damage = 0); $defense->{'HP1'} -= $damage がいまいち理解できんよ。
どれ、ちょっくら削除整理板にでも行ってくるか。
9月になったら消えるでしょ。 それに、こういうのは名無し相手には強気になれても、システム側の人間が動き出せば 態度が一変するよ。ほんと面白いぐらいに。
システム側
ん?なんかおかしいこと言った?
734 :
659 :03/08/09 08:42 ID:???
まだいたのか。汗 基本的な文法と、ハッシュとリファレンスを覚えなよ(659のヤツを組み込みたいなら)。 ここで質問しても迷惑だし、無意味だぞ。 ただ目立ちたいだけならさっさとどっか行きな。
>>728 >($damage < 0) and ($damage = 0);
>$defense->{'HP1'} -= $damage
>がいまいち理解できんよ。
ほかもまったく理解できてないだろ
03/08/07(Thu) ID:MNjVgF7U 560,563,565-568,572,574,576,578,592,593,611,613 03/08/08(Fri) ID:RBuH2Puu 620,630,636-642,644,646,648,650-651,654-655,657,676-678,680-682,690-692,695 03/08/09(Sat) ID:9s2Ca0tO 706-711,713-714,723-728 スレッドの約6%を消費。
ID:9s2Ca0tO ウザイな…。と、思ったら削除依頼出てるね。サンクス>出した人
>>703 &error('不正な値が混じってます') unless grep{$hoge eq $_}($foo,$bar,$baz);
とか
740 :
703 :03/08/09 13:02 ID:???
andで出来ました。 $hogeと$fooが一致しないか(or)$hogeと$bar一致しないか(or)とかいう風に 考えてしまいました…。 >739 どもです。 そちらの方がすっきりしてますね。
741 :
nobodyさん :03/08/09 13:03 ID:aJfrmQrg
なんか最後のほうで荒らし多いな〜
あぼーん
743 :
nobodyさん :03/08/09 14:05 ID:9s2Ca0tO
なんでアンドがいらないんですか? というより、動かねーよ!
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
友達いないのか、可哀想に。
>>739 grepってそんな使い方も出来るのか…φ(._.)
>>740 @array = ($foo,$bar,$baz);
&error('不正な値が混じってます') unless grep{$hoge eq $_}@array;
すっきりしてる、っていうか上みたいな使い方ができるので、
比較対照が可変の場合に楽。
755 :
nobodyさん :03/08/09 18:46 ID:9s2Ca0tO
#!/usr/bin/perl # CGIヘッダの出力 print "Content-type: text/html\n\n"; while($HP1 > 0) and ($HP2 > 0){ srand1; srand2; } # Player1 $HP1 = 400 - $kougeki1; $KIK1 = 60; $PAN1 = 20; $DF1 = 10; # Player2 $HP2 = 300 - $kougeki2; $KIK2 = 100; $PAN2 = 40; $DF2 = 0; # Player1 $kougeki1 = srand; # Player2 $kougeki2 = srand2;
756 :
nobodyさん :03/08/09 18:47 ID:9s2Ca0tO
srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN1'} - $defense->{'$DF2'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK1'} - $defense->{'$DF2'}; }
757 :
nobodyさん :03/08/09 18:47 ID:9s2Ca0tO
srand2; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN2'} - $defense->{'$DF1'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK2'} - $defense->{'$DF1'}; } ($damage < 0) and ($damage = 0); $defense->{'HP1'} -= $damage; ($damage < 0) and ($damage = 0); $defense->{'HP2'} -= $damage;
758 :
nobodyさん :03/08/09 18:47 ID:9s2Ca0tO
# HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えた。</p> <p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p></body>\n"; print "</html>";
あぼーん
あぼーん
あぼーん
だれかこの荒らし君を killかrmかなんだかしてやってほしい
763 :
nobodyさん :03/08/09 18:54 ID:aJfrmQrg
削除要請しちゃっていい?
>>762 削除依頼は逝ってるから判断してくれるっしょ
しかし、美意識のないスクリプトや・・・
走らせるまでもなく動かないのが見え見えだから相手する気にもなれん
rm -rf
769 :
momo :03/08/09 21:29 ID:jpYU10pt
http://ime.nu/ のようなCGIを作っているのですが、
http://***.com/~sub/みたいなチルダが入るとバグってしまうんです …
以下にそのまま書いたのでどこを直せばいいのか教えて頂けないでしょうか?
よろしくお願いいたします。
#!/usr/local/bin/perl
print qq|content-type: text/html\n\n
<HTML>
<HEAD>
<TITLE>JUMP</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</HEAD>
<BODY bgcolor="#FFFFFF" text="#000000">
<B><A href=$ARGV[0]>$ARGV[0]</A></B>
<HR>
次のサイトにジャンプしようとしています。
</BODY>
</HTML>|;
チルダってわかってるなら変換すりゃいいじゃん。%7Eだっけ。 あと、METAタグを使う理由がわからん…
ヒアドキュメント知らないのかな?
なんかろくなのが来ないね。
775 :
sage :03/08/09 22:47 ID:jpYU10pt
sage
776 :
nobodyさん :03/08/09 22:49 ID:GqH0THDn
至急教えて頂きたいんですが、 }elsif(a){ }elsif(b){ }elsif(b){ と表示するのと、 }elsif((a)|| (b)|| (c))){ と表示するのとでは効果は同じですよね? 上の方が分かりやすいから私は上を使っているんですが、 何かデメリットはあるんでしょうか?
>776 俺なら下を使うね。
>>779 失礼ですが貴方は hogehoge.comとyahoo.comのオーナー様でしょうか?
公に使用者が開示されているドメインネームを不当にドキュメント等に用いるマナー違反者が
増えていますので。 念のため確認です。
まぁ向こうで誘導された感じではあるが… #! /usr/local/bin/perl print qq|Content-type: text/html; charset=Shift_JIS <HTML> <HEAD> <TITLE>JUMP</TITLE> </HEAD> <BODY bgcolor="#FFFFFF" text="#000000"> <B><A href=$ENV{'QUERY_STRING'}>$ENV{'QUERY_STRING'}</A></B> <HR> 次のサイトにジャンプしようとしています。 </BODY> </HTML>|; exit; これでいいかね
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
789 :
nobodyさん :03/08/10 02:36 ID:c9slSjrq
#!/usr/bin/perl # CGIヘッダの出力 print "Content-type: text/html\n\n"; while($HP1 > 0) and ($HP2 > 0){ srand1; srand2; } # Player1 $HP1 = 400 - $kougeki1; $KIK1 = 60; $PAN1 = 20; $DF1 = 10; # Player2 $HP2 = 300 - $kougeki2; $KIK2 = 100; $PAN2 = 40; $DF2 = 0; # Player1 $kougeki1 = srand; # Player2 $kougeki2 = srand2;
790 :
nobodyさん :03/08/10 02:36 ID:c9slSjrq
srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN1'} - $defense->{'$DF2'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK1'} - $defense->{'$DF2'}; }
791 :
nobodyさん :03/08/10 02:37 ID:c9slSjrq
srand2; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN2'} - $defense->{'$DF1'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK2'} - $defense->{'$DF1'}; } ($damage < 0) and ($damage = 0); $defense->{'HP1'} -= $damage; ($damage < 0) and ($damage = 0); $defense->{'HP2'} -= $damage;
792 :
nobodyさん :03/08/10 02:39 ID:c9slSjrq
# HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えたため、 Player1は喜んだ。「命!!」</p> <p>Player2は<big>>$kougeki2</big>のダメージを与えたため、 Player1は喜んだ。「炎!!」</p></body>\n"; 「つまんねー、馬鹿!」とやじが飛んだ。 print "</html>";
あぼーん
これって、リア房か? 削除人は何やってる?
かかわらんほうがいい。こう言うのは無視がいちばん堪えるんだから。 削除依頼だけしっかりやっときましょう。
そうだね 所定の回数に達したらアク禁になるわけだし 俺と同じISPじゃなきゃいいが・・・
日付形式を変換しようとしています。 変換前の形式は、ちょっと特殊で年月日時分となってます。 0308100000 変換後は、クッキー形式にしたいです。 Thu, 01-Jan-1970 00:00:00 GMT; 年、月、日、時、分は、ほぼそのままでOKですが、曜日とGMTへの変換はどのように すればよいのでしょうか? よろしくお願いします。
あぼーん
802 :
nobodyさん :03/08/10 10:31 ID:9Q9rpSmQ
モジュールABCの関数を使いたいとき、 use ABC; と @ISA = ('ABC'); とは何が違うのですか?
どうでもいいが、フォームから削除依頼しろよ。
>>800 自前で計算して用意するか、
time()みたいに、1970年1月1日からの秒数に変換して、そこからlocaltimeで変換するか
>>802 後者の方法はサブクラス化という方法で ABC 内の関数を
オーバーライドしたい時などその方法を使用する
…ぐらいしか思いつかないな
>>799 ?あれにかかわったレスも削除して「なかったことに」してもらうのが一番。
ついでに削除屋さんは広告も一括して削除してくれたらありがたいなぁ。
>>800 my ($year, $mon, $mday, $hours, $min) = unpack('A2A2A2A2A2', $packed_data);
で返った値をtimegm();につっこむ。$mon-1と$year+100を忘れずに。
>>802 useは@INCを辿ってモジュールを探して、
見つけたら読み込んでimportメソッドを実行する。
importされた関数、変数などが別名(エイリアス)で扱えるようになる。
コンパイル時に処理される。
@ISAはクラス内に呼び出されたメソッドがない場合、
@ISAを辿って目的のメソッドを探して実行するようになる。
実行時に処理される。
>>809 さん、どうも有り難うございます。勉強のために、以下のスクリプトを
作ってみました。
package AB;
sub aloc {
my ($pkg, $a, $b) = @_;
my $obj = bless {"a" => $a, "b" => $b}, $pkg;
return $obj;
}
1;
(続き) package X; use AB; @ISA = ('AB'); sub new { my ($pkg, $a, $b, $x) = @_; my $obj = $pkg->aloc($a, $b); $obj->{"x"} = $x; return $obj; } 1; #!/usr/bin/perl use X; $q = X->new('A', 'B', 'X'); $ans = $q->{'x'}; print "$ans\n"; # Xと表示、OK 試しに、パッケージXの@ISAの行をコメントにしてみると、alocが見つから ないと言われます - 当然です。 そこで、パッケージABの2行目に、 use Exporter; @ISA = ('Exporter'); @EXPORT_OK = ('aloc'); を挿入し、パッケージXのuseを use AB('aloc'); に変更してみたら、上手く行きました。 ということで、useと@ISAの機能は分かりましたが、今度は、ABやXのような クラスを実装する場合、Exporterで輸出するのが良いのか、それとも@ISAで 継承するのが良いのか、が分からなくなりました。
あぼーん
813 :
nobodyさん :03/08/10 16:31 ID:c9slSjrq
srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN1'} - $defense->{'$DF2'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK1'} - $defense->{'$DF2'}; }
814 :
nobodyさん :03/08/10 16:32 ID:c9slSjrq
srand2; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN2'} - $defense->{'$DF1'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK2'} - $defense->{'$DF1'}; } ($damage < 0) and ($damage = 0); $defense->{'HP1'} -= $damage; ($damage < 0) and ($damage = 0); $defense->{'HP2'} -= $damage;
815 :
nobodyさん :03/08/10 16:32 ID:c9slSjrq
# HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えた。</p> <p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p></body>\n"; print "</html>";
あぼーん
ID:c9slSjrq 取り敢えず、NGワードっと、 ↓ハイ、次の方どうぞ
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
>>c9slSjrq にゅ速で美味しんぼ連載してるひと?
だいたいPerlで変なゲーム作ろうとしてる意図が不明。
キチガイのやることを理解などできるわけがない。
ID:c9slSjrqの情報調べてみたけど、やっぱり小学生だったよ。
>>810-811 継承が必要なら@ISAを使う、隠蔽したいなら使わない。かな。
(深く考えた事ないですね。オブジェクト指向なら継承しとけみたいな。)
モジュールはexportした方が便利かと。
(というか、するべきものだと思ってました。)
# 蛇足ですがalocはallocでは。
>>827 さん、レス有り難うございます。
「そこで、パッケージABの2行目に、
use Exporter; @ISA = ('Exporter'); @EXPORT_OK = ('aloc');
を挿入し、パッケージXのuseを
use AB('aloc');
に変更してみたら、上手く行きました。」
と書きましたが、実行できるようにするだけなら、ここまでしなくても、
alocの呼び出しを、AB::alocとするだけで、充分ですよね。
「継承」の意味が良く分からないです(@ISA使わなくても、useで充分じゃない
のかなって思ってしまいます)。
オブジェクト指向の本質が分かってないんでしょうね。
# ご指摘のとおり、alocはallocのつもりでした。
>>828 Hoge.pm
--------------------------------
package Hoge;
import{ エクスポートな処理 }
--------------------------------
というものがあったとしたら、
use Hoge;
は、
BEGIN{
require Hoge;
Hoge->import;#または、import Hoge;と書いてもあり。
}
を実行しているだけ。
importメソッドがなけりゃ、
BEGIN{ require Hoge; }
と同じ。
だから、クラスによって違うのさ。
とあるスクリプトで時間を計算して表示させているのですが、 例えば10.99時間を10.59時間という風に小数点以下の部分を きちんと分にする方法ってありませんか。 今は my(@time_temp) = split(/\./, $time); $time_temp[1] = int(60 * $time_temp[1] / 100); $time = $time_temp[0].'.'.$time_temp[1]; とかやってるのですがもう少しすっきり出来たら良いなあと。
10.99時間=10.59時間じゃないだろ 何がしたいのか意味不明
先程それではおかしいと言う事で表示側で $time_temp[0]時間$time_temp[1]分 としたので三行目は無しで。
if(length($time_temp[1]) eq "1"){$time_temp[1] = $time_temp[1] * 10;} これ加えたほうがいいかと
print "何時間?\n>"; $time =<>; chomp($time); my(@time_temp) = split(/\./, $time); if(length($time_temp[1]) eq "1"){$time_temp[1] = $time_temp[1] * 10;} $time_temp[1] = int(60 * $time_temp[1] / 100); print "$time_temp[0]時間$time_temp[1]分\n";
$time = sprintf(qq{%02d\.%02d},int($time),($time - int($time))*60);
837 :
836 :03/08/10 22:58 ID:???
839 :
nobodyさん :03/08/10 23:18 ID:64afxySW
perlをダラダラ書いてたら、 一つのファイルで、1500 行 を超えてしまいました。 行数が多いと何か不都合は起きますでしょうか? お教え下さい。
840 :
nobodyさん :03/08/10 23:27 ID:STOMuStS
素朴な疑問。なんで、 print qq|<a href="hoge">fuga</a>|; ってやればコードが見やすいのに、 いちいち print "<a href=\"hoge\">figa></a>"; ってやってる人が多いんですか? qqのほうが、コーディングもよけいなことあんまり考えなくて、はやくすむと思うんだけど
>840 それを見やすいと思うのはPerlユーザーだけ。 俺は使い分けてるけどね。
>>838 最後の$time要らん。
>>839 そのスクリプトを保守する人間が困らないのなら別に問題無し。
>>840 最初に覚えた方法が一番分かり易いと思い込んでいる人は多い。
もちろんその方法しか知らない人も多い。
843 :
840 :03/08/10 23:41 ID:???
>>841-842 レスさんくす。
なるほどねー。
自分最初にPerlおぼえて、
そのあとちょっとPHPかじって、
Javaおぼえようかなーて思ってる程度だからなー。
>>841 C#にも@""構文があるのに。Perlユーザだけとは心外だな。
print "何時間?\n>"; $time =<>; my(@time_temp) = split(/\./, $time); chomp($time); if(length($time_temp[1]) eq "1"){$time_temp[1] = $time_temp[1] * 10;} time = sprintf '%02d 時間 %02d 分', $time, ($time * 60) % 60, $time; print "<a href=\"hoge\">figa></a>"; $time_temp[1] = int(60 * $time_temp[1] / 100); print "$time_temp[0]時間$time_temp[1]分\n";
あぼーん
あぼーん
#!/usr/bin/perl # CGIヘッダの出力 print "Content-type: text/html\n\n"; while($HP1 > 0) and ($HP2 > 0){ srand1; srand2; } # Player1 $HP1 = 400 - $kougeki1; $KIK1 = 60; $PAN1 = 20; $DF1 = 10; # Player2 $HP2 = 300 - $kougeki2; $KIK2 = 100; $PAN2 = 40; $DF2 = 0; # Player1 $kougeki1 = srand; # Player2 $kougeki2 = srand2;
srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN1'} - $defense->{'$DF2'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK1'} - $defense->{'$DF2'}; }
srand2; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN2'} - $defense->{'$DF1'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK2'} - $defense->{'$DF1'}; } ($damage < 0) and ($damage = 0); $defense->{'HP1'} -= $damage; ($damage < 0) and ($damage = 0); $defense->{'HP2'} -= $damage;
# HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えた。</p> <p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。 <p>Player1は<big>$kougeki1</big>のダメージで野原でクソをし始めた。 <p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p> <p>Player2は<big>>$kougeki2</big>のダメージを受けて裸踊りを始めた。 <p>Player2は<big>>$kougeki2</big>のダメージで光浦なみの女にレイプし始めた。</p></p></body>\n"; print "</html>";
>>839 長くなりすぎると動きません。500行以内じゃないと動きにくいです。
ちゃんと勉強しろ!オタクやろう!!
855 :
nobodyさん :03/08/11 12:03 ID:vd5Ibrol
________________ ∧_∧∩ / ( ´∀`)/<真珠のPerlと何が違うんですか!? _ / / / \___________________ \⊂ノ ̄ ̄ ̄ ̄\ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄|| || || ̄ ̄ ̄ ̄ ̄|| .|| ||
, ' s \::::::::::::i /"""''/ーナ-t----| . / ,.‐ ⌒ /ヘ {入|(・) (・) ||||||| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ |⊂⌒◯-------9) < まだ、動かないぜ!ベイビー!! | |||||||||_ | \_______ \ ヘ_/ \ / ̄`\、 . \、__ i⌒i/, -'"~ `ヽ、 ,.‐'´ i--i \ `〈ヽ, -'"~T ヽ、 , -'" ~ `ヽ、 / ( ̄ T iヽ、__ \. / ( ̄T | `ヽ、 } く  ̄ `ヽ、/__ /
___________________ || ($damage < 0) and ($damage = 0); || $defense->{'HP1'} -= $damage;はダメージ || ∧_∧ 。 || ( ^^ )/  ̄ ̄ ̄ ̄ ̄ ̄ ( つ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /  ̄ ̄ ̄ ./| lヽ────────────── | ̄ ̄ ̄ ̄| | | ダメージを受けると、糞をもらします  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|____|/ |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧ ∧ ∧,,∧ ∧ ∧ (・,, ∧▲ ミ ∧ ∧ ( ∧ ∧ 〜(_( ∧ ∧_( ∧ ∧_ミ・д・∧ ∧ @(_(,,・∀・)@ ( *)〜ミ_ ( ,,) @(___ノ 〜(___ノ 〜(___ノ
2chって、鯖/カテゴリ/.../dat/ でアクセスして表示しますよね? これってこの全てのディレクトリの下にindex.htmlか.cgiかなにかを置いてあって、 それを表示してるってことですよね? でも 鯖/カテゴリ/.../dat/ これでアクセスしたときと、 鯖/カテゴリ/.../dat/index.htmlでアクセスしたときと、 表示が微妙に違うんです。 どういう仕組みで表示させてるんでしょうか?
>>858 PATH_INFO
詳しくは CGI スレで。
どーもthxです。勉強してきます
>>860 あ、なるほど本来(?)なら
bbs=php&key=1059043704
と引数を渡すところを、
PATH_INFOってのを使って、
/php/1059043704/
こういう形で引数を渡すように設定できる
そういうことですね。勉強になりました。
>>854 俺は14874行の
perlスクリプトを動かしてるが、なんてことはなく
サクサク動いてるぞ。
単純に行数じゃ判断できないしなぁ。 改行だけなら1〜2バイトだし。 行数よりもファイルサイズが重要でないかい?
2113行、60KBでサクサク
10000行、20KBで以下略。
2701行、85Kbでサクサク
868 :
863 :03/08/11 20:02 ID:???
14874行って書いたけれど、
サイズは623KBだ。
サクサク。
>>854 はマシンのスペックがよっぽどしょぼいか、
しょっぱいスクリプトの書き方してるんじゃないかな。
10000行で20KB ってことは、10000行の改行だけのスクリプトってことだな
あ、ちがった。 KBとBの単位をまちごた。
最近UTF-8でスクリプト書いても動く事に気付きました。 で素朴な疑問ですがやはりEUCでないとどこかで不都合起きたりしますか? 今のところ何も起きてないけど気になって。
UTF-8だと問題ないでしょ。 さらに perl5.8を使って、 use Encode; でさらに幸せになれます。
たった50行ですけど、重くて全然動かないですよ。 パソコンの環境によっては500行以下にしなさいってことだ。
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
50行で動かないってどういうスクリプトだそりゃ。 または博物館行きのスペックのマシンでも使ってんのか?
ほっとけ
>>884 とてつもなく巨大な配列とか使ってたりして(w
無限ループすれば一行でもおもくできるが? つか、おめぇAA貼ってる馬鹿だろ。みんな放置汁
>>874-882 までまた削除依頼でいいだろ
今度はコピペとして依頼してくれって言ってるから、そろそろ(ry
わざと重くするなら無限ループでもなんでも簡単だが、 50行でうごかねーって騒いでるのは わざと重くしてるのか?
すいません、CPANって、なんて読むのでしょうか? しーぱん?しーぴーえーえぬ?
しーぱん
しーぽん
シパーソ
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
あぼーん
粘着質だな
そのうち板ごとアク禁されるでしょ
907 :
906 :03/08/12 14:44 ID:???
>>906 2行目に
print "Content-type: text/plain\n\n";
を挿入
909 :
:03/08/12 14:57 ID:???
だな
>>906 UNIXで動かしてるのか?
と言うより、CGIとして起動してるのか?
それなら
>>908 のは必須だよ。
911 :
nobodyさん :03/08/12 15:09 ID:Ehp7RR1Q
えー、よく分からないんだが、Windowsで書いたPerlのスクリプトを、Linuxのサーバにうpして走らせてる、でいいのかな?
あと、
>>908 の言うとおりにスクリプトを変更して走らせたら、なんかDLしますか?みたいなウィンドウが出てきたので、txt/plainをtxt/htmlにしてみたら一応走った。
$sakujp1から$sakujp9までを表示させてみたら全部0 (´Д`;)マジカヨ
うが、失敬あげてもた
>>913 空じゃないといけないのかw
スクリプト書き直します
>>914 ああ、こりゃまた失敬。
ちゃんとtextって書いてますよ。
916 :
nobodyさん :03/08/12 16:29 ID:dyQ6VIzM
定数のみを記載したファイルを各CGIにて読み込んで、 各ページで内容を統一したいのですが、以下の方法では エラーとなってしまいました。 どなたかご教授お願いします。 # main.cgi require "inc.pl"; ・・・・ # inc.pl my $title = "welcome"; ・・・・ よろしくです。
落ち着いてから喋れよ
918 :
nobodyさん :03/08/12 16:44 ID:RiEGcXgN
my %hage = ( a => "hage", b => { c => "$hage{a} /hage", }, ); こんな感じで$hage{b}{c}で、$hage{a}を使いたいけど、 出来ませんよね?何かいい方法有りませんか?
my の意味わかってる? なんでつけてんの
920 :
919 :03/08/12 16:50 ID:???
>>918 my $zura = "hage";
my %hage = (
a => $zura,
b => {
c => "$zura /hage",
},
);
923 :
916 :03/08/12 17:07 ID:???
解決しました。
根本的に間違えていました。
まず、パッケージ宣言をしていませんでした。
あと、
>>920 さんのいうとおり、パッケージとして読み込む
内容に対してmyにしていました。
924 :
918 :03/08/12 17:10 ID:???
>>919 実はあんまいみ分かって使ってないかも(汗
サブルーチンの中でその間数内でしか使わない変数は、
myを付けるようにしてる。あと、use strict;してると、
my付けなきゃ怒られるから、、、
>>921-922 一つにまとめた方がすっきりしていいかなーって思いましてね。
やっぱ無理ですかね?
925 :
918 :03/08/12 17:11 ID:???
>>925 ついでに勉強しておくと良いと思われ。
キーワードはvarsとかourあたりで。
927 :
923 :03/08/12 19:10 ID:dyQ6VIzM
解決したのですが、別の問題が・・・ requireで呼び出す定数の記載されたplファイルが、 ブラウザから丸見えになってしまいます・・・ (見られたくない内容が記載されています) 属性を600にしたら動かないようですし。 ブラウザから参照できないファイルにできないものですか? よろしくお願いします。
全然コーディングと関係ないぞ
929 :
923 :03/08/12 19:23 ID:dyQ6VIzM
>>928 失礼しました。流れでついつい聞いてしまいました。
ちなみに拡張子をcgiにしてみると実現できました。
.htaccessで観覧不可にすればいーじゃん
>>940 運用情報にて規制対象にするのがよいかと。
>>941 それはいいね。
運用情報をちょっと見てきたけど、コピペや広告がビシバシと
アク禁になっててワラタ。
今後も続いたらそっちに回そう。
935 :
nobodyさん :03/08/12 20:50 ID:y42wbWjQ
my $ref_mail = $pop3->get($num); my $mail = join(/ /, @{$ref_mail}); とかくと、成功したり失敗したりします。 エラーが出た場合のエラー内容は下記のとおりです。 Can't use an undefined value as --.cgi reference これについて調べてみたのですが、どうも理解が できません。 定義するとエラーが出てしまいますし、初心者の私に どうか教えていただければ幸いです。
あるところに糞スレの好きな男がいた。 男は「(都の人のする)糞スレというものをひとつ立ててみよう」と思った。 男の女房が「(天さかる鄙にすむわたしのような教養のない女でもわかるが)都の人はそんなことをしない(と思う)」 と諌めたが、男はきかない。 「(釈迦入滅以来うだつのあがらない自分という男にほとほと愛想が尽きたが) ここで糞スレを立てれば(都の人のように)頓知がきいていると世の賞賛を受けるだろう」 と糞スレをたてた。 はたして翌日、>2以降、罵倒の嵐だった。 >1も無駄なことをするものだなあと(何故か判らぬが突然出てくる)横川の僧都(そうず)は嘆いた
>>942 でも担当★がちょとあんぽんたんだったので★を剥奪されたそうです(w
クエリーストリングを、%inに入れたとして、以下のコードを実行すると、 sub htmlspecialchars{ #PHPの同名関数と同じ動きをします。 my ($letter) = $_[0]; $letter =~ s/&/&/g; $letter =~ s/"/"/g; $letter =~ s/'/?/g; $letter =~ s/</</g; $letter =~ s/>/>/g; return $letter; } foreach $key (keys %in){ &jcode::convert(\$in{$key}, "sjis"); print qq|<input type="hidden" name="$key" value="|. &htmlspecialchars(\$in{$key}) .qq|">\n|; } <input type="hidden" name="country" value="SCALAR(0x827cdbc)"> <input type="hidden" name="gender" value="SCALAR(0x827cd2c)"> となってしまうのですが、どこがいけないのでしょうか・・・?
>>938 乙。
あぼーん<>あぼーん<>あぼーん<>あぼーん<>あぼーん<>
を追加加工は出来なかったのね(w
>>939 リファレンスで渡してるやん。。。
#!/usr/bin/perl # CGIヘッダの出力 print "Content-type: text/html\n\n"; while($HP1 > 0) and ($HP2 > 0){ srand1; srand2; } # Player1 $HP1 = 400 - $kougeki1; $KIK1 = 60; $PAN1 = 20; $DF1 = 10; # Player2 $HP2 = 300 - $kougeki2; $KIK2 = 100; $PAN2 = 40; $DF2 = 0; # Player1 $kougeki1 = sentaku; $kougeki1 = $KIK2 = 100; $PAN2 = 40; # Player2 $kougeki2 = $KIK2 = 100; $PAN2 = 40; $DF2 = 0;
sentakud; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN1'} - $defense->{'$DF2'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK1'} - $defense->{'$DF2'}; }
sentaku2; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN2'} - $defense->{'$DF1'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK2'} - $defense->{'$DF1'}; } ($damage < 0) and ($damage = 0); $defense->{'HP1'} -= $damage;
($damage < 0) and ($damage = 0); $defense->{'HP2'} -= $damage; # HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えた。</p> <p>Player1は<big>$kik1</big>のダメージを受けて混乱した。 <p>mona-は<big>$panti1</big>のダメージで野原でクソをし始めた。 <p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p> <p>Player2は<big>>$kik2</big>のダメージを受けて裸踊りを始めた。 <p>Player2は<big>>$pantti2</big>のダメージで光浦なみの女にレイプし始めた。</p></p></body>\n"; print "</html>";
>>935 それはその下のファイルを使うな、という意味です。
そのファイルは使えないので、そのファイルを全部削除して、
1から書き直すことをすすめます。
配列の中身を順番に書き出すにはどうすれば良いんでしょうか。 while (@test){ print\n; } とかやってみたのですがPCごと固まってしまいました…。 あとハッシュの中身を例えば キー:値 のような形のリストとして出力するような方法も知りたいです。 #キーは不定
>>946 foreach(@test){
print $_,"\n";
}
948 :
nobodyさん :03/08/13 00:11 ID:0XDiwwzH
foreach $key(keys %HASH){ print $key." = ".$key{$key}."\n"; }
>948 間違ってるぞ。 foreach $key(keys %HASH){ print "$key=$HASH{$key}\n"; }
while (my($k, $v) = each %hash) { print "$k:$v", "\n"; }
>>943 ハードリファレンスやシンボリックリファレンスとして使用する値は、
定義済みの値でなければなりません
>>945 あるいは
while ( @test ) {
pop shift @test."\n";
}
>>946 あるいは
while ( ($key, $val) = each %HASH ) {
print $key." = ".$val."\n";
}
953 :
952 :03/08/13 00:26 ID:???
失礼。訂正です。
>>945 あるいは
while ( @test ) {
print shift @test."\n";
}
954 :
nobodyさん :03/08/13 00:26 ID:0XDiwwzH
お。。 まちがってた。 thxでごんす。
955 :
946 :03/08/13 00:28 ID:???
ありがとうございました。 whileとforeachの違いがイマイチわかりづらいですが ラクダ本でも見てゆっくり勉強する事にします。 ハッシュの方はKeys関数のところみたら見事に載ってました。 わざわざすみませんでした…。
956 :
952 :03/08/13 00:29 ID:???
たびたび失礼。訂正です。
>>945 あるいは
while ( @test ) {
print shift @test;
print "\n";
}
>>945 @testが小さければ
print join("\n", @test, '');
>>946 while (<>) {
print $_ . "\n";
}
のつもりで書いたのか。それならば。
while (shift @test) {
print $_ . "\n";
}
スレ違いって言われたのでこちらで改めて質問します。 KENTさんのWeb Patioを使っています。 regist.cgiにおいて、 「初心者」という文字列を含む名前をエラーではじきたいのですが、 どうすればいいでしょうか? 一応、「初心者」であればエラーを返すようにしています。 if ($i_nam eq "初心者") { &error("任意の名前でお願いします"); } この場合だと「PC初心者」をはじくことができません。 正規表現を使わなければいけないというのはわかっているのですが、 if ($i_nam =~ /初心者/) ではダメなんでしょうか? よろしくお願いします。
>>960 どうだめだったの?
漢字コードは合わせてる?
>>960 この場合、正規表現は使わない方が低コスト。
全部EUC-JPかUTF-8で扱っているとして
if (index($i_nam, '初心者') >= 0) {
&error("任意の名前でお願いします");
}
子プロセスを作って、平行して違う処理をさせたいのですが、 親からも子からも見える変数というのは、そのままでは実現できないのでしょうか? 小難しいのでビデオ予約に例えますが、 >親はユーザとsocketで通信をして、予約リストの追加削除修正を行い、 >子は時計を監視しつつ、時間になったら録画をスタートさせる この"予約リスト"を親子で共有したいのです。
964 :
nobodyさん :03/08/13 16:43 ID:VxpLVgAp
>>960 初心者ははじくことができません。
そんな初歩的な質問は板違いです。どこか行ってください。邪魔です。
WEB板にいって、二度と来ないでください。
>>963 できません。共有はできません。どちらかあきらめてください。
あなたも欲ばりですね。
そんな初歩的な質問、こんなところでしないでください。どこか行ってください。
#!/usr/bin/perl # CGIヘッダの出力 print "Content-type: text/html\n\n"; while($HP1 > 0) and ($HP2 > 0){ srand1; srand2; } # Player1 $HP1 = 400 - $kougeki1; $KIK1 = 60; $PAN1 = 20; $DF1 = 10; # Player2 $HP2 = 300 - $kougeki2; $KIK2 = 100; $PAN2 = 40; $DF2 = 0; # Player1 $kougeki1 = srand; # Player2 $kougeki2 = srand2;
srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN1'} - $defense->{'$DF2'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK1'} - $defense->{'$DF2'}; }
srand2; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN2'} - $defense->{'$DF1'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK2'} - $defense->{'$DF1'}; } ($damage < 0) and ($damage = 0); $defense->{'HP1'} -= $damage; ($damage < 0) and ($damage = 0); $defense->{'HP2'} -= $damage;
>>963 ファイル使っちゃあかんの?dbmとかbdbとか
あと時計監視はちょっと、、、cronとか使えないの?
# HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えた。</p> <p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。 <p>Player1は<big>$kougeki1</big>のダメージで野原でクソをし始めた。 <p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p> <p>Player2は<big>>$kougeki2</big>のダメージを受けて裸踊りを始めた。 <p>Player2は<big>>$kougeki2</big>のダメージで道を歩いていた女にレイプし始めた。</p></p></body>\n"; print "</html>";
∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
< >
< 動カンカッタ
>>720-736 ーーーーーーーーー!! >
< >
∨∨∨∨∨∨∨∨∨∨∨\ /∨∨∨∨∨∨∨∨∨∨∨
/:|. | | /:|
/ .:::| ∨ / :::|
| ...:::::| / ::::|
i  ̄ ̄⌒゙゙^――/ ::::::::|
/_,,___ . _,,,,__,_ :::::::::::\
/ ゙^\ヽ.. , /゙ ¨\,.-z ::::::::::\
「 ● | 》 l| ● ゙》 ミ.. .::::::\
/i,. .,ノ .l| 《 ..|´_ilト ::::::::::\
/ \___,,,,,_/ .'″ ^=u,,,,_ v/.. :::::::::::::l!
|  ̄ ,,、 i し./::::::::.}
| / ,,____ _,/ ̄ \ \ ノ ( ::::::::::|
| |.. | /└└└└\../\ \ '~ヽ ::::::::::::::}
| .∨.|llllllllllllllllllllllllllllllllllllllll| ::::::::::{
| |.|llllllllllll;/⌒/⌒ 〕 :::::::::::}
| |.|lllllllll; ./ . . | ::::::::::[
.| |.|llllll|′ / . | .| :::::::::::|
.| |.|llll| | .∧〔 / :::::::::::::/
/ }.∧lll | ../ / / :::::::::::::::::\
/ /| \┌┌┌┌┌/./ /::: :::::::::::::::::\
( ゙゙^^¨^¨゙゙¨  ̄ ̄ ̄ /:::::::::::
972 :
nobodyさん :03/08/13 16:48 ID:p0VVcbYX
スレンダーなロリ体形ながらもオマンコ方はしっかり発達しちゃってます。
大きなオチンチンを喉の奥までくわえ込んでのフェラは大人顔負けですぞ。
挿入シーンは少ないながらも小さなオマンコにしっかり挿入されているシーンが勃起モノ!
若い娘はいいですな。
無料ムービーはこちら!
http://www.cappuchinko.com/
973 :
960 :03/08/13 16:50 ID:???
962さん、どうもありがとうございます! 解決しました。
荒らしではないんだが、レスあぼ〜ん依頼してる方へ なるべく一度に依頼してくれませぬか? かちゅだとあぼーんするたびにスレ再取得しなくちゃならないから大変なのよ
>>976 ( ゚Д゚)ハァ?
つーか、削除依頼なんかすんな。透明あぼーんでもしたらいいだろ。
>>979 お前が使用ブラウザを変えればいいだけだ。
ウンコスレ
バカはあぼーんしないといけないので。 つーか、かちゅなら改造して 再取得しても「あぼ〜ん」を保持するようにしたらいいじゃん?
#!/usr/bin/perl # CGIヘッダの出力 print "Content-type: text/html\n\n"; while($HP1 > 0) and ($HP2 > 0){ srand1; srand2; } # Player1 $HP1 = 400 - $kougeki1; $KIK1 = 60; $PAN1 = 20; $DF1 = 10; # Player2 $HP2 = 300 - $kougeki2; $KIK2 = 100; $PAN2 = 40; $DF2 = 0; # Player1 $kougeki1 = srand; # Player2 $kougeki2 = srand2;
srand; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN1'} - $defense->{'$DF2'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK1'} - $defense->{'$DF2'}; }
srand2; if($mode == 1){ $offense = \%you; $defense = \%my; }elsif($mode == 2){ $offense = \%my; $defense = \%you; } if( int(rand(2)) ){ #punch $damage = $offense->{'$PAN2'} - $defense->{'$DF1'}; if(!$rand = int(rand(5))){ #half $damage = int($damage / 999); }elsif($rand < 3){ #miss $damage = ""; } }else{ #kick $damage = $offense->{'$KIK2'} - $defense->{'$DF1'}; } ($damage < 0) and ($damage = 0); $defense->{'HP1'} -= $damage; ($damage < 0) and ($damage = 0); $defense->{'HP2'} -= $damage;
# HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>対戦バトル</title></head>\n"; print "<body> <p>Player1:体力は$HP1です</p> <p>Player2:体力は$HP2です</p> <p>Player1は<big>$kougeki1</big>のダメージを与えた。</p> <p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。 <p>Player1は<big>$kougeki1</big>のダメージで友達のトイレではみ出したクソをし始めた。 <p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p> <p>Player2は<big>>$kougeki2</big>のダメージを受けて裸踊りを始めた。 <p>Player2は<big>>$kougeki2</big>のダメージで友達の女にレイプし始めた。</p></p></body>\n"; print "</html>";
| 通報しますた! \  ̄∨ ̄ ̄ ̄ ̄ ̄ ∧_∧ ( ´Д`) /, / (ぃ9 | / /、 / ∧_二つ / / / \ / /~\ \ / / > ) / ノ / / / / . / ./. / ./ ( ヽ、 ( _) \__つ
。(´・ω・`) 。(´・ω・`) 。(´・ω・`) 。(´・ω・`) 。(´・ω・`) (´・ω・`)o(´・ω・`)o(´・ω・`)o(´・ω・`)o(´・ω・`)o(´・ω・`) ○(´・ω・`)○(´・ω・`)○(´・ω・`)○(´・ω・`)○(´・ω・`)○ 。(´・ω・`) 。(´・ω・`) 。(´・ω・`) 。(´・ω・`) 。 (´・ω・`)o(´・ω・`)o(´・ω・`)o(´・ω・`)o(´・ω・`) PHPって携帯会社の名前じゃないのか!?(´・ω・`)o(´・ω・`)o(´・ω・`)o ○ o(´・ω・`)o(´・ω・`)○ o ○ (´・ω・`)○(´・ω・`) ○ 。 o o ○。 /::. ソ . :;;ヽ /::. ..:::;;;ヽ /::. ..::;;;;ヽ /::. ..::::;;;;i (::. ..::;;;丿 >::...___..::::;;;イ !ヾ. ̄⌒__ ̄彡| iミ:::ミC= ≡..::: ) |::: 丶ヽ ..:ヽ ) |::: (' ( ::;;;| |::: | ミ ヽ\| |::: 丶ヽ ..:ヽ ) ( \ l. | ..:;;;;;;| |::\∨丿 ″..:;;;;;| |::: ( ( ゙ ..:;;;;;| |::: ( ( ゙ ..:;;;;;| .彡.|::: i l :::;;;;;|ゞ巛ミ 巛从ミ彡ミ彡从巛彡ミ彡ミ彡》》 巛巛ミ人ミ彡巛彡从ミ巛ミ人ミ》》》》 巛彡巛彡从ミ》彡彡巛ミ人ミ彡ミ从》》
このスレはここで終了にしましょう ーーーーーーーーーーーーーー終了ーーーーーーーーーーーーー 1、荒らしが住みついている 2、めちゃくちゃ荒れるのはわかっている 3、いるやつが無脳で役立たずが多い 4、存在価値なし!! 5、チンコ!! 以上をもって、全て終了とさせてもらいました。
すげー勢いでレス番欠けてる( ´ー`)
住みついてる荒しってパンチキックのやつだけだろ?
で、次スレ立てるん?
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt ttttttttt
s s s s s s s s s s s s s s s s s s
1000 :
nobodyさん :03/08/14 05:48 ID:GvyHuosa
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWW w fga545fg45a1g354
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。