perlの間接オブジェクト記法によるnewでハマった
Perlのコードでデータをgunzipしたくて、IO::Uncompress::GunzipのReadMeを見ていて見慣れない記法に気付いた
IO::Uncompress:Gunzipモジュール
IO::Uncompress:Gunzipモジュールではgunzipをエクスポートできるので、そのまま関数を呼び出して使うと良いらしい。
use IO::Uncompress::Gunzip qw/gunzip $GunzipError/; 〜〜〜〜 gunzip \$enc_data => \$dec_data; print $dec_data
とりあえず上記で要件は足りたのだが、
IO::Uncompress:Gunzipオブジェクトを生成してそいつでデコードできたりするのかなーと思って調べてみた。
(結局よく分からず。。。orz_)
CPANのReadMe中盤のConstructorの項
my $z = new IO::Uncompress::Gunzip $input [OPTS] or die "IO::Uncompress::Gunzip failed: $GunzipError\n";
ん?
“$z = new IO::Uncompress::Gunzip“?
え? perlで"new"演算子が使えるの??
もともと私はC++からプログラムを覚えて、perlで見せかけのオブジェクト指向を見て逆に面白いと感じていた。
な・の・に、Perlでnew演算子だと!!
「ハゲル!!」とテンパり、悩むこと数時間
結論から言うと「間接オブジェクト記法」または「間接オブジェクト構文」というものらしい。Perlでは昔から存在するらしいが、最近では非推奨との記述もちらほら。
個人的には存在意義が分からないし、Perlとしてのソースコードの整合性を乱している気がするので使いたくはないなーと思った
参考サイト
http://perldoc.jp/docs/perl/5.8.8/perlobj.pod#Indirect32Object32Syntax