Data-Rlist
view release on metacpan or search on metacpan
Rlist.pm.html view on Meta::CPAN
<pre>
$object = new Data::Rlist(-input => $thingfile);
$thing = eval { $object->read };</pre>
</dd>
<dd>
<pre>
unless (defined $thing) {
if ($object->errors) {
print STDERR "$thingfile has syntax errors"
} else {
print STDERR "$thingfile not found, is locked or empty"
}
} else {
# Can use $thing
.
.
}</pre>
</dd>
</li>
<dt><strong><a name="item_read_csv"><em>read_csv(INPUT[, OPTIONS, FILTER, FILTER-ARGS])</em></a></strong>
Rlist.pm.html view on Meta::CPAN
<h2><a name="debugging_data">Debugging Data</a></h2>
<p>To reduce recursive data structures (into true hierachies) set <em>$Data::Rlist::MaxDepth</em> to an
integer above 0. It then defines the depth under which <em><a href="#item_compile">compile</a></em> shall not venture deeper.
The compilation of Perl data (into Rlist text) then continues, but on <em>STDERR</em> a message like the
following is printed:</p>
<pre>
ERROR: compile2() broken in deep ARRAY(0x101aaeec) (depth = 101, max-depth = 100)</pre>
<p>This message will also be repeated as comment when the compiled Rlist is written to a file.
Furthermore <em>$Data::Rlist::Broken</em> is incremented by one. While the compilation continues,
effectively any attempt to venture deeper as suggested by <em>$Data::Rlist::MaxDepth</em> will be
blocked.</p>
<p>See <em><a href="#item_broken">broken</a></em>.</p>
<p>
</p>
<h2><a name="speeding_up_compilation__explicit_quoting_">Speeding up Compilation (Explicit Quoting)</a></h2>
<p>Much work has been spent to optimize <em>Data::Rlist</em> for speed. Still it is implemented in pure
Perl (no XS). A rough estimation for Perl 5.8 is ``each MB takes one second per GHz''. For example,
when the resulting Rlist file has a size of 13 MB, compiling it from a Perl script on a 3-GHz-PC
requires about 5-7 seconds. Compiling the same data under Solaris, on a sparcv9 processor
operating at 750 MHz, takes about 18-22 seconds.</p>
<p>The process of compiling can be speed up by calling <em><a href="#item_quote7">quote7</a></em> explicitly on scalars. That is,
lib/Data/Rlist.pm view on Meta::CPAN
return $default;
}
sub has($$) {
my($self, $attr) = @_;
$attr = '-'.$attr unless $attr =~ /^-/;
exists $self->{$attr};
}
sub dock($\&) {
carp "package Data::Rlist locked" if $Locked++; # TODO: use critical sections and atomic increment
my ($self, $block) = @_;
local $MaxDepth = $self->get(-MaxDepth=>) if $self->has(-MaxDepth=>);
local $SafeCppMode = $self->get(-SafeCppMode=>) if $self->has(-SafeCppMode=>);
local $EchoStderr = $self->get(-EchoStderr=>) if $self->has(-EchoStderr=>);
local $RoundScientific = $self->get(-RoundScientific=>) if $self->has(-RoundScientific=>);
local $DefaultCsvDelimiter = $self->get(-DefaultCsvDelimiter=>) if $self->has(-DefaultCsvDelimiter=>);
local $DefaultConfDelimiter = $self->get(-DefaultConfDelimiter=>) if $self->has(-DefaultConfDelimiter=>);
local $DefaultConfSeparator = $self->get(-DefaultConfSeparator=>) if $self->has(-DefaultConfSeparator=>);
local $DefaultNanoscriptToken = $self->get(-DefaultNanoscriptToken=>) if $self->has(-DefaultNanoscriptToken=>);
local $DEBUG = $self->get(-DEBUG=>) if $self->has(-DEBUG=>);
lib/Data/Rlist.pm view on Meta::CPAN
This code fragment traps the F<die> exception, so that F<eval> returns F<undef> or the result of
calling F<hostname>. The following example uses F<eval> to trap exceptions thrown by F<read>:
$object = new Data::Rlist(-input => $thingfile);
$thing = eval { $object->read };
unless (defined $thing) {
if ($object->errors) {
print STDERR "$thingfile has syntax errors"
} else {
print STDERR "$thingfile not found, is locked or empty"
}
} else {
# Can use $thing
.
.
}
=item F<read_csv(INPUT[, OPTIONS, FILTER, FILTER-ARGS])>
=item F<read_conf(INPUT[, OPTIONS, FILTER, FILTER-ARGS])>
lib/Data/Rlist.pm view on Meta::CPAN
=cut
sub open_input($;$$)
{
my($input, $fcmd, $fcmdargs) = @_;
my($rls, $filename);
my $rtp = reftype $input;
carp "\n${\((caller(0))[3])}: filename or scalar-ref required as INPUT" if defined $rtp && $rtp ne 'SCALAR';
carp "\n${\((caller(0))[3])}: package locked" if $Readstruct;
$Readstruct = $ReadFh = undef;
local $| = 1 if $DEBUG;
if (defined $input) {
$Readstruct = { };
unless (ref $input) {
$Readstruct->{filename} = $input;
unless ($fcmd) { # the file is read unfiltered
unless (open($Readstruct->{fh}, "<$input") && flock($Readstruct->{fh}, 1)) {
$Readstruct = undef;
lib/Data/Rlist.pm view on Meta::CPAN
To reduce recursive data structures (into true hierachies) set F<$Data::Rlist::MaxDepth> to an
integer above 0. It then defines the depth under which F<L</compile>> shall not venture deeper.
The compilation of Perl data (into Rlist text) then continues, but on F<STDERR> a message like the
following is printed:
ERROR: compile2() broken in deep ARRAY(0x101aaeec) (depth = 101, max-depth = 100)
This message will also be repeated as comment when the compiled Rlist is written to a file.
Furthermore F<$Data::Rlist::Broken> is incremented by one. While the compilation continues,
effectively any attempt to venture deeper as suggested by F<$Data::Rlist::MaxDepth> will be
blocked.
See F<L</broken>>.
=head2 Speeding up Compilation (Explicit Quoting)
Much work has been spent to optimize F<Data::Rlist> for speed. Still it is implemented in pure
Perl (no XS). A rough estimation for Perl 5.8 is "each MB takes one second per GHz". For example,
when the resulting Rlist file has a size of 13 MB, compiling it from a Perl script on a 3-GHz-PC
requires about 5-7 seconds. Compiling the same data under Solaris, on a sparcv9 processor
operating at 750 MHz, takes about 18-22 seconds.
( run in 0.754 second using v1.01-cache-2.11-cpan-49f99fa48dc )