The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/opt/perl/bin/perl

use strict;

use AnyEvent;
BEGIN { require AnyEvent::Impl::Perl unless $ENV{PERL_ANYEVENT_MODEL} }
use AnyEvent::Socket;
use AnyEvent::Handle;

unless ($ENV{PERL_ANYEVENT_NET_TESTS}) {
   print "1..0 # Skip PERL_ANYEVENT_NET_TESTS environment variable not set\n";
   exit 0;
}

print "1..2\n";

my $cv = AnyEvent->condvar;

my $rbytes;

my $hdl; $hdl =
   AnyEvent::Handle->new (
      connect => ['www.google.com', 80],
      on_error => sub {
         warn "handle error: $_[2]";
         $cv->broadcast;
      },
      on_eof => sub {
         my ($hdl) = @_;

         if ($rbytes !~ /<\/html>/i) {
            print "not ";
         }

         print "ok 2 - received HTML page\n";

         $cv->broadcast;
      }
   );

$hdl->push_read (chunk => 10, sub {
   my ($hdl, $data) = @_;

   unless (substr ($data, 0, 4) eq 'HTTP') {
      print "not ";
   }

   print "ok 1 - received 'HTTP'\n";

   $hdl->on_read (sub {
      my ($hdl) = @_;
      $rbytes .= $hdl->rbuf;
      $hdl->rbuf = '';
      return 1;
   });
});

$hdl->push_write ("GET http://www.google.com/ HTTP/1.0\015\012\015\012");

$cv->wait;