Perl コーディング初心者質問コーナー Part25
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/06/28 01:18ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0434nobodyさん
03/07/10 15:13ID:???チェックされていなければ、site_jaは送信されてこない。
よってvalueも存在しないからNull判定でやってはダメ。
definedでやった場合は変数が未定義ならいいが、予約された
変数の場合は保証されない。
existsならハッシュのキーの有無で判定できる。
テストしてみたが、!existsでちゃんと処理できた。
0435nobodyさん
03/07/10 15:30ID:???まずはクッキーでもファイルでもセッションでも良いから
何かで記憶させておかないといけないでしょ。
それが出来たらまたおいで。
0436426
03/07/10 15:50ID:???ありがとうございます。
しかし、
if (!exists($in{'site_ja'})) {$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
としても、スルーされてしまいます・・・
どこかケアレスミスしているんだろうか・・・
0437436
03/07/10 15:52ID:???if($HtmlErrorText) {&HtmlError($HtmlErrorText);}
の一文をいつのまにか消してました・・・
ごめんなさい。
if (!exists($in{'site_ja'})) {$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
でばっちりです。
0438nobodyさん
03/07/10 17:04ID:mUbItvZA$v -= int(sqrt($ud)) if($bst =~ /S/);
の意味を分かる範囲で教えて下さい。
因みに、$ud は防御力です。
0439nobodyさん
03/07/10 18:11ID:???0440nobodyさん
03/07/10 18:14ID:???防御力の平方根を求め、小数点以下を切り捨てる。
$vからその値を減算したものが$vになる。
0441nobodyさん
03/07/10 18:54ID:???foo.cgiにとんで、そのあとアクセスをカウントしたあと、
そのIDとパスワードを、
保持したまま、別のlogin.cgiにとびたいんですが、
Location:http://www.xxx.ne.jp/login.cgi?id=$id&pass=$pass
だと、
idとpassがURL欄に丸見えでまずいじゃないですか。
で、別の方法(つまりは、getでなくpostメソッドで)
login.cgiに飛べて、
しかもidとpassを渡せる方法ってありませんか?
自分が考えつくのは、
ソケット通信で、
地道にpostメソッドで渡す方法くらいなんですが・・・。
よろしくお願いします。
0443nobodyさん
03/07/10 19:43ID:???0444nobodyさん
03/07/10 20:20ID:???あなたがやりたい方法は JavaScript で出来ますが、
セッション管理やクッキー等、他の方法を利用した方がいいでしょう。
0446nobodyさん
03/07/10 21:39ID:???2つが連続してはいけないのなら、前回の数字を覚えておいて、
* 乱数を取り出したときに一致しているか調べて、一致しなくなるまで繰り返し取り出す
* 前回の数字が存在しないと仮定して、一つ少ない大きさまでの乱数を取り出す。それ>=前回ならば、1増やす
>>445のが答えなら、効率を上げるため、数字が入った配列をかき混ぜて(Perlメモ)前から取り出す。
>>441
順番を逆にすれば?
0447nobodyさん
03/07/10 22:06ID:???フォームから誕生日を入力して、その数字を元に占いをさせようと思っています。
数字によって異なる結果を書いたページに振り分けるために
@message = ("aa","bb","cc", 〜 );
として移動先のURLの一部を記述しておき、
$buf = $ENV{"QUERY_STRING"};
($year,$month,$day) = split(/&/,$buf);
($tmp,$value_year)=split(/=/,$year);
($tmp,$value_month)=split(/=/,$month);
($tmp,$value_day)=split(/=/,$day);
$point = ($value_year+$value_month+$value_day) % $num_of_shop;
として数値計算、その結果から
print "Location: http://www.hogehoge.com/result/\$message[\$point].html\n\n";
として振り分けようとしたところ、「ページを表示できません」になってしまうのですが
どうしてでしょうか?
当然ながら移動先のページ(aa.html等)は正しい位置にアップロードしてあります。
0449nobodyさん
03/07/10 22:40ID:???作ってみたのだが現行ログからの削除はできても過去ログへの書き込みがうまくいかないのです
@new=();
open(IN,"$log") || &error("Open Error : $log");
$top = <IN> if (!$in{'past'});
while (<IN>) {
($no) = split(/<>/);
if ($in{'no'} != $no) { push(@new,$_); }
}
close(IN);
unshift(@new,$top);
open(OUT,">$log") || &error("Write Error : $log");
print OUT @new;
close(OUT);
unlink("$logdir$in{'no'}\.cgi");
open(OUT,">>$pastfile") || &error("Write Error : $pastfile");
print OUT "$in{'res'}<>$sub<>$res<>\n";
close(OUT);
0450441
03/07/10 23:03ID:???ほんとはセッション管理したいんですけど、
他の部分は全部完成しちゃってるんで、
今さら無理なんですわ・・・(泣)
>>442
会社で>>441のカキコして、帰りの電車で自分も暗号化思いついたんですけど、
暗号化したID/PASS同士で照合するってことですか?
やり方としては、
foo..cgi の中で、
$id = crypt($id) #暗号化
$pass = crypt($pass) #暗号化
Location:http://www.xxx.ne.jp/login.cgi?id=$id&pass=$pass
して、
login.cgi の中で、
サーバに入ってるid と passのデータを暗号化させて、
そいつと、クエリーストリングとしてやってくる、暗号化IDと暗号化PASSを、
照合させると・・・いうことで問題ないですか?
0451447
03/07/10 23:09ID:???http://www.hogehoge.com/cgi-bin/form.cgi?year=03&month=7&day=10
となっています。
URLの中に配列変数の中身を文字列として直接入れているのが
エラーの原因なのでしょうか?
0452448
03/07/10 23:28ID:???いや、そういうことを言いたかったんじゃないんだが……
print "Location: http://www.hogehoge.com/result/\$message[\$point].html\n\n";
これをいきなりヘッダに出力して「ページが表示できない」じゃなくて、
まず画面にそのまま表示して見られる状態で目視して、変数の展開状況などが
正常かどうか調べてみるべきかと。
0453nobodyさん
03/07/11 00:25ID:???http://cgi32.plala.or.jp/mg916/bbs.cgi
0454nobodyさん
03/07/11 00:45ID:???print〜の文を画面出力して確認しながら修正を加え、無事動作させることができました。
勘違いが原因だったとは…こんな初歩的トラブルに
親切なご教示ありがとうございました。
0456nobodyさん
03/07/11 01:00ID:???大丈夫。Web系の開発で飯食って10年になるけど、エラーの大半は初歩的ミス。
だから、もし人に聞くときはこれでもかというくらい慎重にしなきゃならん。
0458nobodyさん
03/07/11 02:28ID:???俺も3時間はまって、もういいや、寝よっと思って布団はいったとたんに気づいたよ。
外のループと内のループのカウンタ変数混同してた。。。。
それもちゃんと動いてたの途中で壊してやんの。
ずーーーとさかのぼっても駄目であきらめて寝よ、と思ったのに、
手許だよ、テモト!!
ぐしゃっ
0459nobodyさん
03/07/11 08:27ID:+GXxdBTx0460あぼーん
NGNG0461nobodyさん
03/07/11 13:23ID:XltnJZI3以下のPERLで、敵が普通に反撃する時の
条件はどの様になっているのか、
教えて下さい↓
http://gekiya77.gi-ga.net/cgi/oshiete.txt
見れば分かると思いますが、
$pに1〜6迄のランダムの数字を与え、
それに従い技を出します。
ただ、420行目からある普通の攻撃もして
くる場合があるので、それはどんな条件に
なった時なのか、教えて下さい。
宜しくお願い致します。
0462nobodyさん
03/07/11 13:29ID:???600行近くあるソースを「見れば分かる」かよ……
それ以前に何を聞きたいのか不明。日本語の勉強をしてから出直してきてくれ。
0463nobodyさん
03/07/11 13:30ID:???if elsif else がわからないのか?
上から条件式で判定してどれにもあてはまらないときに&bogu_bt;で
# 敵キャラ通常攻撃処理のサブルーチンに飛ぶだけだろ。
0464401
03/07/11 13:35ID:???0465461
03/07/11 13:35ID:XltnJZI3分からないから聞いてるんでしょうが。
まあ、とりあえず、どうもでした。
>>462
何を聞きたいのかは充分に書いて
あるでしょうが。
もう、その表現を使えば勝てると
思ってるね、この馬鹿はw
貴方が日本語の勉強をされた方が、
以下略・・・。
0467nobodyさん
03/07/11 13:47ID:???基本的な文法もわからないようじゃどうにもならんな。
何度か同じような初歩的質問をしているが、もう相手にしない。
ある程度勉強して理解できるようになるまで二度と来るなよ。
0472nobodyさん
03/07/11 14:15ID:???$ whois gekiya77.jp
[ JPNIC & JPRS database provides information on network administration. Its ]
[ use is restricted to network administration purposes. For further infor- ]
[ mation, use 'whois -h whois.nic.ad.jp help'. To suppress Japanese output, ]
[ add'/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'. ]
Domain Information: [ドメイン情報]
[Domain Name] GEKIYA77.JP
[登録者名] 西園修
[Registrant] Osamu Nishizono
[Name Server] ns.gekiya77.jp
[Name Server] dns.wadax.ne.jp
[登録年月日] 2003/06/23
[有効期限] 2004/06/30
[状態] Active
[最終更新] 2003/06/23 18:34:07 (JST)
Contact Information: [公開連絡窓口]
[名前] ワダックス
[Name] WADAX
[Email] [email protected]
[郵便番号] 556-0005
[住所] 大阪府大阪市浪速区日本橋4-1-4-903
[Postal Address] 4-1-4-903,Nipponbashi,Naniwa Ward,Osaka City,
[電話番号] +81(6)6630-6049
[FAX番号] +81(6)6630-6049
0473nobodyさん
03/07/11 14:17ID:???拾い物でしょ
0481401
03/07/11 15:47ID:???0482nobodyさん
03/07/11 16:03ID:???それだと暗号化済みのIDとPASSをコピられたら同じことじゃないの?
あとid、passみたいな分かりやすい名前は止したほうがいいと思う。
0483nobodyさん
03/07/11 16:10ID:???そんなモジュールは知らないが、依存してもいいならWin32::APIとか使えば
何かできそうな気がしなくもない。
漏れはリッピングのコードなんて書いたことないから、これで足りるのかも分からんが。
0485nobodyさん
03/07/11 16:57ID:H65xN+pzperlってどういう意味ですか?
0486nobodyさん
03/07/11 16:58ID:H65xN+pzていうか何ですか?
0487nobodyさん
03/07/11 17:06ID:???0489nobodyさん
03/07/11 18:02ID:???0490nobodyさん
03/07/11 18:28ID:???どんなゲーム形態なのか問わないのであればすぐに作れるぞ。
例えば標準出力にテキスト垂れ流しで、たまに分岐があるぐらいとか。
0493nobodyさん
03/07/11 19:35ID:???0494nobodyさん
03/07/11 19:42ID:jaAmfExn例えば年齢の高い順とかって言う風に、
出来るようにしたいです。
その様な場合には、どう記載したら
宜しいのでしょうか?
0497nobodyさん
03/07/11 22:02ID:???0498nobodyさん
03/07/11 22:36ID:???_┌┬┬┬┐_
――┴┴┴┴┴―、 __________
// ∧// ∧ ∧||. \ /
__[//____(゚_//[ ].゚Д゚,,) || _ \__ < >>497を逮捕しにきました
lロ|=☆= |ロロ゚|■■|■■∪警視庁■■|| \__________
| ∈口∋ ̄_l__l⌒l____|___l⌒l___||
 ̄ ̄`ー' ̄ `ー' `ー' `ー'
0500500
03/07/12 12:27ID:???0501441
03/07/12 13:00ID:???自分が >>441 で言った、
>自分が考えつくのは、
>ソケット通信で、
>地道にpostメソッドで渡す方法くらいなんですが・・・。
だと、とくに問題ないですか?
・・・っていうか、これって、可能ですよね?
0502nobodyさん
03/07/12 13:14ID:???倶愚ったけど、ほとんどインストールの解説で gzip とかヒットして探すの疲れた…
0503nobodyさん
03/07/12 13:31ID:???0504nobodyさん
03/07/12 13:44ID:???↑こういうのは無し。外部プログラム呼び出さないで、
perl 内ですませたいので
0505nobodyさん
03/07/12 13:58ID:???Compress::Zlib::memGunzip( $buff );
0506nobodyさん
03/07/12 15:56ID:???∫ _________
∧,,∧ ∬ /
ミ,,゚Д゚彡っ━~ < ご苦労!
_と~,, ~,,,ノ_. ∀ \
ミ,,,,/~), │ ┷┳━  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ .じ'J ̄ ̄| ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ┻
0507nobodyさん
03/07/12 15:57ID:???0509nobodyさん
03/07/12 17:34ID:???全く反応が無いです。。。
エラーも出ないため、いや、何よりも初心者なので原因がつかめません。
ご教授お願い致しますm(__)m
sub dl{
if(!open(OUT,"$file")){&error(err_file);}
@DATA = <OUT>;
close(OUT);
$count = @DATA;
$delcount = $count - $in{'NO'};
if($delcount ne ""){
$no = $delcount;
$DATA[$no] = "";
}
if(!open(IN,">$file")){&error(err_file);}
print IN @DATA;
close(IN);
}
0510nobodyさん
03/07/12 17:38ID:???INとOUTが逆だな。
それはともかく、$DATA[$no] = "";のところを
print $no;
print $DATA[$no];
$DATA[$no] = "";
print $DATA[$no];
とやってみれ。
0511nobodyさん
03/07/12 17:49ID:p/T5Jtg4「逆ギレする質問者は釣りか荒らし」
ということで。
>>478
デバイスファイルがあればできるよ。
% perl
open(FILE, "/dev/cd0a") or die $!;
print <FILE>;
^D
CD001EP@@@@@@@@@@@@@@@@@IWANAMI_K4@@@@@@@@@@@@@@@@@騷@IWANAMI_K4
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IWANAMI SHOTEN
DAI NIPPON PRINTING CO,LTD
000000000000000
0000000000000000000000000000000000000000000000000CD001
CDDIC�dPWCTLG 榲PWDEMOUROKUUIDEsKOUJIEN懼SCREEN�ATAlGAIJI 殲TREAM
(略)
ほらね。ちなみに↑は広辞苑のCD-ROM。
0512nobodyさん
03/07/12 18:11ID:2K5dewsoいま、JAVAアプレットでCGIを呼び出してファイルをCGIが読み込んでその内容はアプレットに
返すっていう内容のを作っているんですが、CGIが内容を返すときにヘッダーの内容まで
送られてしまって、困っています。
最悪、その部分はJAVAの方で消してもいいんですが、できればCGIからの送信内容は
通信量の面でも軽くしたいし、ヘッダーの内容は送らないようにしたいんですが
可能でしょうか?
0513nobodyさん
03/07/12 18:16ID:???ありがとうございます。
print $no;------------�@
print $DATA[$no];-----�A
$DATA[$no] = "";
print $DATA[$no];-----�B
NO=8を与えてみたところ、
�@に[9]の表示のみとなりました。
$DATA[$no];-----�Aが無いのはどうしてでしょうか?
(゜▽゜;)
0515nobodyさん
03/07/12 18:27ID:p/T5Jtg4可能。nph使う。多くのサーバーでは、CGIスクリプトの名前の先頭に nph- と入れるだけでよい。
例: nph-test.cgi
#!/usr/bin/perl
print "data\n";
exit;
0516nobodyさん
03/07/12 18:30ID:???ちゃんと適当なスレに書け!
0517512
03/07/12 18:31ID:2K5dewsoありがとうございます。
早速やってみます。多謝
0518nobodyさん
03/07/12 18:44ID:???515>>
$DATA[$no];-----�A
前の処理で、スカラーに代入してました(゜゜;)
基本は printですね。。。初心に返ります。
ありがとうございました
0520nobodyさん
03/07/12 19:44ID:???nphでサーバゲットだぜっの時代があったねぇ
0521nobodyさん
03/07/12 19:56ID:???深い階層のディレクトリを作成する為に、
以下のコードを書いたんだけど、
もっと効率のいい方法は無い?
#!/usr/bin/perl
$d = './aaa/bbb/ccc/'; # まだ存在ディレクトリ構造
@list = split( /\//, $d );
shift @list;
foreach ( @list ) {
$t .= "$_\/";
mkdir( $t, 0755 );
print "$t\n";
}
0522nobodyさん
03/07/12 19:57ID:???○ $d = './aaa/bbb/ccc/'; # まだ存在しないディレクトリ構造
0523nobodyさん
03/07/12 20:01ID:p/T5Jtg4system qw(mkdir -p $d);
とかじゃ駄目?そういやモジュールもあった気がするけど覚えてない。
0524あぼーん
NGNG0525nobodyさん
03/07/12 20:02ID:p/T5Jtg4system("mkdir", "-p", $d);
0527nobodyさん
03/07/12 20:08ID:???ごめん。それだと、win系じゃ動かないんだ…(´д⊂ヾ
確か、win のシステムコール(API) は一発で深い階層の
ディレクトリ作ってくれるんだよね。だから、perl にも俺の
知らない関数かモジュールあるかと思って聞いてみたんだ。
まぁ、chdir しながら mkdir するよりはマシかな
0528nobodyさん
03/07/12 20:22ID:???って書いててもwin系なのか。難儀だな。
できないという結論?
File::Pathモジュールをつかう。
ディレクトリの作成だけじゃなく、一括削除もできるよ。
0531nobodyさん
03/07/12 21:31ID:???0532nobodyさん
03/07/12 21:32ID:i3OrVbjxというのがあるとエラーが出ました
それを
"ポテトサラダ"
にしたら正常に動くようになりました
何ででしょう?
■ このスレッドは過去ログ倉庫に格納されています