Поиск CPAN для number range
дает мне это, которое очень похоже на то, что вы ищете:
Количество :: Диапазон
Вот пример того, как вы можете использовать модуль в вашей функции aw_parse
:
$in =~ s/\s+//g; # remove spaces
$in =~ s/(?<=\d)-/../g; # replace - with ..
my $range = new Number::Range($in); # create the range
my @array = sort { $a <=> $b } $range->range; # get an array of numbers
Применительно к образцу из вопроса:
Input (max 20): 2, 5-7, 9, 3, 11-14
2 3 5 6 7 9 11 12 13 14