The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use Encode;
use Parse::AFP;
use File::Path 'rmtree';

die "Usage: $0 input.afp dir\n" unless @ARGV >= 1;

my $input = shift;
my $output = shift || 'dir';

rmtree([ $output ]) if -d $output;

mkdir $output;
my $afp = Parse::AFP->new($input, { lazy => 1 });
$afp->callback_members([qw( BR ER * )]);

sub Parse::AFP::BR::ENCODING () { 'cp500' };

sub BR {
    my $name = substr($_[0]->Data, 0, 8);
    print "Writing to $output/$name.afp\n";
    $afp->set_output_file("$output/$name.afp");
    $_[0]->remove;
}

sub ER { $_[0]->remove }

sub __ {
    $_[0]->write; $_[0]->remove;
}