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

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
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
名前しか知らない。解説して。




ぐぐるの面倒だ
0653nobodyさん03/08/08 04:57ID:???
>>651
使えないのはお前の脳みそです。
俺はそれでPerl始めましたから。
かなりわかりやすい本だと思いますが?
0654nobodyさん03/08/08 04:58ID:RBuH2Puu
3000円返せ
0655nobodyさん03/08/08 05:01ID:RBuH2Puu
半か丁かのところで
半を選ぶ

そこにさらに半を選ぶと、半か丁か選ばれて内容がかわる

半か丁かを簡単に改造しただけなんだが
この始末だ

10日でおぼえるどころか、1日目から動かない
この本、だめすぎ
0656nobodyさん03/08/08 05:04ID:???
>>655
解説嫁。カスガ。けなすな、人が気に入ってる本を








と、反応してしまう自分が悲しい
0657nobodyさん03/08/08 05:13ID:RBuH2Puu
わかった
if($bougyo =< 1){

の=と<が逆だな
56Pでわかったよ
これで動きそうだ
0658nobodyさん03/08/08 05:30ID:fJ1eIuTw
>>657
いや、報告しなくていいから。
ここはあんたの日記帳じゃないんだし。
0659nobodyさん03/08/08 05:41ID:???
ゲームで、対戦で、攻撃はパンチとキック、どちらかは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;
0660nobodyさん03/08/08 05:44ID:???
>>652
間違って存在しないサブルーチンに飛んだら、エラーを発生させず、特定のサブルーチンに移動してもらう昨日。
引数もちゃんと受け継がれる。
変数名で飛んでくルーチンを指定してる時とか便利かも。

使いかたは検索して。
0661nobodyさん 03/08/08 05:44ID:???
fJ1eIuTw は自演か?

二度と来るな!
0662nobodyさん03/08/08 05:51ID:???
>>661
違う。頭の柔軟体操のため、作ってみただけ。
スマソ。
066366203/08/08 05:58ID:???
>>661-662
勘違い起こした。fJ1eIuTwは、>>658だったのね。
恥ずかしい勘違いレスをしてしまった。汗
0664nobodyさん03/08/08 06:27ID:???
RBuH2Puuって、ちょっと前に探してますスレにいた粘着と行動が似てるな。
0665nobodyさん03/08/08 06:32ID:???
>>660
知らなかった。いいこと知った。
0666nobodyさん03/08/08 06:34ID:???
別に>>658は自演じゃないべ。
0667nobodyさん03/08/08 08:09ID:???
自分も以前、半角カナのやつで行き詰まったことがあるけど、適当にいじってたら投稿できるようになった。

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 って書いてる。
でも文字化け全然しない…
不思議……(@▽@;)
0668nobodyさん03/08/08 13:11ID:???
>>659
お前はバカか?やるなら荒らしと廃スレでやれや
0669nobodyさん03/08/08 14:21ID:awu4UezK
配列のなかの要素(数字)をすべて足した数値を出すには
foreachを使うのが一番いいのでしょうか?
0670nobodyさん03/08/08 14:45ID:???
>>669
map でも良さそうですね。
0671nobodyさん03/08/08 14:49ID:???
>>667
IEで見てんじゃねーの
0672nobodyさん03/08/08 15:25ID:???
>>669-670
<q cite="http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlstyle.html">
戻り値をただ単に捨ててしまうような void 文脈で、grep()やmap()、
`backticks` (訳注: `ls`のようにバッククォートで括った実行文のこと)
を使うことは避けましょう。そういった関数はすべて戻り値を持って
いるのですから、それを使うべきです。戻り値に用がないのであれば、
代わりにforeach()を使ったループか system()関数を使いましょう。
</q>
0673nobodyさん03/08/08 16:17ID:???
>>669
$ perl -e '@array=(1,2,3);print eval join("+",@array);'
0674nobodyさん03/08/08 16:22ID:???
:で区切られた文字列があります。
もし、 : の後にhogehogeがあるなら、:から:までを消すのはできたんですが
   ※こんな感じで s/:hogehoge.*?://g
その逆の、 : の後にhogehogeが ない なら、:から:までを消す 方法を教えてください。
0675nobodyさん03/08/08 16:30ID:???
age
0676あぼーんNGNG
あぼーん
0677あぼーんNGNG
あぼーん
0678あぼーんNGNG
あぼーん
0679あぼーんNGNG
あぼーん
0680あぼーんNGNG
あぼーん
0681nobodyさん03/08/08 16:47ID: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;
0682nobodyさん03/08/08 16:52ID:RBuH2Puu
これで動かないんですけど、
あと何が必要ですか?
キャラはPlayer1とPlayer2
Player1はHP400、キック力は60、パンチ力は20、防御力は10
Player2はHP300、キック力は100、パンチ力は40、防御力は0

とりあえず1回動かしてみないと、先にすすめないし、
勉強もできない
困ったもんだ
0683nobodyさん03/08/08 16:55ID:dNGBD9SF
%Japan = (
       'tokyo' => [ qw(新宿 渋谷 原宿 池袋 秋葉原) ] ,
       'kanagawa' => [ qw(横浜 藤沢 厚木 茅ヶ崎 横須賀) ] ,
   );
という感じのデータで、$Japan{tokyo}を配列としてforeachでぐるぐる回したいのですが、
どのようにすればいいのでしょう?
foreach ( @$Japan{tokyo} ) { print; }
とやったのでは出来ませんでした。



0684nobodyさん03/08/08 16:59ID:???
Perlの初心者スレが無かったのでここで質問です。

サーバ上のPerlのバージョンを調べたいのです。
Niftyを利用しているのですが、
説明のページにもPerl5としかかかれておらず細かいところがわかりません。
#例えば5.6なのか5.8なのか不明だったり

Perlスクリプトで調べるにはどうやれば良いのでしょうか。
因みにNiftyはtelnet不可で標準モジュールも全く使えません。
0685nobodyさん03/08/08 17:11ID:???
>>684
#! /usr/local/bin/perl

print 'Content-Type: text/html',"\n\n";
print '<html>';
print $];
print '</html>';

ってな感じのCGIを設置してアクセスする。
0686nobodyさん03/08/08 17:14ID:???
#質問でsageてた

>685
ありがとうございます。
5.00503だとわかりすっきりしました。
068767403/08/08 17:17ID:???
…かいけつしますた
0688nobodyさん03/08/08 17:17ID:???
>>683の質問ムズイ(;´Д`)・・・これが解ければリファレンスが理解できた事になるかな・・・
068968803/08/08 17:20ID:???
と思ったら、ぐぐったらあっさり解決したよ(´・ω・`)ションボリ

>>683
foreach (@{$Japan{tokyo}})

括弧ひとつ余計につけないとダメらしい
0690nobodyさん03/08/08 17:33ID: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;
}
0691nobodyさん03/08/08 17:33ID: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>";
0692nobodyさん03/08/08 17:34ID:RBuH2Puu
やっぱ動かない
考えるか
0693nobodyさん03/08/08 17:37ID:???
>>RBuH2Puu

わざわざ貼らんでよろしい。
0694nobodyさん03/08/08 17:39ID:???
スルーでお願いします
0695nobodyさん03/08/08 17:57ID:RBuH2Puu
動くまで貼るけどな
0696nobodyさん03/08/08 18:04ID:???
一生貼り続けるってことだね( ´,_ゝ`)プッ
069768303/08/08 18:13ID:???
>>688さん
ありがとうございます!見事に出来ました!
それにしても、やっぱりリファレンスって難しいんですね…。

0698nobodyさん03/08/08 20:00ID:???
つーかattackとかkickとかしろよ、名前
KIKって(;´Д`)
0699nobodyさん03/08/08 20:02ID:???
>>659
が余計なコト書くから。
RBuH2Puuがわけの分からん行動はじめた。
0700nobodyさん03/08/08 20:13ID:???
ぷうまだ居たんだ。
0701nobodyさん03/08/08 20:25ID:???
もうすでに意地になってるだけだろ。一番ダサいパターンだ。
0702nobodyさん03/08/08 20:28ID:???
($damage < 0) and ($damage = 0);
$defense->{'HP'} -= $damage;
0703nobodyさん03/08/08 20:35ID:???
ある変数を複数の条件で比較したいのですがどうすれば良いのでしょう。
例えば$hogeは$fooか$barか$baz以外の値であればエラーとしたくて
if ($hoge ne ($foo or $bar or $baz)){&error(不正な値が混じってます);}
のように書いたりしたのですがダメでした。
0704nobodyさん03/08/08 20:39ID:???
if (($hoge ne $foo) or ($hoge ne $bar) or ($hoge ne $baz)){&error(不正な値が混じってます);}
0705nobodyさん03/08/09 01:40ID:???
>>704
書いた本人もわかってると思うけど、orはandの間違いだよね。
0706nobodyさん03/08/09 02:34ID: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;
0707nobodyさん03/08/09 02:34ID: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;
0708nobodyさん03/08/09 02:34ID: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>";
0709あぼーんNGNG
あぼーん
0710あぼーんNGNG
あぼーん
0711あぼーんNGNG
あぼーん
0712nobodyさん03/08/09 02:40ID:???
いつまで荒らせば気が済むんだ
0713あぼーんNGNG
あぼーん
0714あぼーんNGNG
あぼーん
0715nobodyさん03/08/09 02:48ID:???
($damage < 0) and ($damage = 0);
$defense->{'HP'} -= $damage;
0716nobodyさん03/08/09 03:54ID:???
>>715
相手にするなよ
お前みたいなのがいるからつけ上げるんだ
0717あぼーんNGNG
あぼーん
0718nobodyさん03/08/09 04:09ID:???
>>716
黙れ無能。
0719nobodyさん03/08/09 04:21ID:???
いるんだよな。
教えたがりというか、得意になりたがるというか。
感謝のレスをもらって満足したいんだろうなぁ。
0720nobodyさん03/08/09 04:37ID:???
糞な質問は仕方ないとしてもデカイAA貼るのはム板では論外。
荒らしとしても最低の部類に入る。

あ、>>715>>718見て気付いた。ここWebProgだったか。ならいいや。
0721nobodyさん03/08/09 05:13ID:???
>>720
馬鹿にして満足しているようだが、つまらんな。
いなくても誰も困らないからム板に引っ込んでいれば?
ム板住人にしては最低の部類に入るけどな。
0722nobodyさん03/08/09 05:14ID:???
>>721
マジレスすんなよ。むかつくなあ。
0723nobodyさん03/08/09 05:20ID:9s2Ca0tO
なめてやがんな
おれは荒らしじゃねーよ!ヴォケ!!

相手にすんなよ、とか言ってる馬鹿がいるから荒れるんだよ
もとは、てめーみたいな無脳がいるから、住みつくんだっつーの!!
無脳を相手にするのは一番、気持ちいいからな!!馬鹿だから!!
0724nobodyさん03/08/09 05:40ID: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;
0725nobodyさん03/08/09 05:40ID: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'};
}
0726nobodyさん03/08/09 05:40ID: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;
0727nobodyさん03/08/09 05:41ID: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>";
0728nobodyさん03/08/09 05:42ID:9s2Ca0tO
やっぱり動かないっすね

($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage

がいまいち理解できんよ。
0729nobodyさん03/08/09 06:25ID:???
どれ、ちょっくら削除整理板にでも行ってくるか。
0730nobodyさん03/08/09 06:56ID:???
>>729
0731nobodyさん03/08/09 07:18ID:???
9月になったら消えるでしょ。
それに、こういうのは名無し相手には強気になれても、システム側の人間が動き出せば
態度が一変するよ。ほんと面白いぐらいに。
■ このスレッドは過去ログ倉庫に格納されています