Text-DSV
view release on metacpan or search on metacpan
package Text::DSV;
use strict;
use warnings;
our $VERSION = 0.11;
# Constructor.
sub new {
my ($class, @params) = @_;
# Create object.
my $self = bless {}, $class;
# Object.
return $self;
}
# Parse all data.
sub parse {
my ($self, $data) = @_;
my @data_lines;
foreach my $line (split m/\n/ms, $data) {
if ($line =~ m/^\s*$/ms || $line =~ m/^\s*#/) {
next;
}
push @data_lines, [$self->parse_line($line)];
}
return @data_lines;
}
# Parse one line.
sub parse_line {
my ($self, $line) = @_;
my @data_line = split m/(?<!\\):/ms, $line;
foreach my $data (@data_line) {
$data =~ s/\\:/:/gms;
$data =~ s/\\n/\n/gms;
}
return @data_line;
}
# Serialize all data.
sub serialize {
my ($self, @data_lines) = @_;
my $ret;
foreach my $data_line_ar (@data_lines) {
$ret .= $self->serialize_line(@{$data_line_ar})."\n";
}
return $ret;
}
# Serialize one line.
sub serialize_line {
my ($self, @data_line) = @_;
my @escape_data = @data_line;
foreach my $data (@escape_data) {
$data =~ s/:/\\:/gms;
$data =~ s/\n/\\n/gms;
}
return join ':', @escape_data;
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
Text::DSV - DSV parser and serializer.
=head1 SYNOPSIS
use Text::DSV;
my $obj = Text::DSV->new;
my @data_lines = $obj->parse($data);
my @data_line = $obj->parse_line($line);
my $string = $obj->serialize(@data_lines);
my $line_string = $obj->serialize_line(@data_line);
=head1 METHODS
=head2 C<new>
my $obj = Text::DSV->new;
Constructor.
Returns instance of object.
( run in 1.166 second using v1.01-cache-2.11-cpan-71847e10f99 )