my $a = 'first second ...other non-\w char groups...'; my @s; while (... not finished string ...) { if ($a =~ /\G(\w+) ?/gc) { push @s, $1; } elsif ... other stuff not important } #### while (... not finished string ...) { if (my @m = ($a =~ /\G(\w+) ?/gc)) { push @s, @m; } elsif ... other stuff not important } #### while (... not finished string ...) { if (my @m = ($a =~ /\G(?:(\w+) ?)+/c)) { push @s, @m; } elsif ... other stuff not important }