use strict; use warnings; use Test::More; use Number::Range; sub get_numbers_from_ranges { my @ranges = split ',', shift; my @numbers = (); for my $range (@ranges) { my ($start, $end) = split '-', $range; push @numbers, ($end) ? Number::Range->new("$start..$end")->range() : $start; } return \@numbers; } plan tests => 2; is_deeply( get_numbers_from_ranges("2-8,10-13,18"), [ 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 18 ] ); is_deeply( get_numbers_from_ranges("6-9,1-3,11"), [ 6, 7, 8, 9, 1, 2, 3, 11 ]); __END__