NAME
OutputFilter - Enable post processing of output without fork
SYNOPSIS
use Text::OutputFilter;
my $bucket = "";
tie *STDOUT, "Text::OutputFilter";
tie *HANDLE, "Text::OutputFilter", 4;
tie *HANDLE, "Text::OutputFilter", 4, *STDOUT;
tie *STDOUT, "Text::OutputFilter", 4, \$bucket;
tie *OUTPUT, "Text::OutputFilter", 4, *STDOUT, sub { "$_[0]" };
DESCRIPTION
This interface enables some post-processing on output streams, like adding a left margin.
The tied filehandle is opened unbuffered, but the output is line buffered. The tie
takes three optional arguments:
- Left Margin
-
The left margin must be a positive integer and defaults to
4
spaces. - Output Stream
-
The output stream must be an already open stream, with writing enabled. The default is
*STDOUT
. All input methods on the new stream are disabled. If a reference to a scalar is passed, it will be opened as PerlIO::scalar - in-memory IO, scalar IO. No checks performed to see if your perl supports it. If you want it, and your perl does not, upgrade.Using
binmode ()
on the new stream is allowed and supported.OPEN, SEEK, and WRITE are not (yet) implemented.
- Line Modifying Function
-
The output is line buffered, to enable line-modifier functions. The line (without newline) is passed as the only argument to the sub-ref, whose output is printed after the prefix from the first argument. A newline is printed after the sub-ref's output.
To filter a line, as in remove it from the stream, make the sub return undef.
TODO
Tests, tests, tests. Tests with older perls
AUTHOR
H.Merijn Brand <h.m.brand@procura.nl>
COPYRIGHT AND LICENSE
Copyright (C) 2006-2023 H.Merijn Brand for PROCURA B.V.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
SEE ALSO
perl(1), perlopen(1), 'open STDOUT, "|-"', Text::Filter