|
sub name { return NAME; }
has 'delimiter' => (
is => 'ro' ,
isa => 'Str' ,
required => 1
);
has 'feed_limit' => (
is => 'ro' ,
);
has 'values' => (
is => 'ro' ,
isa => 'Str' ,
required => 1
);
has 'skipfirst' => (
is => 'ro' ,
isa => 'Num' ,
default => 0
);
sub parse {
my $self = shift ;
my $fh = shift ;
my $broker = shift ;
my $split = $self ->delimiter;
my @cols = split (/\s*,\s*/, $self -> values );
my $start = 0;
my $end = undef ;
if ( my $l = $self ->feed_limit){
if ( ref ( $l ) eq 'ARRAY' ){
( $start , $end ) = @{ $l };
} else {
( $start , $end ) = (0, $l -1);
}
}
$start += 1 if ( $self ->skipfirst);
my $lineno = -1;
while (! $fh -> eof ()) {
$lineno ++;
last if ( defined ( $end ) && $lineno > $end );
my $line = $fh ->getline();
next if $lineno < $start ;
next if ( $line =~ /^(
$line =~ s/[\r\n]+$//;
my @m = split ( $split , $line );
my $h = {};
foreach (0 ... $#cols ){
$h ->{ $cols [ $_ ]} = $m [ $_ ];
}
$broker ->emit( $h );
}
return ( undef );
}
__PACKAGE__->meta->make_immutable;
1;
|