qqとかでエラーになるケース

そういえば、宣言してない変数とか、
"(ダブルクォーテーション)で括ったり、
qqを使って出力するとどうなるのか気になったので試してみた。

use strict;
use warnings;
use v5.10;

say '$hello!';
# say "$hello!";
say "\$hello!";

say '---';

say q/$hello!/;
# say qq/$hello!/;
say qq/\$hello!/;

say '---';

my $hello = 'good bye';
say "$hello!";
say qq/$hello!/;

実行結果はこんな感じ。
$ perl aaa.pl
$hello!
$hello!
---
$hello!
$hello!
---
good bye!
good bye!

ちなみに、6行目と12行目の#を外すと、こんなエラーが出る。
Global symbol "$hello" requires explicit package name at aaa.pl line 6.
Global symbol "$hello" requires explicit package name at aaa.pl line 12.
Execution of aaa.pl aborted due to compilation errors.

でも、6行目と12行目の#を外した状態で、
1行目と2行目の先頭に#を付ける(コメントアウトする)と、
何事もなかったように動作する。

あと、1行目のuse strict;だけコメントアウトすると、こんな感じ。
$ perl aaa.pl
$hello!
Use of uninitialized value $hello in concatenation (.) or string at aaa.pl line 6.
!
$hello!
---
$hello!
Use of uninitialized value $hello in concatenation (.) or string at aaa.pl line 12.
!
$hello!
---
good bye!
good bye!

まとめ
use strict;use warnings;は大事。

おしまい。

Leave a Comment