我的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 \NYNASNYNDSVOLDATAINVACCTFUND_RECS_PFI10001.ICNTL.20160603.PROD.GAAP.PFI10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.TXT
}
我不明白为什么脚本看不到该文件。我已经一封一封信检查了好几遍。会不会是因为大写TXT
,但实际上它是小写的?
您的文件是否10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.txt
在目录\NYNASNYNDSVOLDATAINVACCTFUND_RECS_PFI
中?
猜测您没有正确转义文件路径。即使使用单引号,也无法在不转义其中至少一个的情况下表示统一命名约定(UNC) 路径中的两个前导反斜杠
检查print $report, "n"
的输出,看看你真正写了什么
我更喜欢在路径字符串的开头使用四个反斜杠,如下所示
my $report = '\\NYNASNYNDSVOLDATAINVACCTFUND_RECS_PFI10001.ICNTL.20160603.PROD.GAAP.PFI10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.TXT';
print -e $report ? "Foundn" : "Not foundn";
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 $!;
此后,所有相对文件路径都将相对于网络系统上的这个新工作目录