[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Omaha.pm] here doc help
Greets all
So I have a interesting issue that I need some assistance with.
I found a here doc "formatting" function on-line (at CPAN) that claims to "expect input from a here doc".
I've made one little change to preserve "blank lines" (i.e, changed a couple "\s" to "[\t ]"), hence the
function name.
Now I want to offload it into a require file. however "perl -c" fails when doing so.
--------[ code #1: file1.pl ]-------------
sub dequote_blank_lines
{
local $_ = shift;
my ($white, $leader); # common white space and common leading string
if (/^[\t ]*(?:([^\w\s]+)(\s*).*\n)(?:\s*\1\2?.*\n)+$/) {
($white, $leader) = ($2, quotemeta($1));
} else {
($white, $leader) = (/^([\t ]+)/, '');
}
s/^[\t ]*?$leader(?:$white)?//gm;
return $_;
}
$cde_script = dequote_blank_lines <<_EOF_;
#!/bin/sh
#real code removed for brevity
/usr/bin/echo "Hello World"
_EOF_
print $cde_script
In this first snippet everything works fine. and a "perl -c" returns OK.
Now lets offload to a require file:
--------[ code #2: file2.pl ]-------------
sub dequote_blank_lines
{
local $_ = shift;
my ($white, $leader); # common white space and common leading string
if (/^[\t ]*(?:([^\w\s]+)(\s*).*\n)(?:\s*\1\2?.*\n)+$/) {
($white, $leader) = ($2, quotemeta($1));
} else {
($white, $leader) = (/^([\t ]+)/, '');
}
s/^[\t ]*?$leader(?:$white)?//gm;
return $_;
}
1;
--------[ code #2: file3.pl ]-------------
require "file2.pl";
$cde_script = dequote_blank_lines <<_EOF_;
#!/bin/sh
#real code removed for brevity
/usr/bin/echo "Hello World"
_EOF_
print $cde_script
In this case, file3.pl fails syntax check in every way imaginable.
I have tried prototyping the function: sub dequote_blank_lines ($), but this fails too.
I am not opposed to making this routine work like a real function and change it to:
$cde_script = HERE_DOC; # for brevity
$cde_script = &dequote_blank_lines($cde_script);
But, I am one who likes flexibility and I think it should work either way. And I am trying
to maintain the original intent of the subroutine, expecting a here doc
Chad, CISSP
Jack Benny - "I don't deserve this award, but I have arthritis and I don't deserve that either."