my $color;
if (undef $color)
{
my $color = $ARGV[0];
}
Это выглядит довольно странно.В строке 1 вы объявляете скалярную переменную с именем $color
.В строке 2 вы вызываете undef()
для этой переменной, которая заменяет содержимое $color
на undef()
(это не нужно, поскольку недавно объявленный скаляр Perl всегда будет содержать undef()
).Это выражение вернет undef
, что неверно, поэтому код в вашем блоке if
никогда не выполняется.
В строке 4 вы объявляете новую переменную, также называемую $color
, и задаете для нее значение$ARGV[0]
.Есть две проблемы с этим.Во-первых, эта строка никогда не будет выполнена по причинам, описанным в предыдущем абзаце.И, во-вторых, ваша новая переменная $color
прекратит свое существование после того, как вы покинете блок, поэтому вы никогда не увидите эффекта этого изменения.
Я думаю, что главная проблема здесь в том, что вы запутали undef()
с defined()
.undef()
всегда будет давать переменной неопределенные значения, но я подозреваю, что вы хотели defined()
, который говорит вам, содержит ли переменная определенное значение.
Что вы, вероятно, хотели:
my $color;
if (!defined $color) {
$color = $ARGV[0];
}
Что можно записать как:
my $color //= $ARGV[0];
Но это все еще немного сбивает с толку, так как неясно, почему вы думаете, что $color
может быть определен сразу после объявления.