パッケージ名で地味にはまった。

世の中切ない事はあるもので、先日切ない状況に陥ったのでメモがてら晒して起きます。

package名は皆さんきちんとした命名規則で運用されてると思いますが、歴史的経緯によりpackage名が自由に付けれないという状況に陥ってる方もおられる筈です。

で、そんななかはまったのが
qq::Fooqx::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();

オッケ〜〜。