Сравните с помощью perl -w -Mstrict
:
# case Alpha
print $c;
...
# case Bravo
if (0) {
my $c = 1;
}
print $c;
...
# case Charlie
my $c = 1 if 0;
print $c;
Alpha
и Bravo
оба жалуются на глобальный символ, не имеющий явного имени пакета, чего и следовало ожидать. Но Charlie
не дает такого же предупреждения, только то, что значение неинициализировано, что сильно пахнет:
# case Delta
my $c;
print $c;
Что именно происходит под капотом? (Даже если что-то вроде этого никогда не должно быть написано для производственного кода)