in reply to Grabbing slices

The following seems to do what you want. Not sure if this is the most efficient approach though.

use strict; use warnings; use Data::Dumper; my (@array, $iIndex, $thisValue, $lastValue, @out); @array = qw(x x y z z z); @out = (0); $lastValue = $array[0]; for ($iIndex = 0; $iIndex <= $#array; $iIndex++) { $thisValue = $array[$iIndex]; if ($thisValue ne $lastValue) { push @out, ($iIndex - 1, $iIndex); $lastValue = $thisValue; } } push @out, $#array; print Dumper(\@out);

Regards,
Dom.

Replies are listed 'Best First'.
Re: Re: Grabbing slices
by dbush (Deacon) on May 03, 2003 at 19:20 UTC

    Actually, now I come to look at the output from dumper:

    $VAR1 = [ 0, '1', 2, '2', 3, 5 ];

    I'm wondering about the significance of some of the numbers coming out in quotes. At first I wondered if it had something to do with the brackets on the push line.

    Can anyone enlighten me?

    Cheers,
    Dom.

      It is a bug in the XS version of Data::Dumper before v2.11. To see your version id:

      perl -MData::Dumper -wle 'print $Data::Dumper::VERSION'
      2.102 is in the base code for Perl 5.6.1, and has the bug.
      2.12 is in the base code for Perl 5.8.0, and does not have the bug.

      My testing script:

      perl -MData::Dumper -wle '$Data::Dumper::Indent=0;print Dumper [ map { + ($_, $_+0) } 0..3 ]'
      Good output:
      $VAR1 = [0,0,1,1,2,2,3,3];
      Buggy output:
      $VAR1 = [0,'0',1,'1',2,'2',3,'3'];

      If you set Useqq, as a side-effect, it will force Data::Dumper to use the pure-Perl forms of its code.
      This is slower, but will work around the bug in older versions.

      $Data::Dumper::Useqq = 1;