use strict; use warnings FATAL => 'all'; #### sub get_numbers_from_ranges { my $spec = shift; my %numbers; foreach my $x ( split ',', $spec ) { if ( $x =~ /(\d+)-(\d+)/ ) { $numbers{$_} = undef for $1 .. $2; } else { $numbers{$x} = undef; } } return map { $_ - 1 } sort { $a <=> $b } keys %numbers; }