my $ftp = Net::FTP->new($_[0], Debug => 1) or die "Cannot connect to $_[0]"; $ftp->login($_[1],$_[2]) or die $login_failed_message; ... $ftp->put($_[3]) or die "get failed ", $ftp->message; #### my $ftp_message = 'n/a'; eval { $ftp_message = upload_file($server_ip,$server_user,$server_pass,$file_to_upload,$os); }; if ($@) { # catched an exception $ftp_message = "Error: $@"; ... } else { ... } #### { # temporarily change Net::Cmd::debug_print my $log_buffer; local *Net::Cmd::debug_print = sub { my ($self, $dir, $text) = @_; $log_buffer .= ($dir ? 'snd --> ' : 'rcv <-- ') . $text; }; my $ftp = Net::FTP->new($_[0], Debug => 1) or die "Cannot connect to $_[0]"; ... $ftp->quit; print "Log:\n$log_buffer\n"; } # recovers previous behaviour of Net::Cmd::debug_print