my $string = 'bla bla [[en:English]][[de:German]][[ga:Irish]] bla bla'; if (my @matches = ($string =~ m/\[\[(?en|de|ga):(.+?)\]\]/g)) { say 'matches'; say 'matches: ', Dumper(\@matches); say 'minus : ', Dumper(\%-); say 'plus : ', Dumper(\%+); }