AnyData2
view release on metacpan or search on metacpan
lib/AnyData2/Format/CSV.pm view on Meta::CPAN
my $af = AnyData2->new(
CSV => {},
"File::Linewise" => { filename => File::Spec->catfile( $test_dir, "simple.csv" ) }
);
constructs a CSV accessor, passes all options down to C<csv_class> beside
C<csv_class>, C<csv_cols> and C<csv_skip_first_row>. C<csv_class> is used
to instantiate the parser and prefers L<Text::CSV_XS> over L<Text::CSV>
by default. When C<csv_skip_first_row> is set to a true value, the first
line of the csv isn't used to guess the names in C<csv_cols>. Specifying
C<csv_cols> always wins over any value of C<csv_skip_first_row>.
=cut
sub new
{
my ( $class, $storage, %options ) = @_;
my $self = $class->SUPER::new($storage);
my $csv_class = delete $options{csv_class};
my $csv_skip_first_row = delete $options{csv_skip_first_row};
defined $csv_class or $csv_class = $class->_guess_suitable_class(qw(Text::CSV_XS Text::CSV));
my $csv = $csv_class->new( {%options} );
$self->{csv} = $csv;
# XXX
$self->cols unless ( defined $csv_skip_first_row and $csv_skip_first_row );
$self;
}
lib/AnyData2/Role/GuessImplementation.pm view on Meta::CPAN
package AnyData2::Role::GuessImplementation;
use 5.008001;
use strict;
use warnings FATAL => 'all';
use base "Exporter";
our @EXPORT = "_guess_suitable_class";
use Carp qw/croak/;
use List::MoreUtils qw(firstval);
use Module::Runtime qw(require_module);
=head1 NAME
AnyData2::Role::GuessImplementation - provides role for guessing suitable implementation
=cut
our $VERSION = '0.002';
=head1 METHODS
=head2 _guess_suitable_class(@suitables)
Finds first suitable class from C<@suitables>. Results are cached.
=cut
my %suitable_classes;
sub _guess_suitable_class
{
my ( $class, @classlist ) = @_;
$suitable_classes{$class} or $suitable_classes{$class} = firstval
{
eval { require_module($_); }
}
@classlist;
$suitable_classes{$class} or croak( "No suitable class out of (" . join( ", ", @classlist ) . ")for $class available" );
$suitable_classes{$class};
}
( run in 0.342 second using v1.01-cache-2.11-cpan-702932259ff )