use strict; use Data::Dumper; my %hash=(); my $str="Test Tester Testing [Feb 18: 28_10_10] Test"; my $reg='(\w+) (\w+) (\w+) \[([\w\W]+)\] (.*?)'; my ($fname, $mname, $lname, $date) = $str =~ /$reg/is; if (defined ($date)) { $hash{fname}=$fname; $hash{mname}=$mname; $hash{lname}=$lname; $hash{date} =$date; } print Dumper \%hash; __END__ $VAR1 = { 'date' => 'Feb 18: 28_10_10', 'lname' => 'Testing', 'mname' => 'Tester', 'fname' => 'Test' }; #### 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' };