one4k4 has asked for the wisdom of the Perl Monks concerning the following question:

In an effort to streamline my html subroutines (mostly for printing <tr>'s on reports) I'm doing something similar to the following:
sub HTML_Something { my $t = shift; return <<END; <tr/td code> $t->{key} </tr> END }
I would like/love to do the following:
sub HTML_Something { my $t = shift; my $d = new Number::Format (-thousands_sep => ',', -decimal_point => +'.', -decimal_fill => 2); return <<END; <tr/td code> $d->format_number($t->{key}) </tr> END }
But, alas, that seems to print the memory location of the hash/ref $t contains. If I say something like this:
sub HTML_Something { my $t = shift; my $d = new Number::Format (-thousands_sep => ',', -decimal_point => +'.', -decimal_fill => 2); $t->{key} = $d->format_number($t->{key}); return <<END; <tr/td code> $t->{key} </tr> END }
I get satisfactory results. What am I missing? I dont really want to do that for every key that I need to format in the html. I'd just like to get interpolation to work within the return <<END area. :) 'Course, the characters I've spent in typing this are most likely greater than the characters I -could- have spent just using my 3rd code example.. :)

_14k4 - perlmonks@poorheart.com (www.poorheart.com)

Replies are listed 'Best First'.
Re: Interpolation via return ..END...
by Rudif (Hermit) on Aug 24, 2001 at 02:41 UTC
    So, you want to interpolate a result of a method call, right?

    Here is one way to do it

    #!perl -w use strict; use Number::Format; sub HTML_SomethingBetter { my $t = shift; my $d = new Number::Format (-thousands_sep => ',', -decimal_point =>' +.', -decimal_fill => 2); return <<END; <tr/td code> @{[$d->format_number($t->{key})]} </tr> END } print "<-- SomethingBetter -->\n"; print HTML_SomethingBetter { key => ' 3.1415956 ' }; __END__ <-- SomethingBetter --> <tr/td code> 3.14 </tr>
    See also Effective Perl Programming item 58, where it is described as U.B.E.: Ugly But Effective.

    My mnemonic for  @{[...]} is "All Embracing Bracketts"

    Cheers
    Rudif

Re: Interpolation via return ..END...
by suburbanantihero (Initiate) on Aug 23, 2001 at 23:31 UTC
    I work with one4k4... we came up with this:

    #!/usr/bin/perl use Number::Format; sub foo { my $d = new Number::Format (-thousands_sep => ',', -decimal_po +int => '.', -decimal_fill => 2); sprintf(<<EOH <tr> <td>%s</td> <td>%s</td> </tr> EOH ,$d->format_number(3) ,$d->format_number(4)); } print foo();


    Is peachy...
Re: Interpolation via return ..END...
by ariels (Curate) on Aug 26, 2001 at 09:32 UTC