#!/usr/bin/perl -l my $s = '1-5,6a-e,7,10-13'; my @a = map{ if (m[ (\d+) ([a-z]?) - (\d+|[a-z]) ]x) { if ($2) { map{ $1 . $_ } $2 .. $3; } else { ( $1 .. $3 ); } } else { $_; } } split ',', $s; print join ' ', @a;