macでビルドに失敗したので、etchをPowerBookG4に入れた上でインストールしてみました。
KOSHIGOE学習帳 - [python]Perl関連
Pythonから"簡単"にCPANモジュールを使えると思っていたのですが、意外(当然?)にめんどくさい事が多そうです。
そもそも、Pythonのタプルを渡す事が出来ません。ソースのコメントを眺める限りでは、Boolean, Integer, Float, String, List, Dictionaryだけが許可されている風です。
さらに、よく分かっていませんが日本語も何かしらの理由で受け取る事が出来ない場合があるようです。Acme::KensiroというCPANモジュールを使ってみたのですが、返ってくる文字列をPythonで受け取る事が出来ませんでした。
# -*- coding: utf-8 -*- import perl perl.addVariable('jap', 'あいうえお') perl.execute('print utf8::is_utf8($jap) ? "=> utf8 flag.\n" : "=> not utf8 flag\n";') perl.execute('print "in pl[0]: $jap\n";') print 'in py[0]:', perl.getVariable('jap') perl.execute('$p_jap = "かきくけこ"; print "in pl[1]: $p_jap\n";') perl.execute('print utf8::is_utf8($p_jap) ? "=> utf8 flag.\n" : "=> not utf8 flag\n";') perl.execute('print "in pl[2]: $p_jap\n";') print 'in py[1]:', perl.getVariable('p_jap') perl.execute('use utf8; $p_jap_u = "かきくけこ"; print "in pl[3]: $p_jap_u\n";') perl.execute('print utf8::is_utf8($p_jap_u) ? "=> utf8 flag.\n" : "=> not utf8 flag\n";') perl.execute('print "in pl[4]: $p_jap_u\n";') print 'in py[2]:', perl.getVariable('p_jap_u') perl.execute(''' use Acme::Kensiro; $ata = kensiro(16); print utf8::is_utf8($ata) ? "=> utf8 flag.\n" : "=> not utf8 flag\n"; print "in pl[5]: $ata\n"; ''') print 'in py[3]:', perl.getVariable('ata')
=> not utf8 flag
in pl[0]: あいうえお
in py[0]: あいうえお
in pl[1]: かきくけこ
=> not utf8 flag
in pl[2]: かきくけこ
in py[1]: かきくけこ
Wide character in print at (eval 6) line 1.
in pl[3]: かきくけこ
=> utf8 flag.
Wide character in print at (eval 8) line 1.
in pl[4]: かきくけこ
in py[2]: かきくけこ
=> not utf8 flag
in pl[5]: あたたたた
in py[3]:
Traceback (most recent call last):
File "perl_acme_kensiro.py", line 25, in ?
print 'in py[3]:', perl.getVariable('ata')
ValueError: Unknown Perl variable type
とりあえず、CPANに頼るしか無い場面がやってくるまで封印しておきます。ジョークモジュールを触るくらいならPythonから動かす必要は無いわけですし。
久しぶりにcpanコマンドを触ってみましたが、相変わらずテストでよく失敗します。"perl Makefile.PL; make; make intall"だと平気なんですが、よく分かりません。よく分からないままモジュールをインストールしていると、突然よく分からない依存モジュールをインストールしてみたりして、気がついたらインストールしていたはずのモジュールが消えていたり。やはり鬼門です。
いや、まあ、ちゃんと"読め"ばいいわけですけどね。。。

