What I've got is baed on a code snippet that I was given by someone working on the mainframe. I translated it to use in Perl. There are a few things I'm not quite sure about namely PRI and SEC (I think this has to do with disk allocation on the mainframe).
Note, the (+1) after the dataset name indicates that the data set is a plus one generation (the generation number is incremented by one each time a file is sent. Block size, record Length, Record Format and whether it is a generational dataset is determined by the mainframe and they would have to tell you (assuming it matters). Also, I have found that the transfer works when surrounded by the single quotes - even if I were doing this on the command-line FTP client. This may not all be necessary for the mainframe Z/OS, but might get you going in the right direction. Good luck.$ftp->site("PRI=<some number>","SEC=<some number>", "TRacks", "RECfm=<record format - either Fixed Block or Variable Bloc +k", "LRecl=<record length number>", "BLocksize=<block size number>", "Unit=<not sure about this one>") or die "Cannot set SITE c +ommand. $!"; $ftp->site("trail") or die "Cannot issue SITE 'trail' command. $!"; $ftp->put("<file-name>","\'Data.Set.Name(+1)\'") or die "Cannot put <f +ile-name> to Data.Set.Name. $!";