My Perl程序创建文件
10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.txt
然后在方法中我有一个代码:
if ( -e $report ) {
# we parse the filet here is some code, at the end
{
else
}
print "*** Skipping \\NYNAS\NYNDS\VOL\DATA\INVACCT\FUND_RECS_PFI\10001.ICNTL.20160603.PROD.GAAP.PFI\10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.TXT
}
我无法理解脚本为什么看不到该文件。我已经多次逐字检查了它。可能是因为大写TXT
,但实际上它是小写的吗?
答案 0 :(得分:2)
您的文件10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.txt
在目录\\NYNAS\NYNDS\VOL\DATA\INVACCT\FUND_RECS_PFI
中吗?
猜测你没有正确转义文件路径。即使您使用单引号,也无法在Uniform Naming Convention (UNC) paths中表示两个前导反斜杠,而无法转义其中至少一个
检查print $report, "\n"
的输出,看看你真正写的是什么
我的偏好是在路径字符串的开头使用四个反斜杠,就像这样
my $report = '\\\\NYNAS\NYNDS\VOL\DATA\INVACCT\FUND_RECS_PFI\10001.ICNTL.20160603.PROD.GAAP.PFI\10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.TXT';
print -e $report ? "Found\n" : "Not found\n";
Perl允许您在Windows路径中使用转发斜杠代替反斜杠,因此如果您愿意,可以编写此代码,但这样的路径在其他Windows中无效软件
my $report = '//NYNAS/NYNDS/VOL/DATA/INVACCT/FUND_RECS_PFI/10001.ICNTL.20160603.PROD.GAAP.PFI/10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.TXT';
或者另一种方法是重新定位当前的工作目录。您无法在Windows命令行上cd
到UNC路径,但Perl允许您成功chdir
chdir '//NYNAS/NYNDS/VOL/DATA/INVACCT/FUND_RECS_PFI' or die $!;
此后,所有相对文件路径将相对于联网系统上的这个新工作目录