use strict; use warnings; while (){ chomp; next unless my $i = (split/\t/,$_)[2]; my $f = $_; $i =~ s/ //g; (my $j = $i) =~ s/G(.+)/Galpha-$1/; my @values = ($j =~ /(Galpha-[it])/ ? map{$1.$_}1..3 : ($j) ); for my $val (@values) { my $k = $f; $k =~ s/$i/$val/g; print "$k\n"; } } __DATA__ biologist xargon Gi question perl monks G11 answer? # prints biologist xargon Galpha-i1 question biologist xargon Galpha-i2 question biologist xargon Galpha-i3 question perl monks Galpha-11 answer?