use strict; use Data::Dumper; my %hash; my $str="Test Tester Testing [Feb 18: 28_10_10] TestXXX"; my $reg='(?\w+) (?\w+) (?\w+) \[(?[\w\W]+)\]'; if ($str =~ /$reg/i) { %hash = %+; } print Dumper \%hash; __END__ $VAR1 = { 'lname' => 'Testing', 'date' => 'Feb 18: 28_10_10', 'fname' => 'Test', 'mname' => 'Tester' };