Допустим, у меня есть что-то
package Foo;
my $bar;
Как я могу определить, объявлен ли $bar
, независимо от того, что он неинициализирован?
На каком-то уровне я предполагаю, что это возможно, потому что warnings
знает это, здесь warnings
знает, что переменная $bar
существует, поэтому вы получите только неинициализированное предупреждение.
$ perl -wE'my $bar; print $bar;'
Use of uninitialized value $bar in print at -e line 1.
Но класс предупреждений once
знает, что переменная $baz
даже не объявлен.
$ perl -wE'my $bar; print $baz;'
Name "main::baz" used only once: possible typo at -e line 1.
Use of uninitialized value $baz in print at -e line 1.
Аналогично, strict
просто остановит компиляцию, поэтому он тоже должен это знать (обратите внимание, что die
никогда не срабатывает).
$ perl -wE'use strict; my $bar; print $baz; die 42;'
Global symbol "$baz" requires explicit package name (did you forget to declare "my $baz"?) at -e line 1.
Execution of -e aborted due to compilation errors.
Значит, он тоже должен это знать.