藤岡です。新しく出たSjis-0.51、jacode-2.13.4.5を試しました。
エラーも出ず、意図通りの動作をしました。ありがとうございました。
On Tue, 2 Mar 2010 00:40:33 +0900
INABA HITOSHI <hinaba@...> さんwrote:
> > 下記のスクリプトを実行すると、次のようなエラーになります。
> >
> > Name "Esjis::isbn978-4-15-209089-8" used only once: possible typo at
> > C:/Perl5.10/lib/Symbol.pm line 135.
>
> これは Esjis::e の中で
>
> my $fh = Symbol::qualify_to_ref $_;
>
> としているところが警告になっています。なので、直前に
>
> local $^W = 0;
>
> を入れて警告を表示しないようにしました。
>
> > Undefined subroutine &jcode::f called at C:/Perl5.10/site/lib/jacode.pl
> > line 587.
>
> これは
>
> &jcode'sjis($_->authors, 'utf8'), "著「",
>
> の $_->authors がリストを返していて、&jcode'sjis の第2引数に 'utf8' が渡って
> いないのが原因のようです。なので、
>
> &jcode'sjis(join(' ',$_->authors), 'utf8'), "著「",
>
> としました。
>
> > Wide character in print at isbn2sjishtml.pl.e line 65.
> > Wide character in print at isbn2sjishtml.pl.e line 65.
> > Wide character in print at isbn2sjishtml.pl.e line 65.
>
> は &jcode'convert で変換する対象の文字列にUTF8フラグが立っているためでした。
> そこで以下のようにして、フラグを強制的に落とすようにしました。
>
> &jcode'convert 変更前:
> -------------------------------------------^
> local (*f) = $convf{ $icode, $ocode };
> if ( $convf{ $icode, $ocode } ) {
> &f( *s, $opt );
> }
> -------------------------------------------$
>
> &jcode'convert 変更後:
> -------------------------------------------^
> local (*f) = $convf{ $icode, $ocode };
> if ($icode eq 'utf8') {
> eval q{ use Encode; };
> unless ($@) {
> eval q{ Encode::_utf8_off($s); };
> }
> }
> if ( $convf{ $icode, $ocode } ) {
> &f( *s, $opt );
> }
> -------------------------------------------$
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html