in reply to Re: Regex on array elements during push
in thread Regex on array elements during push

Except $ts->rows is returning an array of array refs. The first element of each referenced array is the one to check for non-spaces, and the second one is apparently the one to modify and push:
push @array, map { $_->[1] =~ s/[\s?,]//g and $_->[1] if $_->[0] =~ /\S/ } $ts->rows;

The PerlMonk tr/// Advocate

Replies are listed 'Best First'.
Re: Re: Re: Regex on array elements during push
by carric (Beadle) on Mar 22, 2004 at 21:05 UTC
    That was the ticket!! Works perfectly. My understanding of "map" is a bit weak, so I need to disect what you did.. AWESOME!! Thank you!
      map is a looping construct, which works a lot like grep, except that map returns all elements, while grep only returns those evaluating to true in the given expression/code block. map is typically used to derive new elements from the given list, while grep is typically used to filter the list according to some criterion. map is also similar to foreach.

      For instance, these are equivalent:

      my @x; foreach ( 0..9 ) { push @x, $_ }; my @x; @x = grep 1, 0..9; my @x; @x = map $_, 0..9;
      When map is used for good, it makes the code easier to read, and the dataflow easier to follow. But it can be abused, just like anything else useful.

      -QM
      --
      Quantum Mechanics: The dreams stuff is made of

      I'm glad it works for you, but I should point out a few flaws in the solution I proposed:
      1. The "and" will prevent the value from being returned, if no substitution occurs.
      2. My replacing of "grep" with an "if" within the map causes blank values to be pushed when the /\S/ doesn't match
      I should have just fixed the problem I saw, instead of trying to be clever.
      push @array, map { $_->[1] =~ s/[\s?,]//g; $_->[1]; } grep { $_->[0] =~ /\S/ } @rows;

      The PerlMonk tr/// Advocate