藤岡さん、こんばんは
藤岡さん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