Кто-нибудь может объяснить мне, почему функция eval не может получить доступ к переменной, объявленной в пакете, если только она не используется один раз внутри подпрограммы?
(perl v5.16.3 MSWin32-x64-multi-thread ActiveState)
Упаковка:
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) строке 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;
Затем программа работает именно так, как я предполагал:
КОНТРОЛЬНАЯ РАБОТА
вставкаVar = ТЕСТ
eval
присваивать значение переменной? - person TLP   schedule 16.06.2015