use Parse::RecDescent; use Data::Dumper; my $Hash = {}; my $grammar = q{ test: expr(s) /^\Z/ expr: name '=' /\d+/ { main::AddToHash($item{name}, $item[-1]); } name: /\w+/ }; my $parser = new Parse::RecDescent ($grammar); $parser->test ("x = 1\ny = 2\nz = 3"); sub AddToHash { my $szVar = shift; $Hash->{$szVar} = shift; } print Dumper ($Hash);