#! /usr/bin/perl use strict; use warnings; use PPI; use PPI::Dumper; sub mydump { PPI::Dumper->new(shift)->print() } my $perlcode = << "END_PERLCODE"; package My::L10N::en; use base 'My::L10N'; our %Lexicon = ( 'Some [_1] text' => 'Some [_1] text', ); 1; END_PERLCODE my $doc = PPI::Document->new(\$perlcode); my $lexicon = $doc->find(sub { $_[1]->content eq '%Lexicon' }); $lexicon = $lexicon->[0]; # returns an array ref, but in my case, there's only ever one. my $newmsg = q{'The [_1] is in the [_2]'}; my $newtext = sprintf " %s =>\n %s,\n", $newmsg, $newmsg; my $insert_this = PPI::Document->new(\$newtext); # insert $newtext into %Lexicon? my $stmt = $lexicon->statement(); my $list = $stmt->find('PPI::Structure::List')->[0]; for ($insert_this->tokens()) { $_->remove(); my $rc = $list->add_element($_); } print $doc->serialize();