Perl豆知識に便乗というかツッコミというか、です。
Re: 完全修飾名で呼び出す場合も括弧はいります。
use Carp; Carp::croak('aaa');
これは以下のように括弧は不要のはずです。
use Carp; Carp::croak 'aaa';
省略ができないのは、以下のようにメソッド呼び出しのときです。
use Text::Xslate; Text::Xslate->new(path => ['.']);
Re: 無名サブルーチンは最初から最後まで存在する
静的な場合はそうですが、クロージャとなる場合は不要となった時点で破棄されるはずです。
【8/24 追記】↑こんなに事情は単純ではなく、id:perlcodesample さんがコメント欄でおっしゃっているようにサブルーチンの実体は最後まで開放されないようです。id:gfxさんの解説も合わせてご覧下さい(id:gfx++)。
use strict; use warnings; sub Hoge::DESTROY { warn $_[0]->(), " was destroied" } my $static_func = bless sub { "static" }, 'Hoge'; my $message = "dynamic"; my $closure = bless sub { $message }, 'Hoge'; # % perl test.pl # dynamic was destroied at test.pl line 4.
Re: 変数展開の注意
my $name = 'aaa'; my $message = "${name}::aaa ${name}_ppp";
これはもちろん正しいのですが、以下のように書いているコードも結構見かけます。
my $name = 'aaa'; my $message = "$name\::aaa $name\_ppp";
Re: ファイル読込のショートカット
これ、特に意識してませんでした。なるほどー。perlopに確かに書いてます。
この記述は
while (defined(my $line = <>)) { }と同じ意味を持つので0だけが含まれる行なども、正しく読み込んでくれるので安心です。
ついでに "In other boolean contexts, <filehandle> without an explicit defined test or comparison elicits a warning" とも書いてます。へー。
% perl -we 'print $_ if $_ = <>;' Value of <HANDLE> construct can be "0"; test with defined() at -e line 1.