use strict; sub f { my ($a,$b,$m,$n) = @_; my (@r) = (); my $l = " $a! $b"; while($l =~ s/(.*?)(( \w+){$m,$n} )(.*!.*\2.*)/ $1 =$4/) { push @r, $2; }; @r };