my @o; foo(); foo(); foo(); sub foo { my $window = "a b X20 c X5 d e X17 X12"; @::o = (); my @m = ($window =~ m/(X\d+(?{push @::o, pos()}))/g); print join(" ", "Matches:", @m, "\n"); print join(" ", "Offsets:", @::o, "\n\n"); }