The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict; use warnings FATAL => 'all';

use Lowu;

my $selected = [];

while ($selected->count < 6) {

  if ($selected->count == 5) {
    print " > Selected balls: ", $selected->join('-'), "\n";

    my $eball;
    do { 
      print "Select an extra ball between 1 and 35: ";
      $eball = <STDIN>;
      chomp $eball;
    } until $eball and $eball > 0 and $eball < 35;

    $selected->push($eball);

    last
  }

  my $ball;  do {
    my $current = $selected->count;
    print " > $current balls selected: ",
          $selected->join('-'), "\n";

    print "Select a ball between 1 and 59: ";
    $ball = <STDIN>;
    chomp $ball;
  } until $ball and $ball > 0 and $ball < 59
    and $selected->all_items != $ball;
  
  $selected->push($ball);
}

print " > You selected ", 
       $selected->sliced(0 .. 4)->join('-'), 
      " (",
       $selected->get(5), 
      ")\n";

my $balls = [ 1 .. 59 ]
              ->shuffle
              ->sliced( 1 .. 5 );
my $extra = [ 1 .. 35 ]
              ->random;

print "! Drew: ", $balls->join('-'), ' ', $extra, "\n";

my $hits = $selected->sliced(0 .. 4)
             ->grep(sub { $balls->any_items == $_[0] });

my $did_hit;  
if ($hits->has_any) {
  print "!! You hit on ", $hits->count, 
        " balls: ", $hits->join(', '), "\n";
  ++$did_hit
}

if ($selected->get(0) == $extra) {
  print "!! You hit on the extra ball ($extra)!\n";
  ++$did_hit
}

print " >> Better luck next time :(\n" unless $did_hit;