$return

何もしなかった場合、「$item[$#item]」となるのが仕様だったらしい

#!/usr/bin/env perl

use strict;
use Parse::RecDescent;

my $grammar =
q{
    inputs : ab { print "$item[1]\n"; }

    ab     : 'a' 'b'
};

my $parse = new Parse::RecDescent ($grammar);

while (<>)
{
    defined $parse->inputs($_) or print "Bad text!\n";
}

で、

ab
b
#!/usr/bin/env perl

use strict;
use Parse::RecDescent;
use Data::Dumper;

my $grammar =
q{
    inputs : ab { print Data::Dumper::Dumper($item[1]); }

    ab     : 'a' 'b' { $return = ['a', 'b']; }
};

my $parse = new Parse::RecDescent ($grammar);

while (<>)
{
    defined $parse->inputs($_) or print "Bad text!\n";
}

で、

ab
$VAR1 = [
          'a',
          'b'
        ];


「$return」に入れなくても大丈夫な気もするのだが?そんなことはない?

#!/usr/bin/env perl

use strict;
use Parse::RecDescent;
use Data::Dumper;

my $grammar =
q{
    inputs : ab { print Data::Dumper::Dumper($item[1]); }

    ab     : 'a' 'b' { ['a', 'b']; }
};

my $parse = new Parse::RecDescent ($grammar);

while (<>)
{
    defined $parse->inputs($_) or print "Bad text!\n";
}

で、

ab
$VAR1 = [
          'a',
          'b'
        ];