while () { my ($prefix, $rest) = split; foreach my $env (split /;/, $rest) { my ($env_name, $machine) = split /:/, $env; print "$prefix $env_name $machine\n"; } } __DATA__ Docs Legal:Legal100-106;QA:QAServer5 Legal Legal:Legal15;QA:QAServer5 Funding QA:Alpha,Beta;PROD:PROD1-5 #### Docs Legal Legal100-106 Docs QA QAServer5 Legal Legal Legal15 Legal QA QAServer5 Funding QA Alpha,Beta Funding PROD PROD1-5 #### while () { my ($prefix, $rest) = split; foreach my $env (split /;/, $rest) { my ($env_name, $machine) = split /:/, $env; if ($machine =~ /^(\D+)(\d+)-(\d+)$/) { my $root = $1; foreach $num ($2..$3) { print "$prefix $env_name $root$num\n"; } } else { print "$prefix $env_name $machine\n"; } } } __DATA__ Docs Legal:Legal100-106;QA:QAServer5 Legal Legal:Legal15;QA:QAServer5 Funding QA:Alpha,Beta;PROD:PROD1-5