$string = 'bla bla [[en:English]][[de:German]][[ga:Irish]] bla bla'; %matches = $string =~ m/\[ \[ ( en|de|ga ) : (.+?) \] \]/gx; $var = { lang => [ keys %matches ] }; pp $var; { lang => ["en", "ga", "de"] } #### my $string = 'bla bla [[en:English]][[de:German]][[ga:Irish]] bla bla'; my $var = { lang => [ $string =~ m/\[ \[ ( en|de|ga ) : .+? \] \]/gx ] }; pp $var; { lang => ["en", "de", "ga"] }