Может ли кто-нибудь объяснить мне, почему переменная, объявленная в пакете, не может быть доступна функцией eval, если она не используется один раз внутри суб?
(Perl v5.16.3 MSWin32-x64-многопоточной ActiveState)perl eval Использование неинициализированного значения, объявленного в пакете
Пакет:
use strict;
use warnings;
package testPackage;
my $insertVar = "TEST";
sub testSub {
my $class = shift;
my $test = shift;
eval '$test="'.$test.'";';
return $test;
}
1;
Программа:
use strict ;
use warnings ;
use testPackage ;
my $testVar = q[insertVar = ${insertVar}] ;
$testVar = testPackage->testSub($testVar) ;
print "$testVar\n" ;
Результат при выполнении программы:
Использование неинициализированного значения $ insertVar в конкатенации (.) или строки по адресу (eval 1) line 1. insertVar =
Теперь, если я использую переменную внутри testSub (например, печать):
use strict;
use warnings;
package testPackage;
my $insertVar = "TEST";
sub testSub {
my $class = shift;
my $test = shift;
print $insertVar . "\n";
eval '$test="'.$test.'";';
return $test;
}
1;
Затем программа работает точно так, как я предполагал:
TEST
insertVar = TEST
Почему бы вам «eval» присвоить переменную, чтобы установить себя? – TLP