- 2005-12-01 (木)
- Perl
Attribute::Handlers を利用しているモジュール - Test::Class を使っていて出くわした現象。use encoding を宣言した、下記のようなスクリプトを実行しようとしたらコンパイルエラーになってしまいました:
att.pl
#!/usr/bin/perl
use strict;
use Attribute::Handlers;
use encoding 'utf8';
sub furiously : ATTR(CODE) {
print "handler in work\n";
return;
}
sub bark : furiously { return 1 }
bark();
エラーメッセージ:
$./att.pl
Unterminated attribute parameter in attribute list at ./att.pl line 6, at end of line
syntax error at ./att.pl line 6, at EOF
Execution of ./att.pl aborted due to compilation errors.
解決方法を探ろうとがんばってみたものの、今の自分の知識では無理でした。ただ唯一判った事といえば、shell にてオプション無しで perl を実行 → 上記コードを貼り付け → Ctrl + D で実行した場合はエラーにならなかったのでおそらく
ソースファイル中に混在する制御記号かなんかでひっかかってる
っぽいです。ぽい。すげー自身無いけど(汗)。再現性があるであろうソースファイルをここに置いておきます。
回避方法
encoding プラグマの Filter オプションを立てると回避できます:
use encoding 'utf8', Filter=>1;
ただの僕の凡ミスである確立が高いので、こうやって記事にするまでも無いんだけど... 少なくとも回避方法だけは見つけたので、同じような現象で悩んでる誰かしかの役に立てば、と思って書いてみました。
- Newer: Perl の use と require の違い
- Older: XML::Simple は遅い説における意外な落とし穴 - おまけ編