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. Note, however, that in this implementation the bipolar is designed for only full one cycle. (Will need to change the range operator from a a m?? regex to a m// regex if you need infinite cycles.)
AUTHOR
Ioannis Tambouras <ioannis@cpan.org>
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.