|
NAMEData::Record - "split" on steroidsVERSIONVersion 0.02SYNOPSISuse Regexp::Common; use Data::Record; my $record = Data::Record->new({ split => "\n", unless => $RE{quoted}, }); my @data = $record->records($data); DESCRIPTIONSometimes 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. METHODSnewCommon 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.
splitmy $split = $record->split; $record->split($on_value); Getter/setter for split value. May be a regular expression or a scalar value. unlessmy $unless = $self->unless; $self->unless($is_value); Getter/setter for unless value. May be a regular expression or a scalar value. chompmy $chomp = $record->chomp; $record->chomp(0); Getter/setter for boolean chomp value. limitmy $limit = $record->limit; $record->limit(3); Getter/setter for integer limit value. trimmy $trim = $record->trim; $record->trim(1); Getter/setter for boolean limit value. Setting this value will cause any previous "limit" value to be overwritten. tokenmy $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. recordsmy @records = $record->records($data); Returns @records for $data based upon current split criteria. BUGSIt'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.CAVEATSThis module must read all of the data at once. This can make it slow for larger data sets.AUTHORCurtis "Ovid" Poe, "<ovid [at] cpan [dot] org>"BUGSPlease 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.ACKNOWLEDGEMENTSThanks 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 & LICENSECopyright 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.
Visit the GSP FreeBSD Man Page Interface. |