in reply to Net::FTP output to array

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;
Probably one of the many die()'s triggered? You could wrap the call to upload_file() with an eval block:
my $ftp_message = 'n/a'; eval { $ftp_message = upload_file($server_ip,$server_user,$server_pass,$fil +e_to_upload,$os); }; if ($@) { # catched an exception $ftp_message = "Error: $@"; ... } else { ... }

Update: Oops, misread the question (but you still need to handle exceptions).

One possibility is to hook into the Net::Cmd::debug_print() method, which performs sending the debug messages to STDERR:

{ # 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

Replies are listed 'Best First'.
Re^2: Net::FTP output to array
by packetstormer (Monk) on Aug 18, 2011 at 10:39 UTC
    Hey - that works perfectly. Thanks! I have spent a lot of time on this. Really appreciate it!
Re^2: Net::FTP output to array
by packetstormer (Monk) on Aug 18, 2011 at 09:45 UTC
    Thanks for the reply. However, the script runs correctly and does it's job. The problem I am having is catching it's output.