my @Events; while(1) { my %event = (); eval { %event = SECRET_PACKAGE_NAME::WaitForEvent($timeout); }; if($@) { # timeout occurred, serial burst complete last; } else { push (@Events, \%event); } }# end while ... while(@Events) { # Get the first event, NOT the last one my $EventRef = shift(@Events); } # $EventRef points to garbage