POE::Filter::Stackable man page on Fedora

Man page or keyword search:  
man Server   31170 pages
apropos Keyword Search (all sections)
Output format
Fedora logo
[printable version]

POE::Filter::StackableUser Contributed Perl DocumentaPOE::Filter::Stackable(3)

NAME
       POE::Filter::Stackable - combine multiple POE::Filter objects

SYNOPSIS
	 #!perl

	 use POE qw(
	   Wheel::FollowTail
	   Filter::Line Filter::Grep Filter::Stackable
	 );

	 POE::Session->create(
	   inline_states => {
	     _start => sub {
	       my $parse_input_as_lines = POE::Filter::Line->new();

	       my $select_sudo_log_lines = POE::Filter::Grep->new(
		 Put => sub { 1 },
		 Get => sub {
		   my $input = shift;
		   return $input =~ /sudo\[\d+\]/i;
		 },
	       );

	       my $filter_stack = POE::Filter::Stackable->new(
		 Filters => [
		   $parse_input_as_lines, # first on get, last on put
		   $select_sudo_log_lines, # first on put, last on get
		 ]
	       );

	       $_[HEAP]{tailor} = POE::Wheel::FollowTail->new(
		 Filename => "/var/log/system.log",
		 InputEvent => "got_log_line",
		 Filter => $filter_stack,
	       );
	     },
	     got_log_line => sub {
	       print "Log: $_[ARG0]\n";
	     }
	   }
	 );

	 POE::Kernel->run();
	 exit;

DESCRIPTION
       POE::Filter::Stackable combines multiple filters together in such a way
       that they appear to be a single filter.	All the usual POE::Filter
       methods work, but data is secretly passed through the stacked filters
       before it is returned.  POE::Wheel objects and stand-alone programs
       need no modifications to work with a filter stack.

       In the "SYNOPSIS", POE::Filter::Line and POE::Filter::Grep are combined
       into one filter that only returns a particular kind of line.  This can
       be more efficient than filtering lines in application space, as fewer
       events may need to be dispatched and handled.

       Internally, filters are stored in an array.

       Data added by get_one_start() will flow through the filter array in
       increasing index order.	Filter #0 will have first crack at it,
       followed by filter #1 and so.  The get_one() call will return an item
       after it has passed through the last filter.

       put() passes data through the filters in descending index order.	 Data
       will go through the filter with the highest index first, and put() will
       return the results after data has passed through filter #0.

PUBLIC FILTER METHODS
       In addition to the usual POE::Filter methods, POE::Filter::Stackable
       also supports the following.

   new
       By default, new() creates an empty filter stack that behaves like
       POE::Filter::Stream.  It may be given optional parameters to initialize
       the stack with an array of filters.

	 my $sudo_lines = POE::Filter::Stackable->new(
	   Filters => [
	     POE::Filter::Line->new(),
	     POE::Filter::Grep->new(
	       Put => sub { 1 }, # put all items
	       Get => sub { shift() =~ /sudo\[\d+\]/i },
	     ),
	   ]
	 );

   pop
       Behaves like Perl's built-in pop() for the filter stack.	 The highest-
       indexed filter is removed from the stack and returned.  Any data
       remaining in the filter's input buffer is lost, but an application may
       always call "get_pending" in POE::Filter on the returned filter.

	 my $last_filter = $stackable->pop();
	 my $last_buffer = $last_filter->get_pending();

   shift
       Behaves like Perl's built-in shift() for the filter stack.  The 0th
       filter is removed from the stack and returned.  Any data remaining in
       the filter's input buffer is passed to the new head of the stack, or it
       is lost if the stack becomes empty.  An application may also call
       "get_pending" in POE::Filter on the returned filter to examine the
       filter's input buffer.

	 my $first_filter = $stackable->shift();
	 my $first_buffer = $first_filter->get_pending();

   push FILTER[, FILTER]
       push() adds one or more new FILTERs to the end of the stack.  The newly
       pushed FILTERs will process input last, and they will handle output
       first.

	 # Reverse data read through the stack.
	 # rot13 encode data sent through the stack.
	 $stackable->push(
	   POE::Filter::Map->(
	     Get => sub { return scalar reverse shift() },
	     Put => sub { local $_ = shift(); tr[a-zA-Z][n-za-mN-ZA-M]; $_ },
	   )
	 );

   unshift FILTER[, FILTER]
       unshift() adds one or more new FILTERs to the beginning of the stack.
       The newly unshifted FILTERs will process input first, and they will
       handle output last.

   filters
       filters() returns a list of the filters inside the Stackable filter, in
       the stack's native order.

       Calling "<$filter_stack-"filters()>> in the "SYNOPSIS" would return a
       list of two filter objects:

	 POE::Filter::Line=ARRAY(0x8b5ee0)
	 POE::Filter::Grep=ARRAY(0x8b5f7c)

   filter_types
       filter_types() returns a list of class names for each filter in the
       stack, in the stack's native order.

       Calling "<$filter_stack-"filter_types()>> in the "SYNOPSIS" would
       return a list of two class names:

	 POE::FIlter::Line
	 POE::Filter::Grep

       It could easily be replaced by:

	 my @filter_types = map { ref } $filter_stack->filters;

SEE ALSO
       POE::Filter for more information about filters in general.

       Specific filters, amongst which are: POE::Filter::Block,
       POE::Filter::Grep, POE::Filter::HTTPD, POE::Filter::Line,
       POE::Filter::Map, POE::Filter::RecordBlock, POE::Filter::Reference,
       POE::Filter::Stream

BUGS
       None currently known.

AUTHORS & COPYRIGHTS
       The Stackable filter was contributed by Dieter Pearcey.	Documentation
       provided by Rocco Caputo.

       Please see the POE manpage for more information about authors and
       contributors.

perl v5.14.2			  2011-12-15	     POE::Filter::Stackable(3)
[top]

List of man pages available for Fedora

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net