Curtis "Ovid" Poe > Data-Record > Data::Record

Download:
Data-Record-0.02.tar.gz

Dependencies

Annotate this POD

CPAN RT

Open  0
View/Report Bugs
Module Version: 0.02   Source  

NAME ^

Data::Record - "split" on steroids

VERSION ^

Version 0.02

SYNOPSIS ^

  use Regexp::Common;
  use Data::Record;
  my $record = Data::Record->new({
    split  => "\n",
    unless => $RE{quoted},
  });
  my @data = $record->records($data);

DESCRIPTION ^

Sometimes we need data split into records and a simple split on the input record separator ($/) or some other value fails because the values we're splitting on may allowed in other parts of the data. Perhaps they're quoted. Perhaps they're embedded in other data which should not be split up.

This module allows you to specify what you wish to split the data on, but also speficy an "unless" regular expression. If the text in question matches the "unless" regex, it will not be split there. This allows us to do things like split on newlines unless newlines are embedded in quotes.

METHODS ^

new

Common usage:

 my $record = Data::Record->new({
    split  => qr/$split/,
    unless => qr/$unless/,
 });

Advanced usage:

 my $record = Data::Record->new({
    split  => qr/$split/,
    unless => qr/$unless/,  # optional
    token  => $token,       # optional
    chomp  => 0,            # optional
    limit  => $limit,       # optional (do not use with trim)
    trim   => 1,            # optional (do not use with limit)
    fields => {
        split  => ',',
        unless => $RE{quoted}, # from Regexp::Common
    }
 });

The constructor takes a hashref of key/value pairs to set the behavior of data records to be created.

split

  my $split = $record->split;
  $record->split($on_value);

Getter/setter for split value. May be a regular expression or a scalar value.

unless

 my $unless = $self->unless;
 $self->unless($is_value);

Getter/setter for unless value. May be a regular expression or a scalar value.

chomp

  my $chomp = $record->chomp;
  $record->chomp(0);

Getter/setter for boolean chomp value.

limit

  my $limit = $record->limit;
  $record->limit(3);

Getter/setter for integer limit value.

trim

  my $trim = $record->trim;
  $record->trim(1);

Getter/setter for boolean limit value. Setting this value will cause any previous limit value to be overwritten.

token

  my $token = $record->token;
  $record->token($string_not_found_in_text);

Getter/setter for token value. Token must be a string that does not match the split value and is not found in the text.

You can return the current token value if you have set it in your code. If you rely on this module to create a token (this is the normal behavior), it is not available via this method until records is called.

Setting the token to an undefined value causes Data::Record to try and find a token itself.

If the token matches the split value, this method will croak when you attempt to set the token.

If the token is found in the data, the records method will croak when it is called.

records

  my @records = $record->records($data);

Returns @records for $data based upon current split criteria.

BUGS ^

It's possible to get erroneous results if the split value is /\d+/. I've tried to work around this. Please let me know if there is a problem.

CAVEATS ^

This module must read all of the data at once. This can make it slow for larger data sets.

AUTHOR ^

Curtis "Ovid" Poe, <ovid [at] cpan [dot] org>

BUGS ^

Please report any bugs or feature requests to bug-data-record@rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data-Record. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

ACKNOWLEDGEMENTS ^

Thanks to the Monks for inspiration from http://perlmonks.org/index.pl?node_id=492002.

0.02 Thanks to Smylers and Stefano Rodighiero for catching POD errors.

COPYRIGHT & LICENSE ^

Copyright 2005 Curtis "Ovid" Poe, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: