パッケージ名で地味にはまった。
世の中切ない事はあるもので、先日切ない状況に陥ったのでメモがてら晒して起きます。
package名は皆さんきちんとした命名規則で運用されてると思いますが、歴史的経緯によりpackage名が自由に付けれないという状況に陥ってる方もおられる筈です。
で、そんななかはまったのが
qq::Fooやqx::Fooといったクォート関数が先頭についているパッケージ名でした。
症状から言いますとuse時はエラーが出ずに何かしらのメソッド(newとか)をコンパイラが通った時にエラーが発生します。
use qq::Foo; my $qq = qq::Foo->new(); # ここでエラー
Bareword found where operator expectedと怒鳴られ、syntax error near "qq::Foo"と嘲笑されてしまいました。
エラーメッセージが若干わかりずらかったのですが、つまり
qq:文字列:
と解釈されたのでしょう。
しかし何とかしなければならない状況で出した結論は!
use qq::Foo; my $pkg = "qq::Foo"; my $qq = $pkg->new();
または
use qq::Foo; my $qq = "qq::Foo"->new();
何かセツナス。。
なのでq,qx,qq,qw,qrといったクォート用の関数は注意が必要ですな。
ちなみに
もしやと思ったんですが、その他の関数は大丈夫です。(使用しない方が吉なのは間違いないですが。)
use uc::Foo; my $uc = uc::Foo->new();
オッケ〜〜。