NAME
Text::FixedLengthMultiline - Parse text data formatted in space separated columns optionnaly on multiple lines.
SYNOPSIS
use Text::FixedLengthMultiline;
my $fmt = Text::FixedLengthMultiline->new(format => ['!name' => 10, 1, 'comment~' => 20, 1, 'age' => -2 ]);
# Compute the RegExp that matches the first line
my $first_line_re = $fmt->get_first_line_re();
# Compute the RegExp that matches a continuation line
my $continue_line_re = $fmt->get_continue_line_re();
#234567890 12345678901234567890 12
my $text = <<EOT;
Alice Pretty girl!
Bob Good old uncle Bob,
very old. 92
Charlie Best known as Waldo 14
or Wally. Where's
he?
EOT
my @data;
my $err;
while ($text =~ /^([^\n]+)$/gm) {
my $line = $1;
push @data, {} if $line =~ $first_line_re;
if (($err = $fmt->parse_line($line, $data[$#data])) > 0) {
warn "Parse error at column $err";
}
}
DESCRIPTION
Data can span on multiple lines with text flowing in the same column space.
FORMAT SPECIFICATION
The format is given at the contruction time as an array ref. Modifying the array content after the construction call is done at your own risks.
The array contains the ordered sequence of columns. Each colmun can either be:
A positive integer representing the size of a separating column which is expected to always be filled with spaces.
A string that match this RE: /^(?#mandatory)!?(?#name)[:alnum:]\w*(?:(?#multi)~(?#cont).?)?$/
CONSTRUCTOR
Arguments:
-format
-debug
METHODS
parse_line($;$)
Returns:
TODO
format()
to_sprintf()
See TODO sections in tests bundled with the distribution.
BUGS
This module should have been named Text::FixedLengthMultilineFormat, but the current name is already long enough!
LICENSE
Copyright (c) 2005 Olivier Mengué. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Olivier Mengué, <dolmen@cpan.org>
SEE ALSO
Related modules I found on CPAN:
4 POD Errors
The following errors were encountered while parsing the POD:
- Around line 180:
=cut found outside a pod block. Skipping to next block.
- Around line 189:
=cut found outside a pod block. Skipping to next block.
- Around line 304:
=cut found outside a pod block. Skipping to next block.
- Around line 316:
=cut found outside a pod block. Skipping to next block.