CLI for Compiler::Lexer

I'm using this compiler-lexer script for developing utils using Compiler::Lexer.

#!/usr/bin/env perl
use strict;
use warnings;
use Compiler::Lexer;
use Getopt::Long;

my $eval;
my $p = Getopt::Long::Parser->new(
    config => \[qw(posix\_default no\_ignore\_case auto\_help)\]
);
$p->getoptions(
    'e=s'       => \\$eval,
);

if (defined $eval) {
    dump\_tokens('-e', $eval);
} elsif (@ARGV > 0) {
    for my $fname (@ARGV) {
        printf "===> %s <===\\n", $fname if @ARGV > 1;
        my $src = slurp($fname);
        dump\_tokens($fname, $src);
    }
} else {
    my $src = join('', <>);
    dump\_tokens('-', $src);
}

sub dump\_tokens {
    my ($fname, $src) = @\_;
    my $lexer = Compiler::Lexer->new($fname);
    my $tokens = $lexer->tokenize($src);
    for (@$$tokens) {
        printf "%-20s - %s\\n", $\_->name, $\_->data;
    }
}

sub slurp {
    my $fname = shift;
    open my $fh, '<', $fname
        or Carp::croak("Can't open '$fname' for reading: '$!'");
    do { local $/; <$fh> }
}