Jan Eden wrote:
>
> I have a piece of HTML code containing two Perl variable names, which is to be
> used in 6 scripts. So I tried to put it into a separate file to be executed with
> "do page_head.pl", where page_head.pl contains something like (simplified):
>
> my $page_head = qq{<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC
> [snip HTML]
>
> The obvious problem is, that the variables are not interpolated according to
> their current value in the scripts, i.e. although
>
> $mother_id = 453;
> and
> $title = "Title";
>
> The $page_head variable will an contain empty title tag and show_local.pl
> parameter after the do command.
>
> How can I circumvent this without writing the html code in all the six scripts?
> eval does not seem to be an alternative here.
Hi Jan.
I felt like a quick Perl 'fix' :)
perldoc -f do says:
[do] also differs in that code evaluated with "do FILENAME"
cannot see lexicals in the enclosing scope; "eval STRING" does.
so you need to eval the contents of a file. If in page_head.pl you
write this:
q{ qq{
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title> $title </title>
</head>
<body>
<a href="show_local.pl?id=$mother_id" class="head" target="_self">UP</a>
<div class="textbox">
<!-- begin content -->
</body>
</html>
} };
then I hope you can see that
do 'page_head.pl'
returns the string without the enclosing q{ .. }. i.e. the double-quoted
string that you want to eval. So you can then write
use strict;
use warnings;
my $title = 'Title';
my $mother_id = '453';
print eval do 'page_head.pl';
or, to avoid recompiling the string every time you use it, I would prefer
use strict;
use warnings;
use constant PAGE_HEAD => do 'page_head.pl';
my $title = 'Title';
my $mother_id = '453';
print eval PAGE_HEAD;
HTH,
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>