my @list = qw(M4568-51 M4568-5 M8954-89 M4568-56 H1234-6 H0012-45); my @big = map { m/^(\w)(\d{4})-(\d{1,2})$/ or die "bad data: $!\n"; [$_, $1, $2, $3]; } @list; print Dumper(@big); ----------------------results (tidied up a bit)------- $VAR1 = ['M4568-51', 'M', '4568', '51']; $VAR2 = ['M4568-5', 'M', '4568', '5' ]; $VAR3 = ['M8954-89', 'M', '8954', '89']; $VAR4 = ['M4568-56', 'M', '4568', '56']; $VAR5 = ['H1234-6', 'H', '1234', '6' ]; $VAR6 = ['H0012-45', 'H', '0012', '45'];