#!/usr/bin/perl use strict; my $list = '1-5,6a-e,7,10-13'; my @list = split(/\s*,\s*/, $list); print join("\n", expand($_)), "\n" foreach @list; sub expand { my $str = shift; if ($str =~ /^(\d+)\-(\d+)$/) { return ($1..$2); } elsif ($str =~ /^(\d+)([a-z]+)\-([a-z]+)$/) { return map {$1.$_} ($2..$3); } elsif ($str =~ /^\d+$/) { return $str; } else {f die("wrong format"); } }