in reply to printing 20 characters in a line.

my $nl = 1; for my $i (0..$#array) { if (!$nl && $i%20==0) { print("\n$array[$i]"); $nl = 1; } else { print(" $array[$i]"); $nl = 0; } } print("\n") if !$nl;

Replies are listed 'Best First'.
Re^2: printing 20 characters in a line.
by heidi (Sexton) on Nov 14, 2008 at 05:11 UTC
    I got it... how is this one???
    #!/usr/bin/perl my $str="30 30 36 33 36 36 36 33 36 34 26 24 21 17 17 23 27 27 31 31 3 +4 33 33 33 36 36 37 38 38 38 38 38 35 40 34 34 34 31 37 36 37 37 40 4 +0 49 40 40 40 40 40 40 40 40 33 30 30 30 30 30 42 45 45 45 45 45 49 4 +2 42"; @s=split(/ /,$str); for($i=1;$i<=scalar(@s);$i++) { print "$s[$i] "; if($i%20==0) { print "\n"; } } print "\n";
    simple uh.. y didnt i think abt it when i tried first :)
      • You skip the first element.
      • You print an extra element (undef) at the end. use warnings; would have caught that.
      • The use of scalar there is unnecessary.
      • You really should use use strict;.
      • for (my $i=0; $i<@s; $i++)
        is a rather complex way of saying
        for my $i (0..$#s)

      I had a bug in mine too (leading space)

      #!/usr/bin/perl use strict; use warnings; my $str = "30 30 36 33 36 36 36 33 36 34" ." 26 24 21 17 17 23 27 27 31 31" ." 34 33 33 33 36 36 37 38 38 38" ." 38 38 35 40 34 34 34 31 37 36" ." 37 37 40 40 49 40 40 40 40 40" ." 40 40 40 33 30 30 30 30 30 42" ." 45 45 45 45 45 49 42 42"; my @str = split(/ /, $str); my $nl = 1; for my $i (0..$#str) { if ($i == 0 ) { $nl = 0; } elsif ($i % 20 == 0) { $nl = 1; print("\n"); } else { $nl = 0; print(" "); } print($str[$i]); } print("\n") if !$nl;

      Tested.