Я работаю над cgi-скриптом perl. Он должен обрабатывать какую-то базу данных, где макеты печати и значения для печати сохраняются в хеше. Здесь приходит мой фрагмент кода:интерполяция строки хэшированного формата
my $va=1;
my $vb=2;
my $fa="";
my $fb="";
my %h=('format' => { 'a' => "This is the value of variable \$va: $va",
'b' => "This is the value of variable \$vb: $vb"
},
'values' => { 'a' => "value A",
'b' => "value B"
}
);
$fa=$h{'format'}->{'a'};
$fb=$h{'format'}->{'b'};
$va=$h{'values'}->{'a'};
$vb=$h{'values'}->{'b'};
print "$fa<br/>\n";
print "$fb<br/>\n";
$va=3;
$vb=4;
print "$fa<br/>\n";
print "$fb<br/>\n";
До сих пор я получил только это (неправильно) распечатке:
This is the value of variable $va: 1
This is the value of variable $vb: 2
This is the value of variable $va: 1
This is the value of variable $vb: 2
Что я ожидаю это:
This is the value of variable $va: value A
This is the value of variable $vb: value B
This is the value of variable $va: 3
This is the value of variable $vb: 4
Что может быть причиной того, что интерполяция строк формата, хранящихся в хэше, не работает?
Интерполяция происходит, когда инициализируется хэш ('my% h ='), а не когда он обращается, поэтому '$ va' по-прежнему 1 и' $ vb' равно 2. Это похоже на проблему [XY] (http://meta.stackexchange.com/q/66377/234299), хотя ... не могли бы вы объяснить больше о том, что вы пытаетесь сделать? – ThisSuitIsBlackNot
@ThisSuitIsBlackNot Да Вы правы. Я изменил теперь двойные квоты от ... 'a' => "..." до 'a' => '...'. Теперь хеш не интерполируется и поэтому инициализируется без интерполяции. Но распечатка дает: Это значение переменной \ $ va: $ va Это значение переменной \ $ vb: $ vb Также не интерполировано - почему? –
На первый взгляд, я думаю, что 'eval' является ключевым словом здесь ... – PerlDuck