我有一个Perl脚本,它拒绝查看现有数据文件。当我获取代码并隔离到测试Perl脚本中时,它可以正常工作,但在主perl脚本中,它找不到任何东西。
代码如下:
use Cwd qw(cwd);
my $dir = cwd;
print STDERR "gen-decsplecs : dir $dir : file $ARGV[0]\n";
if (-e $ARGV[0]) {
print STDERR "gen-declspecs : File Exists : $ARGV[0]\n";
} else {
print STDERR "gen-declspecs : File does not exist : $ARGV[0]\n";
}
if (-e "C:/Users/walter/Documents/Projects/agar-1.5.0/ada-core/ctxt.h") {
print STDERR "gen-declspecs : File Exists : C:/Users/walter/Documents/Projects/agar-1.5.0/ada-core/ctxt.h\n";
} else {
print STDERR "gen-declspecs : File does not exist : C:/Users/walter/Documents/Projects/agar-1.5.0/ada-core/ctxt.h\n";
}
open(F, $ARGV[0]) || die "$ARGV[0]: $!";
此打印:
gen-decsplecs : dir C:/Users/walter/Documents/Projects/agar-1.5.0 : file './ada-core/ctxt.h'
gen-declspecs : File does not exist : './ada-core/ctxt.h'
gen-declspecs : File Exists : C:/Users/walter/Documents/Projects/agar-1.5.0/ada-core/ctxt.h
'./ada-core/ctxt.h': No such file or directory at mk/gen-declspecs.pl line 93.
gen-declspecs.pl failed
所以我的问题是代码是否正在执行fomr目录:
C:/Users/walter/Documents/Projects/agar-1.5.0
正在寻找文件:
./ ada-core / ctxt.h
为什么在完整路径文件时相对路径上不存在它:
C:/用户/沃尔特/文档/项目/agar-1.5.0/ada-core/ctxt.h
存在吗?特别是当我将perl复制到测试脚本并且可以正常工作时!!
答案 0 :(得分:1)
如果这行:
print STDERR "gen-declspecs : File does not exist : $ARGV[0]\n";
(不包含单引号)正在打印以下输出:
gen-declspecs : File does not exist : './ada-core/ctxt.h'
(确实如此),则意味着您的$ARGV[0]
以虚假单引号开头和结尾。 -e
不会删除这些内容;据了解,也许您真的对名为'.
的文件夹感兴趣,该文件夹包含名为ada-core
的文件夹,其中包含名为ctxt.h'
的文件!
要解决此问题,您需要正确运行脚本;请勿在其参数中添加虚假的单引号。
(如果您来自类似Unix的环境,则需要知道默认的Windows Shell根本不使用相同的引用规则。)