Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 907 lines (616 sloc) 27.696 kb
96ceb8b @rcaputo Initial revision
authored
1 # $Id$
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
2 # Copyrights and documentation are after __END__.
96ceb8b @rcaputo Initial revision
authored
3
4 package POE;
5
6 use strict;
372c3a1 @rcaputo Tweaking to get Makefile.PL working correctly.
authored
7 use Carp;
8
4cdc9c6 @rcaputo macros, optimizations, comments. a lot of changes.
authored
9 use vars qw($VERSION);
0e41005 @rcaputo Bump the version up to 0.2303. Feature freeze is over, la la la.
authored
10 $VERSION = '0.2303';
4cdc9c6 @rcaputo macros, optimizations, comments. a lot of changes.
authored
11
372c3a1 @rcaputo Tweaking to get Makefile.PL working correctly.
authored
12 sub import {
13 my $self = shift;
6f253c6 @rcaputo Optimized POE::Preprocessor a bit, and added POE::NFA
authored
14
15 my @sessions = grep(/^(Session|NFA)$/, @_);
16 my @modules = grep(!/^(Kernel|Session|NFA)$/, @_);
17
500fb10 @rcaputo add new tescase for POE::NFA
authored
18 croak "POE::Session and POE::NFA export conflicting constants"
6f253c6 @rcaputo Optimized POE::Preprocessor a bit, and added POE::NFA
authored
19 if grep(/^(Session|NFA)$/, @sessions) > 1;
20
21 # Add Kernel back it, whether anybody wanted it or not.
22 unshift @modules, 'Kernel';
23
24 # If a session was specified, use that. Otherwise use Session.
25 if (@sessions) {
26 unshift @modules, @sessions;
27 }
28 else {
29 unshift @modules, 'Session';
30 }
372c3a1 @rcaputo Tweaking to get Makefile.PL working correctly.
authored
31
8429c0a @rcaputo forward module exports to the package using POE directly
authored
32 my $package = (caller())[0];
33
372c3a1 @rcaputo Tweaking to get Makefile.PL working correctly.
authored
34 my @failed;
35 foreach my $module (@modules) {
8429c0a @rcaputo forward module exports to the package using POE directly
authored
36 my $code = "package $package; use POE::$module;";
37 eval($code);
38 if ($@) {
babfbeb @rcaputo propagate error messages from modules to user
authored
39 warn $@;
40 push(@failed, $module);
41 }
372c3a1 @rcaputo Tweaking to get Makefile.PL working correctly.
authored
42 }
43
44 @failed and croak "could not import qw(" . join(' ', @failed) . ")";
45 }
96ceb8b @rcaputo Initial revision
authored
46
47 #------------------------------------------------------------------------------
48
49 sub new {
50 my $type = shift;
51 croak "$type is not meant to be used directly";
52 }
53
54 #------------------------------------------------------------------------------
55 1;
4cdc9c6 @rcaputo macros, optimizations, comments. a lot of changes.
authored
56
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
57 __END__
58
59 =head1 NAME
60
747e195 @rcaputo propagate cvs version number as $VERSION
authored
61 POE - multitasking and networking framework for perl
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
62
63 =head1 SYNOPSIS
64
d8788af @rcaputo Big documentation rewrite
authored
65 #!/usr/bin/perl -w
66 use strict;
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
67
d8788af @rcaputo Big documentation rewrite
authored
68 # Use POE!
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
69 use POE;
6f47304 @rcaputo clean up POD and whitespace
authored
70
f77c574 @rcaputo revised documentation
authored
71 sub handler_start {
d8788af @rcaputo Big documentation rewrite
authored
72 my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
73 print "Session ", $session->ID, " has started.\n";
74 $heap->{count} = 0;
75 $kernel->yield('increment');
76 }
77
f77c574 @rcaputo revised documentation
authored
78 sub handler_increment {
d8788af @rcaputo Big documentation rewrite
authored
79 my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
80 print "Session ", $session->ID, " counted to ", ++$heap->{count}, ".\n";
81 $kernel->yield('increment') if $heap->{count} < 10;
82 }
83
f77c574 @rcaputo revised documentation
authored
84 sub handler_stop {
d8788af @rcaputo Big documentation rewrite
authored
85 print "Session ", $_[SESSION]->ID, " has stopped.\n";
86 }
87
88 for (0..9) {
89 POE::Session->create(
90 inline_states =>
f77c574 @rcaputo revised documentation
authored
91 { _start => \&handler_start,
92 increment => \&handler_increment,
93 _stop => \&handler_stop,
d8788af @rcaputo Big documentation rewrite
authored
94 }
95 );
96 }
97
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
98 $poe_kernel->run();
99 exit;
100
333ddb3 @rcaputo document other resources early, so people can find them sooner
authored
101 =head1 QUICK LINKS
d8788af @rcaputo Big documentation rewrite
authored
102
f77c574 @rcaputo revised documentation
authored
103 Please see the SEE ALSO section for conceptual summary of all POE's
104 documentation.
105
013e7ec @rcaputo Bump version to 0.1703. Document cookbook.
authored
106 POE's distribution comes with a directory full of examples, but they
107 are gradually being phased out in favor of an online "cookbook".
108 Please see the samples directory, and also look at
109 http://poe.perl.org/?POE_Cookbook for more contemporary examples.
333ddb3 @rcaputo document other resources early, so people can find them sooner
authored
110
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
111 Please see http://www.perl.com/pub/2001/01/poe.html for an excellent,
112 and more importantly: gradual, introduction to POE. If this manpage
113 doesn't make sense, perhaps the introduction will.
114
115 Please see POE's web site at http://poe.perl.org/ for FAQs, cookbook
116 examples, and modules using POE.
333ddb3 @rcaputo document other resources early, so people can find them sooner
authored
117
118 =head1 DESCRIPTION
119
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
120 POE is an acronym of "Perl Object Environment". It originally was
121 designed as the core of a persistent object server and runtime
122 environment, but it's evolved into a general purpose multitasking and
123 networking framework.
f77c574 @rcaputo revised documentation
authored
124
0f2f243 @rcaputo Michael Stevens discovered a situation where signals could trigger a
authored
125 POE's core contains two types of modules. First there's POE::Kernel;
f77c574 @rcaputo revised documentation
authored
126 this is the main resource manager and event loop. Second are the
127 sessions or state machines which implement the actual threads. The
128 sessions are POE::Session (not quite a proper state machine) and
129 POE::NFA.
130
131 The remainder of this distribution consists of convenience and helper
132 modules, most of which aren't required to begin using POE.
d8788af @rcaputo Big documentation rewrite
authored
133
134 =head1 USING POE
135
f77c574 @rcaputo revised documentation
authored
136 Using POE can be pretty tedious. Consider this example, which pulls
137 in the necessary modules for a line-based TCP server:
d8788af @rcaputo Big documentation rewrite
authored
138
139 use POE::Kernel;
140 use POE::Session;
141 use POE::Wheel::SocketFactory;
142 use POE::Wheel::ReadWrite;
143 use POE::Filter::Line;
144 use POE::Driver::SysRW;
145
f77c574 @rcaputo revised documentation
authored
146 The POE.pm module fixes some of this tedium. When POE.pm is used
147 directly, it automatically includes POE::Kernel and POE::Session. It
148 also includes each of the C<use> statement's parameters, first
149 prepending "POE::" to them. An example is in order:
d8788af @rcaputo Big documentation rewrite
authored
150
f77c574 @rcaputo revised documentation
authored
151 This C<use> statement is equivalent to the previous six.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
152
153 use POE qw( Wheel::SocketFactory Wheel::ReadWrite
d8788af @rcaputo Big documentation rewrite
authored
154 Filter::Line Driver::SysRW
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
155 );
d8788af @rcaputo Big documentation rewrite
authored
156
157 =head1 WRITING POE PROGRAMS
158
f77c574 @rcaputo revised documentation
authored
159 Basic POE programs have four parts.
d8788af @rcaputo Big documentation rewrite
authored
160
161 =over 2
162
f77c574 @rcaputo revised documentation
authored
163 =item Preliminary program setup
d8788af @rcaputo Big documentation rewrite
authored
164
f77c574 @rcaputo revised documentation
authored
165 This is the usual overhead for writing a Perl program: a shebang line,
d8788af @rcaputo Big documentation rewrite
authored
166 perhaps some C<use> statements to import things, and maybe some global
167 variables or configuration constants. It's all pretty standard stuff.
168
169 #!/usr/bin/perl -w
170 use strict;
171 use POE;
172
f77c574 @rcaputo revised documentation
authored
173 =item Define the program's event handlers or states
d8788af @rcaputo Big documentation rewrite
authored
174
f77c574 @rcaputo revised documentation
authored
175 Declare functions which will handle events here. This is deceptive,
176 since the functions can be declared anywhere, including as anonymous
177 subroutines in a session constructor call.
d8788af @rcaputo Big documentation rewrite
authored
178
f77c574 @rcaputo revised documentation
authored
179 sub handler_start {
d8788af @rcaputo Big documentation rewrite
authored
180 ...
181 }
182
f77c574 @rcaputo revised documentation
authored
183 sub handler_increment {
d8788af @rcaputo Big documentation rewrite
authored
184 ...
185 }
186
f77c574 @rcaputo revised documentation
authored
187 sub handler_stop {
d8788af @rcaputo Big documentation rewrite
authored
188 ...
189 }
190
f77c574 @rcaputo revised documentation
authored
191 =item Start initial sessions or machines
d8788af @rcaputo Big documentation rewrite
authored
192
f77c574 @rcaputo revised documentation
authored
193 The Kernel only runs as long as there is something for it to do. It's
194 main loop returns after the last session has stopped. The obvious
195 corolary to this rule is that the main loop will return immediately if
196 nothing is set up when it's called.
d8788af @rcaputo Big documentation rewrite
authored
197
198 for (0..9) {
199 POE::Session->create(
200 inline_states =>
f77c574 @rcaputo revised documentation
authored
201 { _start => \&handler_start,
202 increment => \&handler_increment,
203 _stop => \&handler_stop,
d8788af @rcaputo Big documentation rewrite
authored
204 }
205 );
206 }
207
f77c574 @rcaputo revised documentation
authored
208 =item Start the kernel's main loop
d8788af @rcaputo Big documentation rewrite
authored
209
f77c574 @rcaputo revised documentation
authored
210 _start handlers are invoked immediately when sessions are
211 instantiated. Everything else happens because the kernel makes it so,
212 and the kernel can't do that 'til it's started. Most programs exit
213 afterwards since the kernel only returns after everything is done.
d8788af @rcaputo Big documentation rewrite
authored
214
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
215 $poe_kernel->run();
f77c574 @rcaputo revised documentation
authored
216 exit 0;
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
217
d8788af @rcaputo Big documentation rewrite
authored
218 =back
219
220
221 =head1 POE's ARCHITECTURE
222
f77c574 @rcaputo revised documentation
authored
223 POE is built in separate layers. Each layer requires the ones beneath
224 it, but no low-level layer requires a higher one.
d8788af @rcaputo Big documentation rewrite
authored
225
226 =over 2
227
f77c574 @rcaputo revised documentation
authored
228 =item Events layer
d8788af @rcaputo Big documentation rewrite
authored
229
f77c574 @rcaputo revised documentation
authored
230 The events layer consists of an event dispatcher, POE::Kernel, and the
231 sessions or state machines it runs: POE::Session (a generic event
232 driven thread) and POE::NFA (an event driven nondeterministic finite
233 automaton).
d8788af @rcaputo Big documentation rewrite
authored
234
f77c574 @rcaputo revised documentation
authored
235 =item One or more I/O layers
d8788af @rcaputo Big documentation rewrite
authored
236
f77c574 @rcaputo revised documentation
authored
237 I/O layers are built upon the event layer, and that allows them to
238 coexist in the same program. POE only includes one I/O layer: Wheels.
239 "Wheels" is a whimsical name for interlocking cogs that together make
240 things go. They're also reinvented a lot, and this is no exception.
d8788af @rcaputo Big documentation rewrite
authored
241
6d3fdd2 @rcaputo add POE::Wheel::Curses and upgrade dscouch's status in the docs
authored
242 POE comes with six wheels.
d8788af @rcaputo Big documentation rewrite
authored
243
244 =over 2
245
6d3fdd2 @rcaputo add POE::Wheel::Curses and upgrade dscouch's status in the docs
authored
246 =item POE::Wheel::Curses
247
248 The Curses wheel handles non-blocking input for programs using the
249 curses text interface. It requires the Curses perl module and a
a4c9dd9 @rcaputo update Windows support docs, and a few other bits
authored
250 familiarity with curses programming.q
6d3fdd2 @rcaputo add POE::Wheel::Curses and upgrade dscouch's status in the docs
authored
251
f77c574 @rcaputo revised documentation
authored
252 =item POE::Wheel::FollowTail
d8788af @rcaputo Big documentation rewrite
authored
253
254 FollowTail follows the tail of an ever-growing file. It's useful for
f77c574 @rcaputo revised documentation
authored
255 watching logs and things of that nature.
d8788af @rcaputo Big documentation rewrite
authored
256
f77c574 @rcaputo revised documentation
authored
257 =item POE::Wheel::ListenAccept
d8788af @rcaputo Big documentation rewrite
authored
258
259 ListenAccept performs ye olde non-blocking socket listen and accept.
f77c574 @rcaputo revised documentation
authored
260 It's great for programs that can't use SocketFactory and instead must
261 listen and accept connections from sockets created elsewhere.
d8788af @rcaputo Big documentation rewrite
authored
262
6747785 @rcaputo add ReadLine wheel
authored
263 =item POE::Wheel::ReadLine
264
265 The ReadLine wheel accepts console input as lines only. It handles
266 many of the common shell command editing keystrokes, making it pretty
267 easy to input things. It's event driven, unlike Term::ReadLine, and
268 it cooperates nicely with the rest of POE.
269
f77c574 @rcaputo revised documentation
authored
270 =item POE::Wheel::ReadWrite
d8788af @rcaputo Big documentation rewrite
authored
271
f77c574 @rcaputo revised documentation
authored
272 ReadWrite is the star of POE's default I/O layer. It performs
273 buffered, flow-controlled I/O on non-blocking, unbuffered filehandles.
274 It almost acts like a Unix stream which can't stack protocol layers,
275 but that may change.
d8788af @rcaputo Big documentation rewrite
authored
276
277 ReadWrite uses two other classes to do its dirty work: Driver and
f77c574 @rcaputo revised documentation
authored
278 Filter. Drivers do the actual work of reading and writing
279 filehandles. Filters translate between raw streams and cooked chunks
280 of tasty dada.
d8788af @rcaputo Big documentation rewrite
authored
281
f77c574 @rcaputo revised documentation
authored
282 D comes before F, so Drivers go first.
d8788af @rcaputo Big documentation rewrite
authored
283
284 =over 2
285
f77c574 @rcaputo revised documentation
authored
286 =item POE::Driver::SysRW
d8788af @rcaputo Big documentation rewrite
authored
287
f77c574 @rcaputo revised documentation
authored
288 Nobody has needed another driver yet, so this is the only one
289 currently available. It performs sysread and syswrite in a generic
290 way so that ReadWrite can use it and future drivers interchangeably.
d8788af @rcaputo Big documentation rewrite
authored
291
f77c574 @rcaputo revised documentation
authored
292 Other drivers will use the same interface, should they ever be
293 written.
d8788af @rcaputo Big documentation rewrite
authored
294
295 =back
296
f77c574 @rcaputo revised documentation
authored
297 Filters next. There are a few.
d8788af @rcaputo Big documentation rewrite
authored
298
299 =over 2
300
f77c574 @rcaputo revised documentation
authored
301 =item POE::Filter::Block
d8788af @rcaputo Big documentation rewrite
authored
302
f77c574 @rcaputo revised documentation
authored
303 This filter parses input as fixed-length blocks. On the output side,
304 it merely passes data through unscathed.
c575666 @rcaputo added Filter::Block and Dieter's FollowTail patches; finishing touches f...
authored
305
f77c574 @rcaputo revised documentation
authored
306 =item POE::Filter::HTTPD
c575666 @rcaputo added Filter::Block and Dieter's FollowTail patches; finishing touches f...
authored
307
f77c574 @rcaputo revised documentation
authored
308 The HTTPD filter parses input as HTTP requests and translates them
309 into HTTP::Request objects. On the output side, it takes
310 HTTP::Response objects and turns them into something suitable to be
311 sent to a web client/user-agent.
c575666 @rcaputo added Filter::Block and Dieter's FollowTail patches; finishing touches f...
authored
312
f77c574 @rcaputo revised documentation
authored
313 =item POE::Filter::Line
d8788af @rcaputo Big documentation rewrite
authored
314
f77c574 @rcaputo revised documentation
authored
315 The Line filter parses incoming streams into lines and turns outgoing
316 lines into streams. It used to be very basic, but recent improvements
317 have added interesting features like newline autodetection.
d8788af @rcaputo Big documentation rewrite
authored
318
f77c574 @rcaputo revised documentation
authored
319 =item POE::Filter::Reference
d8788af @rcaputo Big documentation rewrite
authored
320
4108539 @rcaputo Clean up the overview of Filter::Reference after someone (I forget!
authored
321 The Reference filter is used to send Perl structures between POE
f77c574 @rcaputo revised documentation
authored
322 programs or between POE and other Perl programs. On the input side,
4108539 @rcaputo Clean up the overview of Filter::Reference after someone (I forget!
authored
323 frozen data (via Storable, FreezeThaw, YAML, or some other data
324 mechanism) is thawed into Perl data structures. On output, references
325 given to the filter are frozen. Data may also be compressed on
326 request if Compress::Zlib is installed.
d8788af @rcaputo Big documentation rewrite
authored
327
f77c574 @rcaputo revised documentation
authored
328 =item POE::Filter::Stream
d8788af @rcaputo Big documentation rewrite
authored
329
f77c574 @rcaputo revised documentation
authored
330 The stream filter does nothing. It merely passes data through without
331 any change.
d8788af @rcaputo Big documentation rewrite
authored
332
333 =back
334
6d3fdd2 @rcaputo add POE::Wheel::Curses and upgrade dscouch's status in the docs
authored
335 =item POE::Wheel::Run
336
337 The Run wheel provides a way to run functions or other programs in
338 child processes. It encapsulates the necessary pipe() and fork()
339 code, and sometimes exec(). Internally, it handles reading from and
340 writing to child processes without further intervention. Child output
341 arrives in the Wheel's owner as events.
342
f77c574 @rcaputo revised documentation
authored
343 =item POE::Wheel::SocketFactory
d8788af @rcaputo Big documentation rewrite
authored
344
f77c574 @rcaputo revised documentation
authored
345 SocketFactory creates all manner of connectionless and connected
346 network sockets. It also listens on TCP server sockets, only
347 returning accepted client connections as they arrive.
d8788af @rcaputo Big documentation rewrite
authored
348
349 =back
350
351 =back
352
353 =head1 POE COMPONENTS
354
f77c574 @rcaputo revised documentation
authored
355 Components consist of one or more sessions or state machines that
356 encapsulate a very high level procedure. For example,
d8788af @rcaputo Big documentation rewrite
authored
357 POE::Component::IRC (not included) performs nearly all the functions
f77c574 @rcaputo revised documentation
authored
358 of a full-featured IRC client. POE::Component::UserBase (not
359 included) is a user authentication and data persistence servlet.
d8788af @rcaputo Big documentation rewrite
authored
360
4108539 @rcaputo Clean up the overview of Filter::Reference after someone (I forget!
authored
361 Components tend to be highly reusable libraries that handle tedious
362 tasks, freeing programmers to focus on more interesting things. This
363 should be true for any library, though.
364
365 A list of released POE::Component modules is at:
366 http://search.cpan.org/search?mode=module&query=POE%3A%3AComponent
d8788af @rcaputo Big documentation rewrite
authored
367
368 =over 2
369
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
370 =item POE::Component::Client::TCP
371
372 The Client::TCP component provides the most common core features for
373 writing TCP clients.
374
f77c574 @rcaputo revised documentation
authored
375 =item POE::Component::Server::TCP
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
376
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
377 The Server::TCP component provides the most common core features for
378 writing TCP servers. A simple echo server is about 20 lines.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
379
dddc865 @rcaputo I discovered the podchecker utility, and ran it on POE's
authored
380 =back
381
f77c574 @rcaputo revised documentation
authored
382 =head1 Support Modules
d8788af @rcaputo Big documentation rewrite
authored
383
f77c574 @rcaputo revised documentation
authored
384 Finally, there are some files which POE uses but aren't required
385 elsewhere. These include POE::Preprocessor and the base classes:
386 POE::Component, POE::Driver, POE::Filter and POE::Wheel. There also
387 are some development files in the lib directory.
d8788af @rcaputo Big documentation rewrite
authored
388
389 =over 2
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
390
f77c574 @rcaputo revised documentation
authored
391 =item POE::Preprocessor
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
392
f77c574 @rcaputo revised documentation
authored
393 This is a macro preprocessor. It also implements plain and enumerated
394 constants. POE::Kernel uses it to inline smaller functions and make
395 the source generally more readable. There seem to be two drawbacks:
396 First, code is more difficult to examine in perl's debugger since it
397 doesn't necessarily look like the original source. Second, programs
398 take longer to start up because every source line must first pass
399 through a perl filter. The compile-time penalty is negligible in
400 long-running programs, and the runtime boost from fewer function calls
401 can make up for it over time.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
402
f77c574 @rcaputo revised documentation
authored
403 POE::Component, POE::Driver and POE::Filter exist to document their
404 classes of objects. POE::Wheel contains some base functions for
405 tracking unique wheel IDs.
d8788af @rcaputo Big documentation rewrite
authored
406
dddc865 @rcaputo I discovered the podchecker utility, and ran it on POE's
authored
407 =back
408
f77c574 @rcaputo revised documentation
authored
409 =head1 SAMPLE PROGRAMS
d8788af @rcaputo Big documentation rewrite
authored
410
1294a99 @rcaputo Document that the samples are moving to the POE Cookbook.
authored
411 This distribution contains several example and/or tutorial programs in
412 the ./samples directory. Be advised, however, that they are old and
413 may not exhibit the most current coding practices.
d8788af @rcaputo Big documentation rewrite
authored
414
1294a99 @rcaputo Document that the samples are moving to the POE Cookbook.
authored
415 The sample programs are scheduled for removal from this distribution
416 in version 0.1301. They are being moved to the web version of the POE
417 Cookbook, which is available at <http://poe.perl.org/?POE_Cookbook>.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
418
1294a99 @rcaputo Document that the samples are moving to the POE Cookbook.
authored
419 The author is always looking for new example ideas.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
420
d8788af @rcaputo Big documentation rewrite
authored
421 =head1 COMPATIBILITY ISSUES
422
423 POE has tested favorably on as many Perl versions as the author can
424 find or harass people into trying. This includes Linux, FreeBSD, OS/2
f77c574 @rcaputo revised documentation
authored
425 and at least one unspecified version of Windows. As far as anyone can
d8788af @rcaputo Big documentation rewrite
authored
426 tell, nobody ever has tried it on any version of MacOS.
427
428 POE has been tested with Perl versions as far back as 5.004_03 and as
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
429 recent as 5.7.2. The CPAN testers are a wonderful bunch of people who
d8788af @rcaputo Big documentation rewrite
authored
430 have dedicated resources to running new modules on a variety of
431 platforms. The latest POE tests are visible at
432 <http://testers.cpan.org/search?request=dist&dist=POE>. Thanks,
433 people!
434
435 Please let the author know of breakage or success that hasn't been
436 covered already. Thanks!
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
437
d8788af @rcaputo Big documentation rewrite
authored
438 Specific issues:
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
439
d8788af @rcaputo Big documentation rewrite
authored
440 =over 2
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
441
f77c574 @rcaputo revised documentation
authored
442 =item Various Unices
d8788af @rcaputo Big documentation rewrite
authored
443
444 No known problems.
445
f77c574 @rcaputo revised documentation
authored
446 =item OS/2
ad0d40f @rcaputo 0.08_05
authored
447
accfa09 @rcaputo tweak OS/2 information
authored
448 No known problems. POE has no OS/2 tester starting with version
449 0.1206.
ad0d40f @rcaputo 0.08_05
authored
450
f77c574 @rcaputo revised documentation
authored
451 =item Windows
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
452
3ddd789 @rcaputo Updated Windows and MacOS support info. in POE's man page.
authored
453 POE seems to work very nicely with Perl compiled for CygWin. If you
454 must use ActiveState Perl, please use build 631 or newer.
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
455
3ddd789 @rcaputo Updated Windows and MacOS support info. in POE's man page.
authored
456 Currently there is nobody maintaining POE for Windows. Rocco will be
457 fixing things as he's able, but he has only limited access to Windows
458 machines for testing and development. If you would like to accelerate
459 POE's Windows support, please contact Rocco or the mailing list.
460
461 Thanks to Sean Puckett, Douglas Couch, Hachi, and Dynweb for their
462 help in bringing POE's Windows support so far.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
463
f77c574 @rcaputo revised documentation
authored
464 =item MacOS
d8788af @rcaputo Big documentation rewrite
authored
465
3ddd789 @rcaputo Updated Windows and MacOS support info. in POE's man page.
authored
466 POE 0.18 passes all tests on MacOS/X.
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
467
3ddd789 @rcaputo Updated Windows and MacOS support info. in POE's man page.
authored
468 Its pre-X support seems like a lost cause unless someone steps forward
469 to make it happen.
d8788af @rcaputo Big documentation rewrite
authored
470
471 =back
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
472
d8788af @rcaputo Big documentation rewrite
authored
473 =head1 SYSTEM REQUIREMENTS
474
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
475 POE requires Filter::Util::Call version 1.18 or newer. All the other
476 modules are optional.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
477
3ddd789 @rcaputo Updated Windows and MacOS support info. in POE's man page.
authored
478 Time::HiRes is recommended.
479
f77c574 @rcaputo revised documentation
authored
480 Some of POE's sample programs use fork(). They won't work wherever
481 fork() isn't available; sorry.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
482
f77c574 @rcaputo revised documentation
authored
483 POE relies heavily on constants in the POSIX module. Some of the
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
484 constants aren't defined on some platforms. POE works around this as
485 best it can.
d8788af @rcaputo Big documentation rewrite
authored
486
f77c574 @rcaputo revised documentation
authored
487 Some of POE's sample programs require a recent IO bundle, but you get
488 that for free with recent versions of Perl.
d8788af @rcaputo Big documentation rewrite
authored
489
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
490 If you want to use Filter::Reference to serialize data for
491 transporting over a network, you will need Storable, FreezeThaw, or
492 some other freezer/thawer package installed. If you want your data to
493 be shipped compressed, you will also need Compress::Zlib.
d8788af @rcaputo Big documentation rewrite
authored
494
f77c574 @rcaputo revised documentation
authored
495 B<Important Filter::Reference note:> If you're using Filter::Reference
496 to pass data to another machine, make sure every machine has the same
497 versions of the same libraries. Subtle differences, even in different
498 versions of modules like Storable, can cause mysterious errors when
499 data is reconstituted at the receiving end. Whe all else fails,
500 upgrade to the latest versions.
d8788af @rcaputo Big documentation rewrite
authored
501
f77c574 @rcaputo revised documentation
authored
502 Filter::HTTPD uses a small world of modules including HTTP::Status;
503 HTTP::Request; HTTP::Date and URI::URL. The httpd.perl sample program
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
504 uses Filter::HTTPD, which uses all that other stuff. If you want to
505 write web servers, you'll need to install libwww-perl, which requires
506 libnet.
d8788af @rcaputo Big documentation rewrite
authored
507
a4c9dd9 @rcaputo update Windows support docs, and a few other bits
authored
508 Wheel::Curses requires the Curses module, which in turn requires some
509 sort of curses library.
510
f77c574 @rcaputo revised documentation
authored
511 =head1 SUPPORT RESOURCES
d8788af @rcaputo Big documentation rewrite
authored
512
f77c574 @rcaputo revised documentation
authored
513 These are Internet resources where you may find more information about
514 POE.
d8788af @rcaputo Big documentation rewrite
authored
515
f77c574 @rcaputo revised documentation
authored
516 =over 2
517
518 =item The POE Mailing List
519
520 POE has a mailing list at perl.org. You can receive subscription
521 information by sending e-mail:
d8788af @rcaputo Big documentation rewrite
authored
522
f77c574 @rcaputo revised documentation
authored
523 To: poe-help@perl.org
524 Subject: (anything will do)
d8788af @rcaputo Big documentation rewrite
authored
525
f77c574 @rcaputo revised documentation
authored
526 The message body is ignored.
d8788af @rcaputo Big documentation rewrite
authored
527
f77c574 @rcaputo revised documentation
authored
528 All forms of feedback are welcome.
d8788af @rcaputo Big documentation rewrite
authored
529
f77c574 @rcaputo revised documentation
authored
530 =item The POE Web Site
d814423 @rcaputo doc patch and 19_filterchange.t Storable tweak
authored
531
f77c574 @rcaputo revised documentation
authored
532 POE has a web site where the latest development snapshot, along with
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
533 the Changes file and other stuff may be found: http://poe.perl.org/
d8788af @rcaputo Big documentation rewrite
authored
534
f77c574 @rcaputo revised documentation
authored
535 =item SourceForge
d8788af @rcaputo Big documentation rewrite
authored
536
f77c574 @rcaputo revised documentation
authored
537 POE's development has moved to SourceForge as an experiment in project
538 management. You can reach POE's project summary page at
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
539 http://sourceforge.net/projects/poe/
d8788af @rcaputo Big documentation rewrite
authored
540
541 =back
542
f77c574 @rcaputo revised documentation
authored
543 =head1 SEE ALSO
d8788af @rcaputo Big documentation rewrite
authored
544
f77c574 @rcaputo revised documentation
authored
545 This is a summary of POE's modules and the things documented in each.
d8788af @rcaputo Big documentation rewrite
authored
546
f77c574 @rcaputo revised documentation
authored
547 =head2 Events Layer
d8788af @rcaputo Big documentation rewrite
authored
548
f77c574 @rcaputo revised documentation
authored
549 These are POE's core modules.
d8788af @rcaputo Big documentation rewrite
authored
550
f77c574 @rcaputo revised documentation
authored
551 =over 2
d8788af @rcaputo Big documentation rewrite
authored
552
f77c574 @rcaputo revised documentation
authored
553 =item POE (this document)
d8788af @rcaputo Big documentation rewrite
authored
554
f77c574 @rcaputo revised documentation
authored
555 The POE manpage includes a sample program and walkthrough of its
556 parts, a summary of the modules which comprise this distribution,
557 POE's general system requirements, how to use POE (literally), and
558 where to get help. It also has a table of contents which you're even
559 now reading.
d8788af @rcaputo Big documentation rewrite
authored
560
f77c574 @rcaputo revised documentation
authored
561 =item POE::Kernel
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
562
f77c574 @rcaputo revised documentation
authored
563 The POE::Kernel manpage includes information about debugging traces
564 and assertions; FIFO events; filehandle watchers; Kernel data
565 accessors; posting events from traditional callbacks (postbacks);
566 redefining sessions' states; resource management; session aliases;
567 signal types, handlers, and pitfalls; signal watchers; synchronous
568 vs. asynchronous events; and timed events (alarms and delays).
d8788af @rcaputo Big documentation rewrite
authored
569
f77c574 @rcaputo revised documentation
authored
570 =item POE::NFA
d8788af @rcaputo Big documentation rewrite
authored
571
f77c574 @rcaputo revised documentation
authored
572 The POE::NFA manpage covers this session's additional predefined
573 events, how NFA differs from Session, state changing methods, and the
574 spawn constructor.
63339eb @rcaputo updated documentation
authored
575
f77c574 @rcaputo revised documentation
authored
576 =item POE::Session
577
578 The POE::Session manpage covers different kinds of states (inline
579 coderef, object methods, and package methods); postback mechanics;
580 predefined event names and the parameters included with them; resource
581 management and its effects on sessions; session constructors (new and
582 create); session data accessors; synchronous vs. asynchronous events
583 in more detail; why sessions don't stop by themselves, and how to
584 force them to.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
585
586 =back
587
f77c574 @rcaputo revised documentation
authored
588 =head2 I/O Layer
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
589
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
590 These modules comprise POE's default I/O abstraction.
d8788af @rcaputo Big documentation rewrite
authored
591
d69d027 @rcaputo POE::NFA initial revision; fix =over tags and constructor examples
authored
592 =over 2
f77c574 @rcaputo revised documentation
authored
593
594 =item POE::Driver
595
596 The POE::Driver manpage covers drivers in general and their common
597 interface.
598
599 =item POE::Driver::SysRW
600
601 The SysRW driver's manpage describes the sysread/syswrite abstraction
602 and covers parameters which can be used to customize a SysRW driver's
603 operation.
604
605 =item POE::Filter
606
607 The POE::Filter manpage covers filters in general and their common
4ff59be @rcaputo tweak the Preprocessor a little faster... add wheel IDs to ListenAccept'...
authored
608 interface. It discusses the pitfalls involved in switching filters
609 on a running wheel.
f77c574 @rcaputo revised documentation
authored
610
296aa91 @rcaputo finally add Dieter Pearcey's stackable filters
authored
611 =item POE::Filter::Grep
612
613 Grep is part of the family of filters that includes Stackable, Map,
614 and RecordBlock. It applies a regexp filter on data passing through
615 it, before it reaches a Session. It's mainly used in filter stacks
616 (see POE::Filter::Stackable).
617
f77c574 @rcaputo revised documentation
authored
618 =item POE::Filter::HTTPD
619
620 The HTTPD filter's manpage covers using POE as a web server.
621
622 =item POE::Filter::Line
623
624 The Line filter's manpage discusses how to read and write data by
625 lines; how to change the newline literal or regular expression; and
626 how to enable newline autodetection when working with strange peers.
627
296aa91 @rcaputo finally add Dieter Pearcey's stackable filters
authored
628 =item POE::Filter::Map
629
630 Map is part of the family of filters that includes Stackable, Grep,
631 and RecordBlock. It transforms data passing through it, before it
632 reaches a Session.
633
634 The Map filter is designed primarily to act as an interface between
635 filters that deal with different data formats, but it can be used
636 stand-alone to perform unique functions that no other filter does. In
637 this case it's something of a wildcard filter.
638
639 If you find yourself reusing the same custom Map filter, you may want
640 to turn it into a full-fledged filter.
641
642 =item POE::Filter::RecordBlock
643
644 RecordBlock combines records into groups by count and flattens groups
645 of records back into a record stream. For example, RecordBlock might
646 combine log records into pairs.
647
f77c574 @rcaputo revised documentation
authored
648 =item POE::Filter::Reference
649
650 The Reference filter's manpage talks about marshalling data and
651 passing it between POE programs; and customizing the way data is
652 frozen, thawed and optionally compressed.
653
296aa91 @rcaputo finally add Dieter Pearcey's stackable filters
authored
654 =item POE::Filter::Stackable
655
656 Stackable is a meta-filter designed to stack other filters. Stackable
657 manages the filters it contains and passes data between them. In
658 essence, the inner filters are combined into one super filter.
659
660 The Map filter can also be used to perform quick and dirty functions
661 that aren't implemented in any single existing filter.
662
f77c574 @rcaputo revised documentation
authored
663 =item POE::Filter::Stream
664
665 The Stream filter's manpage is pretty empty since it doesn't do much
666 of anything.
667
668 =item POE::Wheel
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
669
f77c574 @rcaputo revised documentation
authored
670 The Wheel's manpage talks about wheels in general and their common
671 interface.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
672
f77c574 @rcaputo revised documentation
authored
673 =item POE::Wheel::FollowTail
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
674
f77c574 @rcaputo revised documentation
authored
675 The FollowTail wheel's manpage discusses how to watch the end of an
676 ever-growing file (not to be confused with that orb tune) and how to
677 change aspects of the wheel's behavior with constructor parameters.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
678
f77c574 @rcaputo revised documentation
authored
679 =item POE::Wheel::ListenAccept
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
680
f77c574 @rcaputo revised documentation
authored
681 The ListenAccept wheel's manpage discusses how to listen and accept
682 connections using sockets created from sources other than
683 SocketFactory.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
684
f77c574 @rcaputo revised documentation
authored
685 =item POE::Wheel::ReadWrite
d8788af @rcaputo Big documentation rewrite
authored
686
f77c574 @rcaputo revised documentation
authored
687 The ReadWrite wheel's manpage covers non-blocking I/O with optional
688 flow control.
d8788af @rcaputo Big documentation rewrite
authored
689
f77c574 @rcaputo revised documentation
authored
690 =item POE::Wheel::SocketFactory
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
691
f77c574 @rcaputo revised documentation
authored
692 The SocketFactory wheel's manpage discusses how socket factories
693 create and manage sockets; the events they emit on connection,
694 acceptance, and failure; and the parameters which govern what they do.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
695
f77c574 @rcaputo revised documentation
authored
696 =back
697
698 =head2 Standard Components
d8788af @rcaputo Big documentation rewrite
authored
699
f77c574 @rcaputo revised documentation
authored
700 These components are included with POE because they're nearly
701 universally useful.
702
703 =over 2
d8788af @rcaputo Big documentation rewrite
authored
704
f77c574 @rcaputo revised documentation
authored
705 =item POE::Component
d8788af @rcaputo Big documentation rewrite
authored
706
f77c574 @rcaputo revised documentation
authored
707 The POE::Component manpage discusses what components are and why they
708 exist.
d8788af @rcaputo Big documentation rewrite
authored
709
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
710 =item POE::Component::Client::TCP
711
712 The TCP client component explains how to create TCP clients quickly
713 and easily.
714
f77c574 @rcaputo revised documentation
authored
715 =item POE::Component::Server::TCP
d8788af @rcaputo Big documentation rewrite
authored
716
f77c574 @rcaputo revised documentation
authored
717 The TCP server component explains how to create TCP servers with a
718 minimum of fuss.
d8788af @rcaputo Big documentation rewrite
authored
719
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
720 =back
721
f77c574 @rcaputo revised documentation
authored
722 =head2 Supporting Cast
723
724 These modules help in the background.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
725
f77c574 @rcaputo revised documentation
authored
726 =over 2
727
6054510 @rcaputo document the pipes and wheel::run
authored
728 =item POE::Pipe::OneWay
729
730 This creates unbuffered one-way pipes. It tries various methods in
731 the hope that one of them will work on any given platform.
732
733 =item POE::Pipe::TwoWay
734
735 This creates unbuffered two-way pipes. It tries various methods in
736 the hope that one of them will work on any given platform. It's
737 preferred over two OneWay pipes because sometimes two-way transports
738 are available and it can save you a couple filehandles.
739
f77c574 @rcaputo revised documentation
authored
740 =item POE::Preprocessor
741
742 POE's preprocessor covers inline constant replacement, enumerated
743 constants, and macro substitutions in perl programs.
744
745 =back
746
747 =head1 BUGS
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
748
f77c574 @rcaputo revised documentation
authored
749 The t/*.t tests only cover about 70% of POE. The latest numbers are
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
750 on POE's web site.
ad0d40f @rcaputo 0.08_05
authored
751
d8788af @rcaputo Big documentation rewrite
authored
752 =head1 AUTHORS & COPYRIGHT
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
753
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
754 POE is the combined effort of several people. If someone is missing
755 from this list, please let Rocco know.
d8788af @rcaputo Big documentation rewrite
authored
756
757 =over 2
758
726aee4 @rcaputo credit more people
authored
759 =item Ann Barcomb
d8788af @rcaputo Big documentation rewrite
authored
760
726aee4 @rcaputo credit more people
authored
761 Ann Barcomb is <kudra@domaintje.com>, aka C<kudra>. Ann contributed
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
762 large portions of POE::Simple and the code that became the ReadWrite
da6a2f2 @rcaputo Matt Sergeant contributed POE::Kernel::Poll, an event loop substrate
authored
763 support in POE::Component::Server::TCP. Her ideas also inspired
764 Client::TCP component, introduced in version 0.1702.
d8788af @rcaputo Big documentation rewrite
authored
765
f77c574 @rcaputo revised documentation
authored
766 =item Artur Bergman
d8788af @rcaputo Big documentation rewrite
authored
767
f77c574 @rcaputo revised documentation
authored
768 Artur Bergman is <artur@vogon-solutions.com>. He contributed many
769 hours' work into POE and quite a lot of ideas. Years later, I decide
770 he's right and actually implement them.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
771
f77c574 @rcaputo revised documentation
authored
772 Artur is the author of Filter::HTTPD and Filter::Reference, as well as
773 bits and pieces throughout POE. His intangible contributions include
774 feedback, testing, conceptual planning and inspiration. POE would
775 never have come this far without his support.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
776
726aee4 @rcaputo credit more people
authored
777 Artur is investing his time heavily into perl 5's ithreads at the
778 moment. This project has far-reaching implications for POE's future.
779
780 =item Jos Boumans
781
782 Jos Boumans is <boumans@frg.eur.nl>, aka C<Co-Kane>. Jos is a major
783 driving force behind the POE::Simple movement and is one of the POE
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
784 idea fairies. Jos is working with Ann on POE::Simple.
726aee4 @rcaputo credit more people
authored
785
786 =item Matt Cashner
787
788 Matt Cashner is <eek@eekeek.org>, aka C<sungo>. Matt is a POE
789 ambassador, or something, between Rocco's point of view and people who
790 haven't had the benefit of knowing the system since its conception.
791 He's spearheaded the movement to smiplify POE for new users,
792 flattening the learning curve and making the system more accessible to
793 everyone. He's almost singlehandedly rewriting POE's documentation.
794 He uses the system in mission critical applications, folding feedback
795 and features back into the distribution for everyone's enjoyment.
796
797 =item Andrew Chen
798
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
799 Andrew Chen is <achen-poe@micropixel.com>. Andrew is the resident
800 POE/Windows guru. He contributes much needed testing for Solaris on
801 the SPARC and Windows on various Intel platforms.
726aee4 @rcaputo credit more people
authored
802
f77c574 @rcaputo revised documentation
authored
803 =item Douglas Couch
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
804
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
805 Douglas Couch is <dscouch@purdue.edu>. Douglas maintains POE's PPD
806 for Windows as well as up-to-date online documentation at
807 http://poe.sourceforge.net/
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
808
726aee4 @rcaputo credit more people
authored
809 =item Jeffrey Goff
810
811 Jeffrey Goff is <jgoff@blackboard.com>. Jeffrey is the author of
812 several POE modules, including a tokenizing filter and a component for
813 managing user information, PoCo::UserBase. He's also co-author of "A
814 Beginner's Introduction to POE" at www.perl.com.
815
f77c574 @rcaputo revised documentation
authored
816 =item Philip Gwyn
d8788af @rcaputo Big documentation rewrite
authored
817
f77c574 @rcaputo revised documentation
authored
818 Philip Gwyn is <gwynp@artware.qc.ca>. He extended the Wheels I/O
819 abstraction to support hot-swappable filters, and he eventually
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
820 convinced Rocco that unique session and kernel IDs were a good thing.
d8788af @rcaputo Big documentation rewrite
authored
821
f77c574 @rcaputo revised documentation
authored
822 Philip also enhanced Filter::Reference to support different
823 serialization methods. His intangible contributions include the
824 discovery and/or destruction of several bugs (see the Changes file)
825 and a thorough code review around version 0.06.
d8788af @rcaputo Big documentation rewrite
authored
826
726aee4 @rcaputo credit more people
authored
827 =item Arnar M. Hrafnkelsson
828
829 Arnar is <addi@umich.edu>. Addi tested POE and POE::Component::IRC on
830 Windows, finding bugs and testing fixes. He appears throughout the
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
831 Changes file.
726aee4 @rcaputo credit more people
authored
832
f77c574 @rcaputo revised documentation
authored
833 =item Dave Paris
d8788af @rcaputo Big documentation rewrite
authored
834
f77c574 @rcaputo revised documentation
authored
835 Dave Paris is <dparis@w3works.com>. Dave tested and benchmarked POE
836 around version 0.05, discovering some subtle (and not so subtle)
837 timing problems. The pre-forking server sample was his idea.
838 Versions 0.06 and later should scale to higher loads because of his
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
839 work. He has contributed a lot of testing and feedback, much of which
840 is tagged in the Changes file as a-mused.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
841
761b0d6 @rcaputo speed up kernel; fix bad filehandle in test 4
authored
842 And I do mean *lots* of testing. I go and announce a new development
843 version, and he's, like, "All tests passed!" just a few minutes later.
844 If that wasn't enough, he investigates any bugs that turn up, and
845 often fixes them. The man's scarily good.
846
f77c574 @rcaputo revised documentation
authored
847 =item Dieter Pearcey
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
848
c575666 @rcaputo added Filter::Block and Dieter's FollowTail patches; finishing touches f...
authored
849 Dieter Pearcey is <dieter@bullfrog.perlhacker.org>. He goes by
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
850 several Japanese nicknames. Dieter's current area of expertise is in
851 Wheels and Filters. He greatly improved Wheel::FollowTail, and his
852 Filter contributions include the basic Block filter, as well as
853 Stackable, RecordBlock, Grep and Map.
c575666 @rcaputo added Filter::Block and Dieter's FollowTail patches; finishing touches f...
authored
854
f77c574 @rcaputo revised documentation
authored
855 =item Robert Seifer
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
856
d8788af @rcaputo Big documentation rewrite
authored
857 Robert Seifer is <e-mail unknown>. He rotates IRC nicknames
858 regularly.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
859
d8788af @rcaputo Big documentation rewrite
authored
860 Robert contributed entirely too much time, both his own and his
861 computers, towards the detection and eradication of a memory
862 corruption bug that POE tickled in earlier Perl versions. In the end,
863 his work produced a simple compile-time hack that worked around a
864 problem relating to anonymous subs, scope and @{} processing.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
865
da6a2f2 @rcaputo Matt Sergeant contributed POE::Kernel::Poll, an event loop substrate
authored
866 =item Matt Sergeant
867
868 Matt contributed POE::Kernel::Poll, a more efficient way to watch
869 multiple files than select().
870
726aee4 @rcaputo credit more people
authored
871 =item Richard Soderberg
872
873 Richard Soderberg is <poe@crystalflame.net>, aka C<coral>. Richard is
874 a collaborator on several side projects involving POE. His work
875 provides valuable testing and feedback from a user's point of view.
876
f77c574 @rcaputo revised documentation
authored
877 =item Dennis Taylor
197063a @rcaputo gutted and rewrote Filter::Line's innards for extra options
authored
878
879 Dennis Taylor is <dennis@funkplanet.com>. Dennis has been testing,
880 debugging and patching bits here and there, such as Filter::Line which
881 he improved by leaps in 0.1102. He's also the author of
726aee4 @rcaputo credit more people
authored
882 POE::Component::IRC.
197063a @rcaputo gutted and rewrote Filter::Line's innards for extra options
authored
883
f77c574 @rcaputo revised documentation
authored
884 =item Others?
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
885
f77c574 @rcaputo revised documentation
authored
886 Please contact the author if you've been forgotten.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
887
888 =back
889
890 =head2 Author
891
d8788af @rcaputo Big documentation rewrite
authored
892 =over 2
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
893
f77c574 @rcaputo revised documentation
authored
894 =item Rocco Caputo
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
895
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
896 Rocco Caputo is <rcaputo@cpan.org>. POE is his brainchild.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
897
626fc71 @rcaputo Bump the version number and halfheartedly revise the man page. The
authored
898 Except where otherwise noted, POE is Copyright 1998-2002 Rocco Caputo.
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
899 All rights reserved. POE is free software; you may redistribute it
900 and/or modify it under the same terms as Perl itself.
901
d8788af @rcaputo Big documentation rewrite
authored
902 =back
903
904 Thank you for reading!
905
0d6f19d @rcaputo Revised all the manpages. Split the manpages into separate PODs, and
authored
906 =cut
Something went wrong with that request. Please try again.