Problem is when I try the code used in the tutorial (copy & past, the download doesn't work) it only works partially.

The TCP-server starts up, accepts connections but after entering a test string ('foo=bar&quux=perl') and hitting enter it stops with this failure message:
Can't call method "put" on an undefined value at ./tcp_server.pl line 110.

Problem is the method put is called with a defined value,
Data Dumper gives this:

Let me start with a "Happy New Year!" to all perlmonks.
Your debugging print tip did the trick: it showed that $wheel_id (ARG1) is empty.
POE::Wheel::SocketFactory uses ARG3 not ARG1 for the wheels id.

Because of this I had to change the way the wheel id is passed from subroutine 'start' to 'factory_succes' to 'client_input'.
I used the HEAP variable (is this the correct way?)

Problem is now that it works with one telnet session.
As soon a second telnet session is started the script breaks connection with telnet session one.
As far I can see this is because POE::Wheel::SocketFactory reuses the wheel id from telnet session one for telnet session two.
I don't know why it does this because according to the documentation it should start a new 'wheel'.
Can somebody help me with this problem?

In the second part of the article concurrent telnet sessions work by using POE::Component::Server:TCP.
But I'm a bit stubborn and want to get the basics right before moving on...

Can't call method ``%s'' on an undefined value
(F) You used the syntax of a method call,
but the slot filled by the object reference
or package name contains an undefined value.
Something like this will reproduce the error:
$BADREF = undef;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);

MJDsays "you can't just make shit up and expect the computer to know what you mean, retardo!"