undef な SCALAR を ARRAY でデリファレンスすると、値が変わる
こんなテストスクリプトを作ってみる。
#!/usr/local/bin/perl use strict; use warnings; use Data::Dumper; my $hoge = undef; printf "%s\n", Dumper $hoge; for my $hogehoge ( @{ $hoge } ) { } printf "%s\n", Dumper $hoge;
% ./test.pl $VAR1 = undef; $VAR1 = [];
空の ARRAY リファレンスに変わった。そういう仕様なのか。参照しているつもりが値を変化させてしまうのはよろしくない気がする。
SCALAR に普通の文字列が入っているとどうか。
#!/usr/local/bin/perl use strict; use Data::Dumper; my $hoge = 'a'; printf "%s\n", Dumper $hoge; for my $hogehoge ( @{ $hoge } ) { } printf "%s\n", Dumper $hoge;
% ./test.pl $VAR1 = 'a'; Can't use string ("a") as an ARRAY ref while "strict refs" in use at ./test.pl line 9.
use strict; でエラーにしてくれるみたいだ。まあそうだよね。