in reply to How to use __DATA__ efficiently, help!

This is how you can fake multiple data sections:

my @aData; { #set the record divider to __DATA__ :-) local $/='__DATA__'; @aData = <DATA>; chomp @aData; #get rid of __DATA__ from end of record } print STDERR "------------DATA #1 ----------------\n$aData[0]" . "------------DATA #2 ----------------\n$aData[1]";

outputs

------------DATA #1 ---------------- <table width="100%" border="0" bgcolor="#ffffff" cellpadding="0" cells +pacing="0"> <tr> <td colspan="2">&nbsp;</td> </tr> <tr> <td width="60%">All Names List from:</td> <td width="40%" align="left"><b>$date</b></td> </tr> <tr> <td width="100%" colspan="2">&nbsp;</td> </tr> </table> ------------DATA #2 ---------------- <table width="100%" border="0" bgcolor="#ffffff" cellpadding="0" cells +pacing="2"> <tr> <td><b>Name</b></td> <td><b>Address</b></td> <td><b>Phone</b></td> <td><b>Email</b></td> <td><b>$location</b></td> </tr> <tr> <td colspan="5">&nbsp;</td> </tr>

Replies are listed 'Best First'.
Re^2: How to use __DATA__ efficiently, help!
by Anonymous Monk on Feb 09, 2011 at 20:12 UTC
    Would this be easier if it was done using HTML::Template? Has anyone done such using this method?

      For one or two variables and code that you know doesn't have any $myvar strings that aren't supposed to be interpreted as a variable, your (OP's?) approach is likely fine. This is fairly simple and short code:

      my $date='**2010-02-09**'; my $line = $aData[0]; $line =~ s/\$date/$date/g; print STDERR "------------DATA #1 ----------------\n$line"; $date='**1910-02-09**'; $line = $aData[0]; $line =~ s/\$date/$date/g; print STDERR "------------DATA #2 ----------------\n$line";

      However, it won't scale well. It will quickly become difficult to manage. Furthermore, the more variables the more likely you are going to have some random unintended substitutions. At that point you would be very wise to use a module like HTML::Template. Think of it as your solution with all the problems and corner cases debugged for you in advance.