作者: INABA HITOSHI
日時: 2010/3/2(00:40)
藤岡さん、こんばんは

藤岡さんwrote:
----------------------------------------
>> use して使っているのは、
>> (1) strict
>> (2) vars
>> (3) Fcntl
>> (4) Symbol
>> (5) Carp
>> (6) FindBin
>> です。これらがさらに use しているモジュールがあります。全部なくすのは結構
>> 難しいです(無理かもしれません)。ということは @nifty で使うのは無理っぽい。
 
@nifty などのモジュールがまったくないところでも使えないかと自分で代替の
モジュールを書いてみたりもしました。でも re.pm だけは書けず、結局この方法
はだめですね...。

> それはともかく、次のようなスクリプトを書いてテストしています。ZedでTAG
> 実行をするためのものです。エディタ編集ウインドウ上で、
> isbn978-4-15-209089-8
> のようなISBN番号の文字列パターンを含む行でCtrl+クリックするとパターン文
> 字列を引数としてスクリプトを実行します。
> Sjis.pmやjacode.plを使う場面としてはまったく適切な例とは言えませんが。
> スクリプトを試すためには、Amazon Access Keyをセットする必要があります。

Amazon Access Key を取得して、自分も試してみました。

> 下記のスクリプトを実行すると、次のようなエラーになります。
>
> 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 );
    }
-------------------------------------------$
 
テストプログラムのうちMS-DOS系OSに依存した部分を分けようとしています。
 
# UNIXで走らせる以前にまだまだバグが見つかりそうですね...^^;
 
稲葉 準
  		 	   		  
_________________________________________________________________
USBメモリ代わりにお使いください。無料で使える25GB。
http://skydrive.live.com/?showunauth=1&mcid=HomeliveMerchBox1