The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Mail::Karmasphere::Parser::Score::Base;

use strict;
use warnings;
use base 'Mail::Karmasphere::Parser::Base';
use Text::CSV;

sub new {
	my $class = shift;
	my $self = ($#_ == 0) ? { %{ (shift) } } : { @_ };
	my $type = $self->{Type};
	unless ($type) {
		$type = lc $class;
		$type =~ s/.*:://;
	}
	$self->{Streams} = [ $type ] unless $self->{Streams};
	$self = $class->SUPER::new($self);
	return $self;
}

sub _value {
	my $text = shift;
	return 1000 unless defined $text;
	return 1000 unless $text =~ /\S/;
	return 0+ $text;
}

sub _parse {
	my $self = shift;
	LINE: for (;;) {
		my $line = $self->fh->getline;
		return undef unless $line;
		next if $line =~ /^#/;
		next unless $line =~ /\S/;
		chomp($line);
		my $csv = new Text::CSV();
		unless ($csv->parse($line)) {
			warn "Failed to parse CSV line $line";
			next LINE;
		}
		my @fields = $csv->fields();
		# guess_identity_type does validation, and
		# the wrapper checks that the record type matches
		# the stream type, so no further validation is required
		# here. XXX It would be faster to fix the type here from
		# $type, and do a single regex to check it.
		return new Mail::Karmasphere::Parser::Record(
			s	=> 0,
			i	=> $fields[0],
			v	=> _value($fields[1]),
			d	=> $fields[2],
				);
	}
}

1;