use Parse::RecDescent; use Data::Dump::Streamer; my $grammar = q{ test: expr(s) /^\Z/ {return $item{"expr(s)"};} expr: name '=' /\d+/ { $return = {$item{name} => $item[-1]}; 1; } name: /\w+/ }; my $parser = new Parse::RecDescent ($grammar); Dump ($parser->test ("x = 1\ny = 2\nz = 3"));