Markham, Richard wrote:

> this explained just about everything and was 10 times less confusing than my
> own broken code.
> where I really get confused in Perl is different situations will return
> ARRAY reference and
> others will return the element.
> 
> as an example (printf is obviously better), if i were to do a 
>  print @$line . "\n"
> it will return a number so I dont know why that is so. 
> 
> also the @$line is confusing to me since I thought @ implied a whole array
> thus meaning
> an array reference so I cant seem to explain how @$ works. 

Here's a C-like solution that isn't confusing.  I assumed you wanted
the columns to line up vertically:

use strict;
use warnings;

my @newmatrix = (["123.45", "JOHN DOE", "Coal Miner"],
           ["12.45", "MR. PEANUT", "peanut"],
           ["4.1", "Bill Clinton", "unknown"]);
my @maxlength;

# determine max length of each column

for (my $ii = 0; $ii < @newmatrix; $ii++) {
        for (my $jj = 0; $jj < @{$newmatrix[$ii]}; $jj++) {
                my $len = length $newmatrix[$ii][$jj];
                $maxlength[$jj] = 0 if not defined $maxlength[$jj];
                $maxlength[$jj] = $len if $len > $maxlength[$jj];
        }
}

# print each row using column widths derived above

for (my $ii = 0; $ii < @newmatrix; $ii++) {
        for (my $jj = 0; $jj < @{$newmatrix[$ii]}; $jj++) {
                printf "%-*s", $maxlength[$jj] + 2, $newmatrix[$ii][$jj];
        }
        print "\n";
}

__END__

> use strict;
> use warnings;
> 
> my @newmatrix=(
>     ["123.45"   , "JOHN DOE"            , "Coal Miner"  ]
> ,   ["12.45"    , "MR. PEANUT"          , "peanut"      ]
> ,   ["4.1"      , "Bill Clinton"        , "unknown"     ]
> );
> 
> my @maxlength;
> foreach my $line (@newmatrix) {
>     my $index = 0;
> 
>     foreach my $column (@$line) {
>         $maxlength[$index] = 0 unless (defined $maxlength[$index]);
> 
>         if ((length $column) > $maxlength[$index]) {
>             $maxlength[$index] = (length $column);
>         }
> 
>         $index++;
>     }
> }
> 
> my $format = "";
> foreach my $width (@maxlength) {
>     $format .= "  " if ($format);
> 
>     $format .= "%-" . $width . "s";
> }
> 
> foreach my $line (@newmatrix) {
>     printf "$format\n", @$line;
> }

-- 
  ,-/-  __      _  _         $Bill Luebkert    Mailto:[EMAIL PROTECTED]
 (_/   /  )    // //       DBE Collectibles    Mailto:[EMAIL PROTECTED]
  / ) /--<  o // //      Castle of Medieval Myth & Magic http://www.todbe.com/
-/-' /___/_<_</_</_    http://dbecoll.tripod.com/ (My Perl/Lakers stuff)

_______________________________________________
Perl-Unix-Users mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to