in reply to print arrays a(i), b(i,j) c(i,j)

Your first attempt looked better but you need comas in there and you have too few parameters. For printing three values the following should work:

printf PLOUT "%.5f %.5e %.5f\n", $energy_bin[$i], $spec_cps[$i][$j], $ +sigma_cps[$i][$j];

However, that doesn't sound like it is what you really want. How about giving a complete snippet of code that runs and shows the problem you have. Something like this:

use strict; use warnings; my @energy_bin = (1, 2, 3); my @spec_cps = ([5, 6], [7, 8], [9, 10]); my @sigma_cps = ([15, 16], [17, 18], [19, 110]); for my $j (0 .. $#energy_bin) { printf "%.5f %.5e %.5f %.5e %.5f\n", $energy_bin[$j], $spec_cps[$j][0], $sigma_cps[$j][0], $spec_cps[$j][1], $sigma_cps[$j][1]; }

Prints:

1.00000 5.00000e+000 15.00000 6.00000e+000 16.00000 2.00000 7.00000e+000 17.00000 8.00000e+000 18.00000 3.00000 9.00000e+000 19.00000 1.00000e+001 110.00000

DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: print arrays a(i), b(i,j) c(i,j)
by pattobw (Novice) on Feb 13, 2006 at 17:25 UTC
    Thanks Grandfather, your code is close to what I want to do:
    for my $j (0 .. $#energy_bin) { printf "%.5f %.5e %.5f %.5e %.5f\n", $energy_bin[$j], $spec_cps[$j][0], $sigma_cps[$j][0], $spec_cps[$j][1], $sigma_cps[$j][1]; }
    How would I put a loop for the other array index( ie: 0, 1, 2,...,
    and also make the printf format entries flexible for
    different value of the array index ( ie 10 cols vice 4, etc)?

      The following probably gets close to what you want to do. Note $#{$spec_cps[$j]} is used to get the index of the last item in the array referenced by $spec_cps[$j]. See Re^2: print arrays a(i), b(i,j) c(i,j) if you don't understand what I mean by that.

      use strict; use warnings; my @energy_bin = (1, 2, 3); my @spec_cps = ([5, 6], [7, 8], [9, 10]); my @sigma_cps = ([15, 16], [17, 18], [19, 110]); for my $j (0 .. $#energy_bin) { printf "%.5f", $energy_bin[$j]; for my $i (0 .. $#{$spec_cps[$j]}) { printf " %.5e %.5f", $spec_cps[$j][$i], $sigma_cps[$j][$i]; } print "\n"; }

      Prints:

      1.00000 5.00000e+000 15.00000 6.00000e+000 16.00000 2.00000 7.00000e+000 17.00000 8.00000e+000 18.00000 3.00000 9.00000e+000 19.00000 1.00000e+001 110.00000

      DWIM is Perl's answer to Gödel