sub fd_retrieve { my ($file) = @_; my $fd = fileno($file); # <== THIS IS THE CALL logcroak "not a valid file descriptor" unless defined $fd; my $self; my $da = $@; # Could be from exception handler eval { $self = pretrieve($file) }; # Call C routine logcroak $@ if $@ =~ s/\.?\n$/,/; $@ = $da; return $self; }