На самом деле, объявление этих переменных как лексических (my
) переменных не поможет, потому что слишком поздно: переключатель -s
уже установит их. Он устанавливает глобальные (пакетные) переменные (в вашем случае, $main::x
и $main::y
или & mdash; в качестве специальных сокращений - $::x
и $::y
). Если вы не хотите ссылаться на них, используя их имена с указанием пакета, вы можете использовать объявление our
, чтобы указать, что пустые имена $x
и $y
относятся к $x
и $y
в текущем пакете:
our ($x, $y);
print "x: $x\n";
print "y: $y\n";
(Наконечник шляпы Дероберту за указание, что вы можете использовать our
для этого.)
Кроме того, вы можете скопировать глобальные переменные в лексические переменные с одинаковыми именами:
my ($x, $y) = ($::x, $::y);
print "x: $x\n";
print "y: $y\n";
Это позаботится об обоих наборах диагностики.