>Как в данном случае в Perl можно сделать, чтобы вместо переменных выводились
>значения? как правильно было сказано выше, необходимо с помощью регулярных выражений менять название переменной на ее значение (модификатор "e"). Навроде такого:
[admin@comm perl]$ cat ./html_var_subst
#!/usr/bin/perl
use strict;
use warnings;
use vars qw( оG %VARS );
sub main;
оG = (
html_file => 'html_var_subst.html'
);
%VARS = (
title => 'this is title',
announce => 'another text'
);
main;
sub main {
if( open( F, '<', $CFG{html_file} ) ) {
while( <F> ) {
s|\${([a-zA-Z_]+[a-zA-Z0-9_]*)}| exists $VARS{$1} ? $VARS{$1} : "<span class=\"error\">unknown var [$1]</span>" |gie;
print;
}
close( F );
} else {
die "Can not open [$CFG{html_file}], $!\n";
}
}
[admin@comm perl]$ cat ./html_var_subst.html
<html>
<head>
<title>${title}</title>
</head>
<body>
<h1>${title}</h1>
<p>${announce}</p>
<p>unknown: ${unknown}</p>
</body>
</html>
Кстати, читать файл в массив в этом случае не совсем удачная идея. Гораздо лучше читать файл построчно, попутно обрабатывая и печатая строки