use IO::Socket::INET; my $server = new IO::Socket::INET(LocalAddr => '0.0.0.0', Proto => 'raw'); use My::MagicEventBasedModule; my $my_event_loop_handler_thing = new My::MagicEventBasedModule ( file_handler => $server, when_there_is_data_to_be_read => sub{ my ($data, $source_address, $source_port) = @_; print $data; $server->write("You've got data!"); } ); #maybe you have to "run" it like a thread in Python: $my_event_loop_handler_thing->run();