in reply to Re: [Solved] Printing a 2D array into constant-sized columns
in thread [Solved] Printing a 2D array into constant-sized columns

Thank you :-) This seems to be enough is my case:

printf "%-10s | %10d\n", @$_ for @rows;
Unless if I missed something in your message (what is AoA?)

I found this post as a printf tutorial, will read it this week: Using (s)printf().

What I like about Text::Column is that the code is simple, clear, and anyone can understand it. But I've waited too long before learning printf, it's about time! Your post gave me the energy to get started, thanks a lot.

Replies are listed 'Best First'.
Re^3: [Solved] Printing a 2D array into constant-sized columns
by Laurent_R (Canon) on Apr 02, 2014 at 17:49 UTC
    An AoA is an array of arrays. But in fact your structure is more complicated, it is an array containing a reference to an array of arrays (so it is really an AoAoA). I can't be sure of what you intended to do, but I would guess that you really wanted this:
    my @accounts = ( [ current => 1000 ], [ savings => 2000 ], [ other => 500 ], );
    instead of this:
    my @accounts = [ [ current => 1000 ], [ savings => 2000 ], [ other => 500 ], ];
    The difference, if you don't see it, is in the round surrounding parens, versus square surrounding brackets. The first one (an AoA) looks like this:
    0 ARRAY(0x80359d38) 0 ARRAY(0x80355ce8) 0 'current' 1 1000 1 ARRAY(0x80359d50) 0 'savings' 1 2000 2 ARRAY(0x803fe470) 0 'other' 1 500
    and the second one is clearly more complicated, as it has one more level of nesting:
    0 ARRAY(0x80359d38) 0 ARRAY(0x80356108) 0 ARRAY(0x80360410) 0 'current' 1 1000 1 ARRAY(0x80359c18) 0 'savings' 1 2000 2 ARRAY(0x80359bd0) 0 'other' 1 500
    Ah, and yes, by all means, learn to use sprintf and printf, they are really useful as soon as you need to format output.
      Oh, my mistake really, I meant
      @accounts = (
      Thanks a lot for your help, I've learned to use printf() thanks to you. It was much simpler than I thought it would be, and it is very flexible. Excellent!
        You are welcome.