From: "Rob Dixon" <[EMAIL PROTECTED]> > Jan Eden wrote: > > > > this is not so much a technical as a stilistic question: How do you > > indent here-quoted parts? When writing code like this: > > > > foreach $letter ('a'..'z') { > > my $upletter = uc $letter; > > print ALPHAINDEX <<"EOF"; > > <hr /> > > <p><a name="${letter}link"></a> > > <b>$upletter</b> > > <a href="#Navbar"><img src="../../gifs/up.gif" alt="" > > border="0" width="12" height="15" /></a></p> <ul> EOF > > > > The tabs get printed into the filehandle ALPHAINDEX. But not > > indenting the here-quoted part makes the script less readable. > > > > Any suggestions? Thanks! > > Hi Jan. > > This is mentioned in 'Perl Cookbook' with a solution something like > this: > > sub undent { > my $str = shift; > $str =~ s/^\s+//gm; > $str; > } > > foreach $letter ('a'..'z') { > my $upletter = uc $letter; > print ALPHAINDEX undent <<" EOF"; > <hr /> > <p><a name="${letter}link"></a> > <b>$upletter</b> > <a href="#Navbar"><img src="../../gifs/up.gif" alt="" border="0" > width="12" height="15" /></a></p> <ul> > EOF > }
I would suggest a slightly different undent: sub undent { my $str = shift; $str =~ s/\A(\s*)//me; $str =~ s{^$1}{}gm; $str; } The difference is that the one from cookbook removed all whitespace from the lines in the here-doc, while this one only removes as many spaces as the first line had: $x = undent <<'*END*'; foo bar baz bat *END* Here it is without using a function: :-) for ($x = <<'*END*') {s/\A(\s*)//me;s{^$1}{}gm}; foo bar baz xxx dfgdfg asdfdfg zxcveafgdsfg fgdsfgdfg *END* print ">$x<"; Jenda ===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz ===== When it comes to wine, women and song, wizards are allowed to get drunk and croon as much as they like. -- Terry Pratchett in Sourcery -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>