Text-DSV

 view release on metacpan or  search on metacpan

DSV.pm  view on Meta::CPAN

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 )