[kansaipm] Re: [kansaipm] 暗黙のuse utf8

Yasushi Nakajima nakajima at netstock.co.jp
Mon Oct 6 20:37:57 CDT 2003


 暗黙のuse utf8;がどういう条件で起きるのかは、なかなか判然としないので
すが、おそらくXPDFJの中であれこれとデータを操作している中でutf8フラグが
外れてしまう箇所があって、revalするコードの中でそれをutf8化をしようとし
ているためであろうと推測されます。

 そこで、revalするコードの先頭でuse bytes;してしまえば抑止できるのでは
ないかと考え、試してみたらうまくいくようです。もちろんuse bytes;と書いた
のではrequireできないとエラーになるので、次のような感じでやりました。

require bytes;
$bytesimport = \&bytes::import;
$safe = new Safe;
$safe->permit_only(qw(:default));
$safe->share(qw($bytesimport));
....
$code = 'BEGIN{&$bytesimport()}'.$code;
$safe->reval($code);

 ちなみに、次のやり方は、Safe環境の外でrequireがコンパイル済みだからう
まくいくか…と思いますが、実際にはやはりrequireできないというエラーにな
ります。

sub _requirebytes {require bytes;}
$safe = new Safe;
$safe->permit_only(qw(:default));
$safe->share(qw(_requirebytes));
$safe->reval('_requirebytes()'); # ここでエラーに
....
$code = 'BEGIN{bytes::import()}'.$code;
$safe->reval($code);

-- 
Yasushi Nakajima <nakajima at netstock.co.jp>




More information about the Kansai-pm mailing list