トップページ⇒php
1001コメント293KB

Perl コーディング初心者質問コーナー Part26

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/07/24 19:48ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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
0552nobodyさん03/08/06 21:27ID:ihwsdtLY
delete $hash{'name'};
はvalueを削除するがエントリーは残る、よって
$hash{'name'} = '';
と同じ。

undef $hash{'name'};
は未定義だからエントリーそのものがなくなる。

であってますか?
0553nobodyさん03/08/06 21:54ID:???
いいえ   
0554nobodyさん03/08/06 22:09ID:???
>>552
existsやってみたらすぐわかるじゃん。
ちょうど逆。
0555nobodyさん03/08/06 22:14ID:???
>>554
センセー definedだと思いますっ。
0556nobodyさん03/08/06 22:18ID:???
>>555
definedは両方偽だよ。
0557nobodyさん03/08/06 22:20ID:???
センセー ボクがまちがっていましたっ。
055855203/08/06 23:10ID:???
>>554
コマンドラインでやってみたら全く逆でした。
すません。
keyからそっくりなくすにはdeleteなんですね。
0559nobodyさん03/08/07 07:46ID:???

 マニュアル *読めば* 理解できる事だが…
0560nobodyさん03/08/07 10:17ID:MNjVgF7U
簡単なことかもしれないけど
$aの属性
$a = 100
$a1 = 200
$a2 = 300

$b

があるとする。このとき、$aの属性と$aの属性がぶつかったときは
なんともにないけど、$aの属性と$bの属性がぶつかったときは
条件が加えるようにしたい

それで
$aのときは条件をつけようと思ったんですけど、属性$aの定数が変数なので
条件がうまくつけられない
よい方法はないだろうか?
if = $a
だと下の2つが含まれなくなる。初心者だけど、わかりますか?
0561 03/08/07 10:20ID:???
>>560
属性というのがわからない。
0562nobodyさん03/08/07 10:23ID:???
>>560
変な自分用語を使わないでクレ。
あと簡単な例でも書いてくれ。
0563nobodyさん03/08/07 10:29ID:MNjVgF7U
ゲームなんだけど
属性というのは火属性は$aとする
$a1や$a2もダメージが違うだけで、火属性としたい。

$bや$cの属性も作りたいけど、ダメージ違いのものもたくさん作る。

このとき火属性と水属性がぶつかったら命中力がおちるとか
条件をつけたい
その属性を特定づける、うまい書き方ってありますか?
ダメージは相手の防御でランだムに減るので、数字は変数なので
固定させることはできないです。
0564nobodyさん03/08/07 10:31ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。


    『どういう入力に対してどういう出力が出るのか書け』
0565nobodyさん03/08/07 10:36ID:MNjVgF7U
出力というよりも、入力のしかたがわからないです。
0566nobodyさん03/08/07 10:41ID:MNjVgF7U
$ = int(rand 6);

$aは火
$a = 100
$a1 = 200
$a2 = 300

属性は水
$b = 100
$b1 = 200
$b2 = 300

if {
$火属製 = 条件
else { 水属性の条件
0567nobodyさん03/08/07 10:44ID:MNjVgF7U
火属性に条件を加えたいが、
$aで加えても$a1 $a2 は火属性の条件がつかないので、困る
0568nobodyさん03/08/07 10:45ID:MNjVgF7U
100とか200にしてるけど、実際の数字は300×ランダム値−(魔法防御)
とか変数になる
0569nobodyさん03/08/07 10:48ID:???
### 魔法の処理 ###
$magic[$zokusei]['lv1'] = 100;
$magic[$zokusei]['lv2'] = 200;

if($zokusei == "fire"){
if($zokusei == "water"){
水の時の処理;
}elsif($zokusei == "earth"){
土の時の処理;
}
}

俺ならこんな感じかな(手抜きでスマソ
0570569 03/08/07 10:49ID:???
ついタブを _| ̄|○
0571569 03/08/07 10:56ID:???
しかもこれじゃ駄目じゃん!<俺
phpと混ざってるし…

ちゃんと回線切って吊ってきて直してくる…
0572nobodyさん03/08/07 10:57ID:MNjVgF7U
なるほど。[$zokusei]['lv1']の方法を初めてみました。
自分のは無駄が多かったみたいです。ありがとうございます。
0573569 03/08/07 11:00ID:???
>>572
まあ、ハッシュを使ってくれという事だ…。

さて吊ってくる
0574nobodyさん03/08/07 11:07ID:MNjVgF7U
え!?まちがってるんですか!?
0575 03/08/07 11:14ID:???
>>574
とりあえずgoogleさんでハッシュに関して調べてみるべし。
多分お前が望んでいる答えがそこにある。

$magic{$zokusei}{LV}

上記は、「魔法」の「属性」が「レベル幾つ」のものであるか、という意味だ。
プレイヤー1の魔法属性(仮に$magic_p1)とプレイヤー2の魔法属性($magic_p2)とする。
で

if($magic_p1 == "fire"){ ### プレイヤー1の属性が火の時

とかでいいんでない?

細かくはリファレンスでも見るよろし。
0576nobodyさん03/08/07 11:16ID:MNjVgF7U
[$a]などを名前の後ろに属性としてばばばって書いてしまいましたが、
これは問題ないですよね?

Perl のゲームに適した文法の辞書サイとを知りませんか?
0577 03/08/07 11:18ID:???
ここは確かに初心者コーナーだが、1から10まで面倒を見てやるところじゃない。
0578nobodyさん03/08/07 11:28ID:MNjVgF7U
直しました
あと、簡単なことは自分で調べたいんですが、
手元にある入門の本は不十分で、いろいろできないんですよ。
いいサイトしりませんか?

ちなみに、パール、辞書で調べると、パールスクリプトの辞書が
ひっかかって、肝心の言語辞書が全くみつからないです
0579nobodyさん03/08/07 11:30ID:???
>>578
>>4-6
0580nobodyさん03/08/07 12:20ID:???
「言語辞書」って一体何だよ…
属性もそうだが、自分用語を改めないことにはこの先もトラブルが絶えないぞ。
とりあえず先人のまとめてくれたテンプレ>>4-6を参考にすべし。
0581nobodyさん03/08/07 12:25ID:???
よく分からんが、この質問は
「ある1つの魔法に、属性や攻撃力など
複数のパラメータを設定するうまい書き方を教えてくれ」
と解釈して良いか?

↓複数のパラメータを設定する方法

$magic{'メラ'} = ['fire','100'];
$magic{'バキ'} = ['air','500'];

↓各パラメータの参照方法

print "$magic{'メラ'}[0]";
print "$magic{'バキ'}[1]";
0582nobodyさん03/08/07 13:11ID:???
http://pc2.2ch.net/php/kako/1056/10567/1056730690.htmlの461じゃないのか?
0583nobodyさん03/08/07 13:23ID:???
ハッシュがとうとかより、もっと多次元な気がするからリファレンスだと思うんだけど。
>>581の例はハッシュの中に無名配列のリファレンスを入れた例かな。
実際はもっと複雑になると思われ。
0584nobodyさん03/08/07 13:28ID:???
ファイル abc.html に含まれる あいうえお という文字列を かきくけこ に変換して上書き保存したい場合はどう記述すればいいんでしょうか?
ご回答よろしくお願いします。
0585nobodyさん03/08/07 13:44ID: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";
0586nobodyさん03/08/07 13:57ID:2CZr0oID
FreeBSDのみでしか動作確認ができていないperl-cgiをANHTTPD+ActivePerlで動かしたいけど、
open($fh, "-|");
が開けなくて困っています。
Windows版のperlは-|は対応していないのですか?
素敵な対応方法を教えてください。
0587nobodyさん03/08/07 14:11ID:???
>>586
perldoc -f open は読んだかい?
0588nobodyさん03/08/07 14:35ID:???
マックやウィンドウズでは使えないっすよ
0589nobodyさん03/08/07 15:12ID:2CZr0oID
>>587 >>588
サンクスコ
0590nobodyさん03/08/07 15:13ID:???
さげるの忘れてますた
0591あぼーんNGNG
あぼーん
0592nobodyさん03/08/07 16:03ID:MNjVgF7U
ゲームで、対戦で、攻撃はパンチとキック、どちらかは2分の1
パンチの場合は、5回に1回はダメージ低い。
さらに5分の2の確率でミスをする。

というのを、1ターンの各攻撃を下のスクリプトに書いたが動かない
誰かこの初心者を助けてください
0593nobodyさん03/08/07 16:03ID: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;
}
}
0594nobodyさん03/08/07 16:32ID:???
( ゚д゚)ポカーン あきれて何も言えん・・・
0595nobodyさん03/08/07 16:40ID:???
>>592
ちみ、潔いですね!男らしいですね!
ということで、『今回だけ特別に』解答してさしあげる。
構造化プログラミングが苦手そうなちみは、gotoを使いなさい。
0596nobodyさん03/08/07 16:43ID:???
>>592-593
ここはお前の相談コーナーじゃないし、質問以前の問題だ
文法を一から勉強しなおしてこい
0597nobodyさん03/08/07 16:56ID:???
ゲームで値を決める場合
$temp = A1 ? B :
A2 ? C ;
A3 ? D :
'';
とか、オレならやるかな…
0598nobodyさん03/08/07 17:20ID:???
$panti = black; (;´Д`)ハァハァ…
0599nobodyさん03/08/07 17:41ID:???
$panti = t_back; (;´Д`)ハァハァ…
0600 03/08/07 17:43ID:???
$panti = heibon; (;´Д`)ハァハァ…
0601nobodyさん03/08/07 18:06ID:fDShQWtW
質問させてください。

192\.168\.0\.[24-26]

こんなイメージで正規表現使いたいのですが、勿論このままでは
とおりません。
何かいい書き方ありましたら教えてください。
0602nobodyさん03/08/07 18:07ID:???
192\.168\.0\.[24|25|26]
060360103/08/07 18:07ID:???
すみません、実際やってるIPは
192\.168\.0\.[65-94]
です。
0604あぼーんNGNG
あぼーん
0605nobodyさん03/08/07 18:11ID:???
ピリオドでsplit
0606nobodyさん03/08/07 18:12ID:???
>>603
192\.168\.0\.((6[56789])|([78][0-9])|(9[1234]))
060760103/08/07 18:16ID:???
>>606
マジで感謝でございます。
有難うございました。
0608あぼーんNGNG
あぼーん
0609あぼーんNGNG
あぼーん
0610nobodyさん03/08/07 18:55ID:???
>>603
$addr="192.168.0.78";
$addr=~/192\.168\.0\.(\d+)/;
if($1>=65&&$1<=94){
0611nobodyさん03/08/07 20:28ID:MNjVgF7U
あなたたち、これのどこがおかしいんですか?
とてもすばらしいじゃないですか
僕の芸術をケチつけられても困ります。

もっといい方法があるなら教えてくださいよ
0612あぼーんNGNG
あぼーん
0613nobodyさん03/08/07 20:30ID: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;
}
}
0614nobodyさん03/08/07 21:24ID:???
もう来るなと言ったろ
0615nobodyさん03/08/07 22:51ID:???
それ、エラーチェックしてんの???????????????


とりあえず、まず文法守れや。
0616nobodyさん03/08/08 00:55ID:???
foreachは
foreach $a ($b) {}
とするか
foreach ($b) {}
とするのはどっちのほうがいいのですか?
0617nobodyさん03/08/08 01:05ID:???
>>616
ケースバイケース。
後者は $_ に入るだけだから、うまく使い分ける。
0618nobodyさん03/08/08 01:06ID: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/
0619nobodyさん03/08/08 01:16ID:???
>>618
これでやってみそ。

&jcode'h2z_sjis(*value);
0620nobodyさん03/08/08 01:21ID:RBuH2Puu
プレイヤー1は$play11の攻撃 プレイヤー2は$play22の攻撃

$play11 = $sentaku1
$play22 = $sentaku1
$kik = 60

だけど、エラーが出ます。なんでエラーでるんすか?
イフとエルスの置き方はちゃんとしてますよ。
ふざけてますね。
0621あぼーんNGNG
あぼーん
0622nobodyさん03/08/08 01:23ID:???
なんでそんなんも分からん状態で質問してんのさ。
最低限文法とか調べてや。
ふざけてるのは(ry

単純文の終わりにはセミコロンがいるよ。
0623nobodyさん03/08/08 01:25ID:???
>611 :nobodyさん :03/08/07 20:28 ID:MNjVgF7U
>あなたたち、これのどこがおかしいんですか?
>とてもすばらしいじゃないですか
>僕の芸術をケチつけられても困ります。
>
>もっといい方法があるなら教えてくださいよ
0624あぼーんNGNG
あぼーん
0625nobodyさん03/08/08 01:31ID:???
キリないから相手にするなって
062661803/08/08 01:41ID:???
>>619
どうもありがとうございます。
早速やってみたところ、500 Internal Server Errorが出てしまいました(~_~;)
他に手立てはないでしょうか?
よろしくお願いします。
0627nobodyさん03/08/08 01:46ID:???
>>626
ちゃんとエラーの読める環境で試しましょう。
0628nobodyさん03/08/08 01:55ID:???
>>618さん
&jcode::convert(\$value, "sjis", "", "z");
と書いてもダメぽ?
062961803/08/08 02:05ID:???
>>628
エラーも出ず、ログファイルも正常に更新されました!!
どうもありがとうございます!(^^)!
0630nobodyさん03/08/08 02:41ID:RBuH2Puu
攻撃
イフキック

エルス、パンチ(イフ、命中(イフ、5分の1で会心の一撃
             (エルス、普通
       (エルス、ミス

と言う様に、イフの中に、さらに3重、4重にイフやエルスを
クませることってできますよね?

あと、エラー出ても、500さーバーエラー、中見が悪いって内容の
エラーしか出ないんですけど、どこが悪いか詳細の出すことできないっすか?

自分のパソコンにアクティブ入れると、詳細出ますかね?
0631nobodyさん03/08/08 02:43ID:???
各生徒のテストの成績データをperlで扱うとき、どのようなデータ型を使うのが
ベストでしょうか?DBは使わないとします。

要するに、行が色々なテスト名、列が生徒名となっているような典型的なテーブルです。
0632nobodyさん03/08/08 02:50ID:???
>>631
ハッシュでいいんじゃないの?
0633nobodyさん03/08/08 02:56ID:???
生徒名・テスト名から点数にアクセスできるようにしたいのですが、
ハッシュだとキーはどうなりますか?
0634nobodyさん 03/08/08 03:01ID:???
リファレンスでも勉強してくれば〜??
0635nobodyさん03/08/08 03:53ID:???
>>631
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
0636あぼーんNGNG
あぼーん
0637あぼーんNGNG
あぼーん
0638あぼーんNGNG
あぼーん
0639あぼーんNGNG
あぼーん
0640あぼーんNGNG
あぼーん
0641nobodyさん03/08/08 04:32ID:RBuH2Puu
攻撃
イフキック

エルス、パンチ(イフ、命中(イフ、5分の1で会心の一撃
             (エルス、普通
       (エルス、ミス

と言う様に、イフの中に、さらに3重、4重にイフやエルスを
クませることってできますよね?

0642nobodyさん03/08/08 04:34ID: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;
}
}
0643nobodyさん03/08/08 04:44ID:???
>>642
どこでPerlを学んだ?
0644nobodyさん03/08/08 04:44ID:RBuH2Puu
フセイン
イフ捕まる(アメリカに核を落とす

エルス捕まらない(イフ包茎じゃない(イフ、オレは天才(オレを総理に
                         逆らう者北朝鮮へ
                 (エルス、オレは天才じゃない
                          (世界を滅ぼす
        (エルス包茎(世界を滅ぼす

と言う様に、イフの中に、さらに3重、4重にイフやエルスを
クませることってできますよね?
0645nobodyさん03/08/08 04:48ID:???
>>644
もう寝れ。二度とくるな。基本的な文法くらいわかってから来い
0646nobodyさん03/08/08 04:49ID:RBuH2Puu
10日でおぼえる
Perl/CGI
入門教室

<h1>定価2800円
税なし
0647nobodyさん03/08/08 04:51ID:???
>>646
俺もそれ読んだが、それ読んで、なんで>>644なんだ?
その本を理解するまで読んどけ
0648nobodyさん03/08/08 04:54ID:RBuH2Puu
おれのパーるは動かないぞ
サーバーはエラーばっか出しヤガル
自分のパソコンにアクティブ入れようか考え中
0649nobodyさん03/08/08 04:54ID:???
ところで全然関係ないけど。

今日、オートロードってヤツをなんと初めて知った。恥ずかしい限り。
見た瞬間感動しちまった初心者な自分。
うん、いいね。あれ。

それだけです。
0650nobodyさん03/08/08 04:55ID:RBuH2Puu
おみくじの部分を入れかえて
パわーアップさせたら、そうなった
0651nobodyさん03/08/08 04:56ID:RBuH2Puu
この本、全然使えないな
0652nobodyさん03/08/08 04:56ID:???
>>649
名前しか知らない。解説して。




ぐぐるの面倒だ
■ このスレッドは過去ログ倉庫に格納されています