my $grammar = q{ {our @a, @as} ruleX: r1 local_a r2 r3 unlocal_a local_a: { push(@as, \@a); *a{ARRAY} = undef; } unlocal_a: { *a{ARRAY} = pop(@as); } r2: 'keyword' /[a-z]+/ { local *a = \@::{$item[2]}; } r3: 'value' /[a-z]+/ { print @a; } }