perl + Net::FTP::Recursive

Problem:
It will not advance to the next user in the list. It always dies right after it sends the 2/2 files from the first users dir.

$USERLIST="/export/home/mxdooley/perl_ftp/userlist";
$USER_DIR="/export/home/mxdooley/perl_ftp/homes";
$FTP_OUT_DIR="/export/home/mxdooley/perl_ftp/recieved";


sub ftp_out {
        print "SUB USER=$uname PASS=$pass HOST=$host\n";

        $ftp = Net::FTP::Recursive ->new("$host", Debug => 1) or die "HOST ERROR: ($@) ";
        $ftp->login("$uname","$pass") or die "UNAME/PASS ERROR: ",$ftp->message;
        $ftp->cwd("$FTP_OUT_DIR") or die "CWD ERROR: ",$ftp->message;
        $ftp->rput("${USER_DIR}/${uname}/*") or die "RPUT ERROR:",$ftp->message;
        #$ftp->quit;
}

open (USERLIST, $USERLIST) || die "MIKE ERROR: ($!)";
foreach (<USERLIST>) {
        chomp;
        push(@ULIST,$_);
}


foreach (@ULIST) {
        ($uname ,$pass ,$host)= split(/:/, $_);
	chdir ("$USER_DIR/$uname") || die "NO GO ($!)";
	ftp_out($uname ,$pass ,$host);
}

-- OUTPUT --
RPUT ERROR:ASCII data connection for test.synthium (10.40.11.28,44879).
Transfer complete.

is it me or am i not supposed to put the || dir blah blah after the rput line in the ftp sub.

Well, this sample from cpan.org looks basically the same as yours, except there's not "or die ..." parts, so maybe you could try temporarily removing them to see if it changes the behavior (in some positive way i hope :)). Also, you have "$ftp->quit;" commented out, so maybe the ftp session for the previous user is still active while the ftp session for the next user is attempting to be connected...

Although if it's not proceeding to the next user, wouldn't that suggest there's something wrong with the foreach loop and therefore (since the loop iterates at least once when it sends those 2 files) that perhaps the array @ULIST is not being populated the way you think it is? I am completely pulling at strings here, it's been awhile since I've messed with Perl...