作者: 藤岡和夫
日時: 2010/3/13(10:37)
藤岡です。新しく出た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