開発支援

  • Amazon.co.jp
    開発支援を希望する方は、上のリンクを通してAmazonでお買い物をすると、私にいくらかの開発費が入る……はずです。
  • Amazon欲しいものリスト
    ひっそりと欲しいものリストを作ってみました。リストを眺めるのも結構楽しいですよね。

最近のトラックバック

ようやくゲットしましたよ

無料ブログはココログ

« HTMLでログ公開!Ver20090120公開 | トップページ | ゲーム設定型ダイス&カードボット「ボーンズ&カーズ」Ver1.1.7公開 »

複数バージョンのPerl対応法って知りませんか?

 最近ちらほら気になっているのが、PerlのVer違いを吸収する方法です。
 たとえば「どどんとふ」のPerlバージョン吸収スイッチである以下のコードは


#= Perlのバージョンが5.8以上なら以下の2行を使用 ====================
#my $isPerl_5_8 = 1;
#use Encode;
#= Perlのバージョンが5.8未満なら以下の1行を使用 ====================
my $isPerl_5_8 = 0;


こんな風に書けるかと思います。(←動作確認しないでいい加減にいってますw)


my $isPerl_5_8 = 0;
if( $] >= 5.008  ){
    $isPerl_5_8 = 1;
    require "Encode.pm";
}


 さて、問題は私のダイスの方ではメルセンヌ・ツイスタを使っていて、これが5.8と5.10でモジュール名が違うという謎があります。
 しかもコードを省略し標準関数の乱数と共通化するためにuseでロードしたい。
 両方のモジュールがあって、片方選択ならメモリが無駄になっても両方useして適正な方だけ使う手もあるんですが、片方が無いというのが問題で。
 useはrequireと違ってコンパイル時にロードしようとします。
 つまり、条件分岐の中に書いても分岐を無視してまずはロードしてかかるわけで、当然無いモジュールをロードしようとすると、エラーで停まってしまいます。
 さっきのコードはrequireを使うことで、条件分岐の中に入ったときだけロードされるようにしています。

 じゃあ、両方入れておけばいいんじゃない?
 うん、そもそもこの分岐を入れたいのは5.8から5.10に移行できず、なおかつどこのコードを修正したらいいかも判らないユーザ向けなんですよね(笑
 私だけ回避できても意味がないのだ。

 う~ん、解決法が判る人居ないかなぁ。
 教えて!Perlの偉い人!!

« HTMLでログ公開!Ver20090120公開 | トップページ | ゲーム設定型ダイス&カードボット「ボーンズ&カーズ」Ver1.1.7公開 »

日記・コラム・つぶやき」カテゴリの記事

コメント

以前 BBS の CGI で require でなら同じような事をしていたのを見かけた事がありますけど (Encode がないなら Jcode、それさえ無いなら jcode.pl という感じ)、うまくやるにはどうしたらいいんでしょうね…?
使ってる Linux の依存関係の問題で、普段使いの Perl がいまだに 5.8.8 なのでメルセンヌ・ツイスタのモジュール名が 5.10.0 で変わってるのは知りませんでした。
以前 windows の cygwin な 5.10.0 に CPAN から Math::Random::MT が入ってたのでてっきり使えるものとばかり思っていました。
いろいろ変わってるんですね。

>以前 windows の cygwin な 5.10.0 に CPAN から
>Math::Random::MT が入ってたのでてっきり使える
>ものとばかり思っていました。

お~、とするとActivePerl固有の問題かな?
ActicePerl5.10.0 build1004のPPMでは「Math-Ramdom-MT」は無くなっていて「Math-Ramdom-MT-Perl」というMTのPurePerlなモジュールになっているらしいです。

# というか、モジュールがどこのPerlかで違うとか大問題な気がするんですがw

requireなら出来るんですが、useで上手く回避する...もしくはインポートリストを使うように「本体側のコード変更をなるべくせずに実体をすりかえて動かすギミック」がないかと思っています。

CPAN で調べてみたところ、
Math::Ramdom::MT も Math::Ramdom::MT::Perl も存在するみたいです。
ActivePerl5.8.8向けの ppm が存在しないらしいのですか…。
Windows & ActivePerl では CPAN経由で make/build する環境が整っているのはよほどの事でしょうし、ppm関係でなにかと混乱しそうですね。

肝心な事を書き落としていました。
ちゃんと期待通りの動きをするのか試したわけではありませんけども、
eval は引数をその場でコードとして実行するので、
eval を通して条件をつけて use するのはどうでしょう?

何度もコメントしてごめんなさい[犬]ω;)
実例としてこんなのを見付けました。

BEGIN {
my ($found, @list, $mod);
$found = 0;
@list = ("Math::Random::MT::Perl",
"Math::Random::MT",
);
foreach $mod (@list) {
if (eval "use $mod") {
$found = 1;
last;
}
}
die unless $found;
}

おお!凄い。ありがとうございます。
……あれ?eval内でuseするのは、やった記憶が。

試してみましたがActivePerl5.10.0ではエラーでとまりますね。
この辺もPerlの実装の違いなんでしょうね。

……と書いてからしばらく試行錯誤して、原因がわかりました。
evalの戻り値はエラー時で「未定義」のはずなのですがActivePerlだとifの条件に書くと$@で評価されるようです。
そのままではUnix上で動かすときに、論理が逆転しそうなので吸収できるように書いてみました。
これで上手く動くはず!

ありがとう犬山さん!

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/503542/43799296

この記事へのトラックバック一覧です: 複数バージョンのPerl対応法って知りませんか?:

« HTMLでログ公開!Ver20090120公開 | トップページ | ゲーム設定型ダイス&カードボット「ボーンズ&カーズ」Ver1.1.7公開 »

TRPG用ツール関連リンク

  • ActivePerl
    ActiveStateのWindows用Perl処理系ActivePerlのサイト。英文。
  • COM Meets Ruby
    Windows用Ruby処理系の一つActiveScriptRubyのサイト。
  • TRPG支援ツール@Wiki
    2ch卓上ゲーム板TRPG支援ツールスレWiki
  • どどんとふ@えくすとりーむ
    Ruby+Flashの高機能オンセツール「どどんとふ」の公式サイト。プレイ会場もあるのでお試しもOKです。私のB&Cが丸ごと入ってます。
  • ターミナルベロシティ
    IRCオンラインセッション界でデファクトスタンダードなダイスボットOD-Toolが公開されているWiki。ぶっちゃけ国産TRPGのフォローアップはOD-Toolの方が良いですw

よく行くサイトさん

  • ten-youの日記
    JavaScriptでLimeChatのマクロ作りに余念がない“ten-you”さんのブログ。DX2用決定版マクロはここから出るかも?!
  • TRPG SNS
    TRPGに特化したSNS。利用は無料で、どどんとふの半公式コミュもあります。
  • TRPG.NET Wiki
    IRCサーバでお世話になっているTRPG.NET上にある、TRPG関係の包括的?Wiki
  • あかまんぼう
    アイコンなどのグラフィックス関係で多大な協力をしてくれている“なかやまさき”さんのブログ
  • お店番ブラウの控え室
    TRPG仲間にして、グラフィック担当の“白瀬 北斗”氏のブログ。内容はTRPGと無関係な罠。
  • きまぐれTRPGニュース
    有名なTRPG関係ニュースのまとめサイト。新製品から論考まで幅広く網羅されています。
  • ひきだしの中身blog
    CoCの伝道師かつ作家かつ美味い物スキーの“内山 靖二郎”氏のブログ。
  • ぽち*ぷ~ち
    怒濤のLinux使い“犬山ぽち丸”さんのサイト
  • トリスメギストスラボ
    三賢者の研究所でしょうか?絵が描けてTRPGが出来る“xing”さんのサイト。デザインが綺麗だなぁ。
  • パルテストラーダ
    “Regulus”さんのArsMagicaのサイトです。人のことは言えませんけど、マニアックですよね(笑
  • 大槌ぶんぶん
    ウォーハンマー翻訳チームの方のブログ。「どどんとふ」の竹流さんの友人だそうです。凄い人は凄い人と繋がってるものですね。
  • 来ヶ!たいたいキングダム 4th Destructor
    Ruby使いの“来山 竹流”さんのブログ。メインは「ど@えむ」に移行したので、こっちはTRPGと開発の話?!
  • 迷いの森
    私はもっぱらブログを読んでる“雪だるま”さんのサイト

こんなの読んでます