Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

Re: inserting HTML file in a PERL script

by Ctrl-z (Friar)
on May 30, 2005 at 12:16 UTC ( [id://461770] : note . print w/replies, xml ) Need Help??

in reply to inserting HTML file in a PERL script

I would second scooterm's comment. In addition, the answers above dont really solve your problem:

  • You dont want to be cutting and pasting between an HTML editor and Perl editor
  • You dont want to be heavily modifying the HTML (adding special variable tags or whatever)
  • You do not want to be heavily modifying the existing Perl code (rewriting to a module API or adding half-assed templating subroutines)

To sum up, by the time perl starts executing you want it to run exactly as your program does now. But for you (while developing) you want the html fragments in their own file, to edit with Frontpage and use Perl's existing $variable syntax.

Consider using a source filter.

package Insert; use Filter::Simple; sub slurp { my $file = shift; my ($str, $in); open($in, $file) or die $!; local $/ = undef; $str = <$in>; close $in; return $str; } FILTER { 1 while $_ =~ s/INSERT\(\s*?["']?([^"']*?)["']?\s*?\)/slurp($1)/e; + } 1;

This will paste the contents of files into your script before perl begins executing.

  1. Save the above code with the rest of your program as
  2. add use Insert; to the top of your script
  3. Cut the contents of each heredoc and paste into a new file
  4. Replace the heredoc contents with INSERT("/path/to/that/file")

So this

my $variable = "World!"; print <<EOT; Hello $variable EOT

would become this

use Insert; my $variable = "World!"; print <<EOT; INSERT("includeme.txt") EOT
With the file includeme.txt being
Hello $variable

This will do what you want - but be careful what you wish for.

At least you can concentrate on hacking the HTML rather than adapting existing code to an API or debugging a broken wheel.

Once you get the HTML the way you want it, you can simply paste it back into the code to get better performance.

time was, I could move my arms like a bird and...