On Mar 30, 8:13 am, [EMAIL PROTECTED] (Chas. Owens) wrote:
> On Sat, Mar 29, 2008 at 9:14 PM, Trudge <[EMAIL PROTECTED]> wrote:
>
> > On Mar 29, 4:05 pm, [EMAIL PROTECTED] (Gunnar Hjalmarsson) wrote:
> >  > Trudge wrote:
> >  > > I'm trying to get a script to interpolate variable values in a
> >  > > __DATA__ block if possible. This is a kind of alternative to a full-
> >  > > blown template method. I'm not sure if I can even do what I want,
> >  > > hence my posting here.
>
> >  > It can be done; see the FAQ entry
>
> >  >      perldoc -q "expand variables"
>
> >  > <snip>
>
> >  > >    while (<DATA>)
> >  > >    {
> >  > >            chomp;
> >  > >            if ($_ eq "<$data>")
> >  > >            {
> >  > >                    next;
> >  > >                    print "$_\n";
> >  > >            }
> >  > >            if ($_ eq "</$data>")
> >  > >            {
> >  > >                    last;
> >  > >            }
> >  > >            print "$_\n";
> >  > >    }
>
> >  > Try to replace that with:
>
> >  >         while (<DATA>) {
> >  >                 chomp;
> >  >                 next if $_ eq "<$data>";
> >  >                 last if $_ eq "</$data>";
> >  >                 s/(\$\$\w+)/$1/eeg;
> >  >                 print "$_\n";
> >  >         }
>
> >  > --
> >  > Gunnar Hjalmarsson
> >  > Email:http://www.gunnar.cc/cgi-bin/contact.pl
>
> >  Gunnar, this works perfectly, and is what I am trying to achieve. Many
> >  thanks, and a brew on me :)
>
> >  For the curious, I find myself sometimes having to display similar
> >  blocks of text over and over, with only minor changes. It could be
> >  HTML or XML. As far as I know, templates require separate files to
> >  work with. To avoid a lot of separate files, I've been using 'here'
> >  documents up until now, all contained in one large script. But I
> >  wondered if I could achieve a similar
> >  effect putting the blocks of text in a __DATA__ block. Now I know it
> >  can be done, so I will be exploring this method.
>
> >  Thanks to all who responded.
>
> snip
>
> If you have multiple templates you might want to use Inline::Files*
> instead of a straight DATA block.  This module lets you have multiple
> DATA-like blocks:
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
> use Inline::Files;
>
> print while <BAR>;
> print while <BAZ>;
> print while <FOO>;
>
> __FOO__
> This is foo
> This is still foo
> __BAR__
> This is bar
> This is still bar
> __BAZ__
> This is baz
> This is still baz
>
> *http://search.cpan.org/dist/Inline-Files/lib/Inline/Files.pm
> --
> Chas. Owens
> wonkden.net
> The most important skill a programmer can have is the ability to read.

Chas. I've installed this and gave it a quick whirl. While it does
print OK from various blocks, I couldn't get it to do what I really
need, namely to interpolate variables in those blocks. For example,
this snippet didn't print the variables.

#!/usr/bin/perl

use strict;
use warnings;
use Inline::Files;

print while <FOO>;
print while <BAR>;
print while <BAZ>;

my $foo="FOO";
my $bar="BAR";
my $baz="BAZ";

__FOO__
This is $foo
This is still $foo
__BAR__
This is $bar
This is still $bar
__BAZ__
This is $baz
This is still $baz

Neither did using a reference to all 3 variables.
--
Amer Neely - www.webmechanic.softouch.on.ca


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to