Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^4: printf syntac

by props (Hermit)
on Sep 29, 2007 at 09:48 UTC ( [id://641685]=note: print w/replies, xml ) Need Help??


in reply to Re^3: printf syntac
in thread printf syntac

Hi Monks i have 2 arrays @totalexpenses = "ONE" , "TWO" , "THREE"; and @totalcosts = "1" , "2" , "3"; by executing the following code i do not get the result i wish to have in WRITEFILE filehandler. gives me:
ONE TWO THREE 1 2 3 but what i want to look like is : ONE 1 TWO 2 THREE 3
do i need another loop or a hash to form the data ?
open WRITEFILE , ">>$time.txt" or die "write error\n"; my $format = " %10s\n" x @totalexpenses . "%10s\n" x @totalcosts; printf WRITEFILE $format, @totalexpenses , @totalcosts; close WRITEFILE; }

Replies are listed 'Best First'.
Re^5: printf syntac
by FunkyMonk (Chancellor) on Sep 29, 2007 at 10:12 UTC
    List::MoreUtils has a couple of functions that do what you want - pairwise and each_array
    use List::MoreUtils qw/pairwise each_array/; my @totalexpenses = qw/ ONE TWO THREE/; my @totalcosts = 1 .. 3; print "pairwise\n\n"; $a = $b = 0; # avoid "used only once" warnings print pairwise { sprintf "%10s %10s\n", $a, $b } @totalexpenses, @tota +lcosts; #or pairwise { printf "%10s %10s\n", $a, $b } @totalexpenses, @totalco +sts; print "\neach_array\n\n"; my $iter = each_array @totalexpenses, @totalcosts; while ( my ( $costs, $exp ) = $iter->() ) { printf "%10s %10s\n", $costs, $exp; }

    Output:

    pairwise ONE 1 TWO 2 THREE 3 each_array ONE 1 TWO 2 THREE 3

    update: added pairwise in void context alternative

      Many thanks FunkyMonk I had not a clue how to do it
Re^5: printf syntac
by graff (Chancellor) on Sep 30, 2007 at 00:27 UTC
    The solution with List::MoreUtils is definitely good. But sometimes (like when writing code that needs to run on lots of different machines), reliance on a non-core module can be less economical than we would like, especially when the task being solved by the module isn't that complicated to begin with.

    Here's the solution without the extra module:

    open WRITEFILE, ">>", "$time.txt" or die "$time.txt: $!"; my $format = " %10s %10s\n"; printf WRITEFILE $format, $totalexpenses[$_], $totalcosts[$_] for (0.. +$#totalcosts); close WRITEFILE;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://641685]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2024-04-26 08:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found