package Data::All::Format::Fixed; # $Id: Fixed.pm,v 1.1.1.1 2005/05/10 23:56:20 dmandelbaum Exp $ use strict; use warnings; use Data::Dumper; use Data::All::Format::Base; use vars qw(@EXPORT $VERSION); @EXPORT = qw(); $VERSION = 0.11; use base 'Exporter'; our @EXPORT = qw(new internal attribute populate error init); attribute 'lengths' => []; attribute 'break' => "\n"; # currently useless b/c it's hardcoded below attribute 'type'; sub expand($); sub contract(\@); # TODO: Forward look to defined lengths if they are blank sub expand($) { my $self = shift; my $record = shift; my $template = $self->pack_template(); return unpack($template, $record); } sub contract(\@) { my $self = shift; my $values = shift; my $template = $self->pack_template(); # NOTE: Line break is hardcoded to \n return pack($template, @{ $values })."\n"; } sub pack_template() { my $self = shift; my @template; foreach my $e (@{ $self->lengths }) { push(@template, "A$e"); } return !wantarray ? join(' ', @template) : @template; } 1;