in reply to Extracting Ranges from Sequences using hashes

My solution is similar to GrandFather's. If still curious ...

Just use a plain array ...

use warnings; use strict; use Data::Dumper; $Data::Dumper::Indent = 1; my $spec = '1-4,9-11,6,8,3,2'; my @out; my %seen; for my $range ( split ',' , $spec ) { my @range = split '-' , $range; push @out , map { # Subtract for array indexing. my $k = $_ - 1 ; # Uniquify (keep only the numbers unseen). ! $seen{ $k }++ ? $k : (); } scalar @range == 1 ? @range : $range[0] .. $range[1] ; } print Dumper( \@out );