July 13, 2006

Perlのこと

ふにふに娯楽室に設置している「信じられない植物」で新アイテムを作りたくて、見よう見まねでcgiを触っている。

これまで3個のオリジナルアイテムを作った。商品番号を割り振る都合があるので相談したところ、cgi作者さんから正式に番号の枠を5個までもらうことができたので、まだあと2個は作ることができる。楽しいので、また何か作ってしまいそうだ。

さて、Perlだ。。。

本は何冊か持っているが、真剣に勉強したことがなかった。今回「うまく書けたら公開してみんなにアイテムを使ってもらおう」という考えでいたので、動けばいいやというものではなく、書き方もきれいにしようと欲ばっていた。持っている本を大まじめに読み返したりネットで参考サイトを読んだりと、わたしにしてはかなりの時間を費やした。

きれいな書き方をしようと思えば思うほど、最後の単純なところでつまづいて動かない。
(やろうと思っていたことがどんな内容かは、この記事の最後に記載)
そこで、動けばいいやと、きれいな書き方をあきらめて、まずは自分の設置ゲームにだけでも使えるようにした。アイディアだけでも参加者に評価してもらい、使い勝手や感想を聞くことができてから「きれいな書き方」を目指して一般公開すればいいか、と。

ローカルでのテストは問題なかったので、本日未明、参加全員のデータに新アイテムを書き加えた。参加の方々の多くは、珍しい新アイテムをおっかなびっくり使ってくださっているようだ。ありがたい。

これからも少しずつ勉強して、ほかの設置者の皆さんがご希望ならアイテムを使ってもらえるように公開準備をしていきたいところだが、あまり焦らずにのんびりやっていこうと思う。

最後に、わたしがやろうとしていたことのメモ書き:

cgi本体にあるアイテム使用のルーチンがとても便利ですっきりしているので、そこをそのまま使わせていただくことにして

=== 親となるルーチン内 ===
アイテム使用
 => サブルーチンに移動して
    2種類のランダムメッセージを生成し、それに対応するアイテム増減の処理
 <= メッセージを親ルーチンに持って帰ってきて表示
親ルーチンは次のプロセスへ
=================

を、やりたかった。だがメッセージを持って帰ってこられない。
アイテム増減はできてもメッセージが表示されないと、利用者には何が起こったのかわからないのだが、これが現段階のわたしの知識では、できない。

そこで、禁断の

=== 親となるルーチン内 ===
アイテム使用
 サブルーチンに移動せず、
 2種類のランダムメッセージを生成し、アイテム処理
 メッセージを結果表示
親ルーチンは次のプロセスへ
=================

「サブに落ちずにベタッと書く」

という決断をした。

きれいだった場所に、100行近くも「ベタッと」書いてしまった。
これはあまりに見苦しい。

――がんばります、はい (^^; 。

Posted by mikimaru at July 13, 2006 01:09 PM
コメント

メッセージ文字を戻すだけであれば

main{
$msg = xxx();
}
sub xxx {
$return_string = "back string";
return $return_string;
}

でいけそうな気もしますが・・・。
気をつけるのは、subで使用している変数名が
他でも使われてたりしないかなどですかねー。
まぁ、あんましperlはくわしくないんですけど・・・^^;

Posted by: カッパ at July 18, 2006 11:49 AM

すごい! さすが、餅は餅屋、キュウリは農家!
狂喜乱舞・・・できた、できた、できた〜(きゃ〜っ)。

自分ではぜったいに思いつかない方法でした。
ありがとう。
しかし、よくあれでわかってもらえたなぁ(涙)。

Posted by: mikimaru at July 18, 2006 12:22 PM

おー、正解でしたか^^;
何はともあれおめでとうござんす〜〜〜^^;
return周りは、結構基本の考え方なので
(perlに限らず他の言語でもほぼ同じ)
覚えておいて損は無いですよー。

Posted by: カッパ at July 18, 2006 05:42 PM

いや〜、ほんと、目から鱗でしたぁ。
サブルーチンで「return なんたら〜」という具合に書いたことは書いていたんだけれど、メインのほうでどういうアクションを起こせばそれを読みこんでくれるのか、そのあたりがわからなくて。。。(基本がないからねぇ ^^;)
$msg = xxx();
を見た瞬間「ぎゃ〜っ! これが欠けていたんか」と叫んでエディタ開きました。

これからもがんばります!

Posted by: mikimaru at July 18, 2006 07:09 PM