Как повторно объявить переменную в том же объеме в Perl? - PullRequest
0 голосов
/ 25 июня 2018

Есть ли способ повторно объявить переменную в той же области, используя ключевое слово my в perl? Когда я запускаю следующий скрипт:

use warnings;
use strict;

my $var = 3;
print "$var\n";

undef $var;
my $var = 4;
print "$var\n";

Я получаю "желаемый" вывод, но есть также предупреждение "my" variable $var masks earlier declaration in same scope. Есть ли способ повторно объявить переменную без предупреждения?

Я не уверен, но я думаю, что это потому, что my происходит во время компиляции, а undef происходит во время выполнения, потому что предупреждение печатается даже перед первым print оператором. (Я даже не уверен, что Perl на самом деле компилирует эту вещь перед запуском.)

Контекст: Я хочу иметь возможность скопировать кусок кода и вставить его несколько раз в один и тот же файл без необходимости редактировать все объявления my. Я думаю, что это не лучший способ сделать это, но любое решение проблемы будет оценено.

1 Ответ

0 голосов
/ 25 июня 2018

Чтобы избежать предупреждения, вы можете заключить новое объявление переменной и код, который его использует, в фигурные скобки ({...}) и создать новую область видимости.

my $var = 3;
print "$var\n";

{    
    my $var = 4;
    print "$var\n";
}
...