in reply to Re^2: For- loop increment not passing to inner block
in thread For- loop increment not passing to inner block

This is bread and butter stuff for Perl and there are many better ways to achieve what you are after. Some are likely to be outside your current comfort zone so sift through the following and see what you like the look of:

use warnings; use strict; while (<DATA>) { chomp; my @numbers = unpack ("(a2)*", $_); print "unpacked: @numbers, "; @numbers = /(..)/g; print "matched: @numbers, "; @numbers = (); push @numbers, substr $_, 0, 2, '' while length $_; print "substr'd: @numbers\n"; } __DATA__ 0912203749 0725284648 0608294149 0622424347 1219303436 1729313449 1015162331

Prints:

unpacked: 09 12 20 37 49, matched: 09 12 20 37 49, substr'd: 09 12 20 +37 49 unpacked: 07 25 28 46 48, matched: 07 25 28 46 48, substr'd: 07 25 28 +46 48 unpacked: 06 08 29 41 49, matched: 06 08 29 41 49, substr'd: 06 08 29 +41 49 unpacked: 06 22 42 43 47, matched: 06 22 42 43 47, substr'd: 06 22 42 +43 47 unpacked: 12 19 30 34 36, matched: 12 19 30 34 36, substr'd: 12 19 30 +34 36 unpacked: 17 29 31 34 49, matched: 17 29 31 34 49, substr'd: 17 29 31 +34 49 unpacked: 10 15 16 23 31, matched: 10 15 16 23 31, substr'd: 10 15 16 +23 31

Perl is environmentally friendly - it saves trees

Replies are listed 'Best First'.
Re^4: For- loop increment not passing to inner block
by Anonymous Monk on Mar 31, 2008 at 05:51 UTC
    I got sidetracked, but finally got back to this and took a look at your ideas, Grandfather. I'm a little disconcerted that your examples are simply reading each row into an array, in different ways. Thanks for the stylistic tips, but I'm not sure how that's relevant to what I'm trying to do (aggregate individual columns for analysis), but I guess I explained it badly. No matter. My stupid error was caught by Count Zero, and my awkward approach works fine for now. I may re-implement it using an array of references (my original idea), but I was aiming for a quick-and-dirty solution (not to worry: it's neither for work or a homework assignment!) :) . Thanks again.

      Sans any context whatsoever, solving the immediate problem of reading and slicing up the file data seemed most helpful.

      With the small amount of additional context you have added a fuller implementation would be:

      use warnings; use strict; my @lines; while (<DATA>) { chomp; push @lines, [unpack ("(a2)*", $_)]; } __DATA__ 0912203749 0725284648 0608294149 0622424347 1219303436 1729313449 1015162331

      which pushes arrays of numbers into an array of lines creating a two dimensional array that you can use in subsequent processing:

      for my $column (0 .. 4) { my @byColumn = map {$_->[$column]} @lines; print "@byColumn\n"; }

      prints:

      09 07 06 06 12 17 10 12 25 08 22 19 29 15 20 28 29 42 30 31 16 37 46 41 43 34 34 23 49 48 49 47 36 49 31

      Perl is environmentally friendly - it saves trees