The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use B::Disassembler qw(disassemble_fh);
use FileHandle;

my $fh;
if (@ARGV == 0) {
    $fh = \*STDIN;
} elsif (@ARGV == 1) {
    $fh = new FileHandle "<$ARGV[0]";
} else {
    die "Usage: disassemble [filename]\n";
}

sub print_insn {
    my ($insn, $arg) = @_;
    if (defined($arg)) {
	printf "%s %s\n", $insn, $arg;
    } else {
	print $insn, "\n";
    }
}

disassemble_fh($fh, \&print_insn);