in reply to Confusing Uninitialized warning

Maybe the line number in the error message is wrong. That happens (particularly when the error is in an elsif). If defined($data{'FLOATER'}) is true as you say, it makes no sense for the if to give you that warning.

Update: Additionally, you're probably better off passing the hash by reference. It saves memory, executes faster and preserves tie magic. For example:

sub test { my ($data) = @_; ... print($data->{'FLOATER'}); # Need to add "->" ... } my %data = ...; test(\%data);