恥ずかしながら変数展開でハマったお話。
my $a = 'aaa'; print "$a\n"; # prints "aaa" print qw($a), "\n"; # prints "$a"
ダブルクオテーションで囲むと当たり前だが変数は展開される。しかし、qw で囲んだ場合は変数展開がなされません。どの演算子(?)が変数展開をするかは、perldoc perlop にまとめられています。
Customary Generic Meaning Interpolates
'' q{} Literal no
"" qq{} Literal yes
`` qx{} Command yes*
qw{} Word list no
// m{} Pattern match yes*
qr{} Pattern yes*
s{}{} Substitution yes*
tr{}{} Transliteration no (but see below)
<<EOF here-doc yes*
* unless the delimiter is ''.まぁたしかに、qw/STRING/ が変数展開をしてしまうと、
my $a = "a b c"; print join "\n" => qw($a);
上記のように変数の中身にスペースを含んでいた場合に混乱してしまいそうですね。