my $obj = new Parser(); $obj->parse; print "$_\n" for @{$$obj{_data}}; #### package Parser; our $ref; my $grammar = q{ { my $data = $ref } start : ..... ruleX : blah hmm { push @{$$data{_data}}, $item[2] } } sub parse { my $self = shift; $ref = $self{_data}; $parser = new Parse::RecDescent; $parser->start($$self{str}) ... }