NAME
PerlIO::via::Skip - PerlIO layer for skipping lines
SYNOPSIS
use PerlIO::via::Skip;
$ENV{ viaSKIP} = { start=>'Fiat', end=>'Reno' };
open my $i ,'<:via(Skip)', 'cars' or die $!;
$ENV{ viaSKIP} = { start => 'Fiat' ,
end => undef ,
maxlines => 10 ,
after => 0 ,
skippatterns => [qw( a e )] ,
skipcomments => 1 ,
skipblanklines => 1 , }
open my $i ,'<:via(Skip)', 'cars' or die $!;
DESCRIPTION
This module implements a PerlIO layer that discards lines from IO streams. By default, all lines are accepted and passed-through as if no filters are present. Input filters discard input lines, and output filters discard output lines; therefore, input lines (that meet user's criteria) are excluded from input, and in a similar manner when specified, output lines are omitted from output.
The code is re-entrant. Multiple filters can be
stacked together without interfering with one another.
These filters were designed for read, write, and append handles
( 'r', 'w', 'a'), but will refuse installation
for read-write mode.
CONFIGURATION
In order to stay re-entrant, configuration is done by setting the global variable $ENV{viaSKIP} . While other PerlIO modules are usually configured via class variables through import(), I choose to sacrifice pretty syntax for data integrity. During the call to open(), or during binmode(), the filter reads its configuration from the $ENV{viaSKIP} variable; since this is a dynamic value, you probably want to change it before the open(), or binmode() if other filters should read a different configurations.
The env variable 'viaSKIP' takes the form of a hash reference.
For example: $ENV{ viaSKIP } = { maxlines=> 10, start=>'apple' };
Where 'maxlines', and 'start' are configuration parameters. Here are all the parameters that allow you to alter the characteristics of the filter:
maxlines limit the maximum number of input (or output) lines
skippatterns skip lines containing one of these patterns
skipblanklines skip whitespace lines
skipcomments skip lines with (leading) comments
start Start a bipolar vibrator. Skip leading lines
until a certain pattern
end End a bipolar vibrator. Skip remaining lines
after a certain pattern.
after Used with a bipolar vibrator. Skip more leading lines,
after you find the start pattern.
EXPORT
None by default.
SEE ALSO
Consult the documentation of the range operator, when in scalar context, for a description on how the bipolar vibrator operates. Please note, however, that in this implementation the bipolar is designed for only full one cycle. (Will need to change ther range operator from a a m?? regex to a m// regex if you need infine cycles.)
AUTHOR
Ioannis Tambouras <ioannis@earthlink.net>
COPYRIGHT AND LICENSE
Copyright (C) 2005 by Ioannis Tambouras
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.4 or, at your option, any later version of Perl 5 you may have available.