File Coverage

blib/lib/Gwybodaeth/Parsers/CSV.pm
Criterion Covered Total %
statement 26 26 100.0
branch 3 4 75.0
condition n/a
subroutine 6 6 100.0
pod 2 2 100.0
total 37 38 97.3


line stmt bran cond sub pod time code
1             #!/usr/bin/env perl
2              
3 2     2   153814 use warnings;
  2         5  
  2         54  
4 2     2   10 use strict;
  2         4  
  2         92  
5              
6             package Gwybodaeth::Parsers::CSV;
7              
8             =head1 NAME
9              
10             Parsers::CSV - Parses CSV into a data structure.
11              
12             =head1 SYNOPSIS
13              
14             use CSV;
15              
16             my $csv = CSV->new();
17              
18             $csv->parse(@data);
19              
20             =head1 DESCRIPTION
21              
22             This module parses CSV documents into a data structure. This structure is an array of arrays.
23              
24             =over
25              
26             =cut
27              
28 2     2   12 use Carp qw(croak);
  2         11  
  2         164  
29 2     2   2298 use Text::CSV;
  2         31709  
  2         13  
30              
31             =item new()
32              
33             Returns an instance of the Parsers::CSV class.
34              
35             =cut
36              
37             sub new {
38 2     2 1 1205 my $class = shift;
39 2         12 my $self = { quote_char => '"',
40             sep_char => ',' };
41 2         9 bless $self, $class;
42 2         8 return $self;
43             }
44              
45             =item parse(@data)
46              
47             Takes a CSV as an array of lines and outputs an array reference
48             to an array of arrays.
49              
50             =cut
51              
52             sub parse {
53 7     7 1 1355 my($self, @data) = @_;
54              
55 7 50       27 ref($self) or croak "instance variable needed";
56              
57 7         10 my @rows;
58             my $i;
59 7         62 my $csv = Text::CSV->new( {binary => 1,
60             quote_char => $self->{quote_char},
61             sep_char => $self->{sep_char}
62             } );
63            
64 7         811 for my $row (@data) {
65 11 100       37 if ($csv->parse($row)) {
66 10         2672 my @fields = $csv->fields();
67 10         91 $rows[$i++] = \@fields;
68             } else {
69 1         381 croak "unable to parse row: " . $csv->error_input . "\n".
70             "Are you sure this is CSV data?";
71             }
72             }
73              
74 6         121 return \@rows;
75             }
76             1;
77             __END__