Para escribir un servidor basta con heredar de la clase Net::Server. Si se quiere un servidor con cierta personalidad se debe heredar de la correspondiente clase específica Net::Server::Multiplex.
pp2@nereida:~/src/perl/NET_SERVER$ cat -n synopsis.pl
 1  #!/usr/bin/perl -w -T
 2  package MyPackage;
 3
 4  use base qw(Net::Server); # Heredamos de Net::Server
 5
 6  sub process_request {
 7      my $self = shift;
 8      while (<STDIN>) {
 9          s/\r?\n$//;
10          print "You said '$_'\r\n"; # basic echo
11          last if /quit/i;
12      }
13  }
14
15  MyPackage->run(port => 16000);
La definición de la conducta del servidor proveído se completa y/o modifica 
mediante la definición de ciertos métodos.
quizá el mas esencial sea el método  process_request  cuya función
es manejar la comunicación: dar el servicio. Es llamado con el objeto
Net::Server como argumento. Cuando se le llama STDIN y STDOUT
han sido redirigidos al socket conectado al cliente. 
El método run arranca el servicio. Existen múltiples formas de llamarlo:
       MyPackage->run(port => 20201);
       MyPackage->new({port => 20201})->run;
       my $obj = bless {server=>{port => 20201}}, 'MyPackage';
       $obj->run;
sigue un ejemplo de ejecución:
| pp2@nereida:~/src/perl/NET_SERVER$ ./synopsis.pl 2008/05/22-18:24:26 MyPackage (type Net::Server) starting! pid(26653) Binding to TCP port 16000 on host * Group Not Defined. Defaulting to EGID '1040 1040 1012 33' User Not Defined. Defaulting to EUID '1040' | 
| pp2@nereida:~/src/perl/NET_SERVER$ telnet localhost 16000 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Hello! You said 'Hello!' Formidable! You said 'Formidable!' quit You said 'quit' Connection closed by foreign host. | 
El método definido por defecto para process_request es básicamente igual al del ejemplo anterior e implanta un sencillo servidor de eco. Esta ejecución muestra como re-escribir el servidor el ejemplo anterior en una línea:
| $ perl -MNet::Server -e 'use base 'Net::Server'; __PACKAGE__->run' 2008/05/27-16:04:58 main (type Net::Server) starting! pid(18510) Port Not Defined. Defaulting to '20203' Binding to TCP port 20203 on host * Group Not Defined. Defaulting to EGID '1040 1040 1012 33' User Not Defined. Defaulting to EUID '1040' | 
| $ telnet localhost 20203 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Welcome to "main" (18510) JAPH main:18510: You said "JAPH" Just Another Perl Hacker main:18510: You said "Just Another Perl Hacker" quit main:18510: You said "quit" Connection closed by foreign host. pp2@nereida:~/doc/book$ | 
Casiano Rodríguez León
