Search code examples
perlnumbersrange

Combine consecutive number range


I would like to combine consecutive number ranges in Perl. Number::Range didn't do what I expected:

use Data::Dumper;
use Number::Range;

say STDERR Dumper(Number::Range->new("1000..5555,5559..9999,5556..5557,5558")->rangeList);

results in:

$VAR1 = [
          5556,
          5558
        ];
$VAR2 = [
          5559,
          9999
        ];
$VAR3 = [
          1000,
          5555
        ];

I expected:

$VAR1 = [
          1000,
          9999
        ];

Solution

  • Apparently, the module represents the data that way internally. It does not seem to create a merged set of arrays as you had hoped.

    If you use the range method in scalar context, you will see a single merged range string:

    use Number::Range;
    my $range = Number::Range->new("1000..5555,5559..9999,5556..5557,5558");
    my $format = $range->range();
    print "$format\n";
    

    Prints:

    1000..9999