in reply to rearranging text

How about this? ;-)
use strict; my $prev; while (<DATA>) { next if /^\s*$/; chomp (my ($curr, $val) = split /,\s+/); print $prev ? "\n" : "", $prev = $curr if $curr ne $prev; print ", $val"; } print "\n"; __DATA__ a, 1 aa, 3 aa, 5 aa, 8 b, 2 b, 3 bb, 5

Replies are listed 'Best First'.
Re: Re: rearranging text
by kiat (Vicar) on Dec 02, 2003 at 08:34 UTC
    Hey Roger,

    Can you enlighten on the purpose of '\s+' in the split expression?

      \s means match a single space, \s+ means match one or more spaces.

      In the example below:
      use strict; use Data::Dumper; my $string = 'a, 1, 2, 3'; my @split_comma = split /,/, $string; print "\@split_comma =>", Dumper(\@split_comma); my @split_comma_space = split /,\s+/, $string; print "\@split_comma_space =>", Dumper(\@split_comma_space);
      Notice in the output -
      @split_comma =>$VAR1 = [ 'a', ' 1', ' 2', ' 3' ]; @split_comma_space =>$VAR1 = [ 'a', '1', '2', '3' ];
      Splitting with comma only leaves spaces in array elements, while splitting with comma+space leaves no spaces in array elements.

      What split /,\s+/ does is to set the separator as comma followed by 1 or more spaces, thus eliminating the spaces from the result.