我正在尝试编写一个 perl 脚本(如下)来自动将源文件从 Windows 上传到 z/OS(又名 MVS 或 OS/390)。put() 方法似乎在 z/OS 上的远程数据集(文件)名称前加上我登录时使用的用户 ID(“JCARTER”)。我要上传到的远程数据集名称是“FSI.V121P01.INSTALL”,它是一个分区数据集 (PDS)。目标数据集名称的前缀为“JCARTER”会导致找不到数据集,并且 put() 失败。我尝试了不同的方法来引用目标文件名,但我的用户 ID 仍然附加在文件名之前。我也尝试使用 cwd() 设置 cwd,使用 quote('SITE', 'QUOTESOVERRIDE') 和 quote('SITE', 'DATASETMODE'),但仍然没有成功。
这是脚本:
use strict;
use Net::FTP;
my $HostIP="xxx.xxx.xxx.xxx";
my $ftp;
$ftp = Net::FTP -> new ($HostIP) or die "Cannot connect to zOS: $@";
$ftp->login("userid","pw") or die "Cannot login.", $ftp->message;
$ftp->ascii();
#$ftp->cwd();
#$ftp->quot('SITE', 'QUO');
#$ftp->quot('SITE', 'DATAS');
print $ftp->message;
$ftp->pwd();
print $ftp->message;
$ftp->put('J:\REL122\RPS100\A2WBLIB\C\a2wversn.c', 'FSI.V121P01.INSTALL(A2WVERSN)');
print $ftp->message;
$ftp->quit;
运行上面的程序会产生以下消息:
表示类型是 Ascii NonPrint "'JCARTER.'" 是工作目录。JCARTER.FSI.V121P01.INSTALL(A2WVERSN) 请求一个不存在的分区数据集。使用 MKD 命令创建它。
当我尝试添加 cwd("") 以删除当前工作目录时,我得到:
表示类型是 Ascii NonPrint "'JCARTER.'" 是工作目录。“/”是 HFS 工作目录。存储数据集 /FSI.V121P01.INSTALL(A2WVERSN) 打开 /FSI.V121P01.INSTALL(A2WVERSN) 失败。
看来我已经很接近了。有什么建议么 ?谢谢 - 约翰