Я предполагаю, что это должно быть что-то очевидное для тех, кто знает 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
работает в другом контексте, чем основной сценарий? )
Как бы я поступил так? Должен ли я пройти через весь этот бизнес по определению пакетов, даже для простого сценария, подобного описанному выше?
Большое спасибо заранее за любые ответы,
Ура!