$string = "bla bla bla [[en:English]][[de:German]][[ga:Irish]] bla bla bla"; #### qw(en de ga); #### @matches = ( $string = m/\[\[(en|de|ga):.+?]\]/g ); #### @matches = ( $string = m/\[\[(en|de|ga):(.+?)]\]/g ); #### 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(\%+); } #### matches matches: $VAR1 = [ 'en', 'English', 'de', 'German', 'ga', 'Irish' ]; minus : $VAR1 = { 'lang' => [ 'ga' ] }; plus : $VAR1 = { 'lang' => 'ga' }; #### $VAR1 = { 'lang' => [ 'en', 'de', 'ga' ] };