Думаю, это должно быть что-то очевидное для тех, кто знает Perl, но я просто не понимаю... Я также полагаю, что это должно быть связано с проблемами, описанными в Perl scoping " darkness " - но я не могу применить ничего из этого в моем случае.
В любом случае, вот код:
#!/usr/bin/env perl
# call with:
# ./test.pl
use strict;
my $tvars = "my \$varA = 1;
my \$varB = 2;
my \$varC = 3;
";
my @lines = split /\n/, $tvars;
foreach my $line (@lines) {
print "$line\n";
eval $line; warn $@ if $@;
}
#~ print "$varA\n"; # Global symbol "$varA" requires explicit package name at ./test.pl line 18.
#~ print "$varB\n"; # Global symbol "$varB" requires explicit package name at ./test.pl line 19.
#~ print "$varC\n"; # Global symbol "$varC" requires explicit package name at ./test.pl line 20.
$tvars = "our \$varA = 1;
our \$varB = 2;
our \$varC = 3;
";
@lines = split /\n/, $tvars;
foreach my $line (@lines) {
print "$line\n";
eval $line; warn $@ if $@;
}
print "$varA\n"; # Global symbol "$varA" requires explicit package name at ./test.pl line 33.
print "$varB\n"; # Global symbol "$varB" requires explicit package name at ./test.pl line 34.
print "$varC\n"; # Global symbol "$varC" requires explicit package name at ./test.pl line 35.
Проще говоря, я хотел бы, чтобы что-то вроде "$varA = 1;
" было написано как строка (текстовый файл); и я бы хотел, чтобы perl
до eval
было написано так, чтобы потом в том же скрипте у меня был доступ к переменной "$varA
" - ошибки, которые я получаю, когда пытаюсь получить доступ к ним после eval
, находятся в комментариях к вышеуказанному коду (однако во время eval
никаких предупреждений не поступало)). ( полагаю, что мне понадобится что-то вроде "глобальных" переменных, если eval
будет работать в другом контексте, чем основной сценарий?)
Как бы я это сделал? Должен ли я пройти через весь этот процесс определения пакета, даже для такого простого сценария, как описанный выше?
Заранее большое спасибо за любые ответы,
.
За Ваше здоровье!