POE::Filter::Block(3pm) User Contributed Perl Documentation POE::Filter::Block(3pm)
NAME
POE::Filter::Block - translate data between streams and blocks
SYNOPSIS
#!perl
use warnings;
use strict;
use POE::Filter::Block;
my $filter = POE::Filter::Block->new( BlockSize => 8 );
# Prints three lines: abcdefgh, ijklmnop, qrstuvwx.
# Bytes "y" and "z" remain in the buffer and await completion of the
# next 8-byte block.
$filter->get_one_start([ "abcdefghijklmnopqrstuvwxyz" ]);
while(1) {
my $block = $filter->get_one();
last unless @$block;
print $block->[0], "
";
}
# Print one line: yz123456
$filter->get_one_start([ "123456" ]);
while(1) {
my $block = $filter->get_one();
last unless @$block;
print $block->[0], "
";
}
DESCRIPTION
POE::Filter::Block translates data between serial streams and blocks. It can handle fixed-length and length-prepended blocks, and it may
be extended to handle other block types.
Fixed-length blocks are used when Block's constructor is called with a BlockSize value. Otherwise the Block filter uses length-prepended
blocks.
Users who specify block sizes less than one deserve what they get.
In variable-length mode, a LengthCodec parameter may be specified. The LengthCodec value should be a reference to a list of two functions:
the length encoder, and the length decoder:
LengthCodec => [ &encoder, &decoder ]
The encoder takes a reference to a buffer and prepends the buffer's length to it. The default encoder prepends the ASCII representation of
the buffer's length and a chr(0) byte to separate the length from the actual data:
sub _default_encoder {
my $stuff = shift;
substr($$stuff, 0, 0) = length($$stuff) . "