我有以下代码尝试将内容写入日志文件:
sub write_log
{
local( $f ) = "$log_dir/$log_file";
$OUTPUT_FPATH = $f;
print "$OUTPUT_FPATH \n";
open( OUTPUT_FPATH, ">$f" ) ||
die "Error: cannot open output file '$f'\n";
}
我可以看到“OUTPUT_FPATH”指向正确的位置,如
/cygdrive/c/mylog/verify.log.
我也直接在cygwin控制台中使用了“echo”测试“> /cygdrive/c/mylog/verify.log”,这样可以正常使用
但是当我运行perl脚本时,为什么还会“无法打开....”
我确信此代码已经过测试,因此可能是我做错了什么,访问权限?或者还有什么呢?
附上一个重现错误的简单示例:
eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
& eval 'exec /usr/bin/perl -S $0 $argv:q'
if $running_under_some_shell;
sub write_log
{
local( $f ) = "/cygdrive/c/test/log.log";
$RT_OUTPUT_FH = $f;
printf $f;
open( RT_OUTPUT_FH, ">$f" ) || die "Error: cannot open output file '$f' \n";
}
sub main
{
write_log( "hahahaha" );
}
&main();
与"!$"
相同的错误 - > no such file or directory
虽然在cygwin promopt
中仍然如此 echo "hahahahahaha" > /cygdrive/c/test/log.log
答案 0 :(得分:0)
我确信此代码已经过测试,因此可能是我做错了什么,访问权限?或者还有什么呢?
验证调用的perl
确实是来自CygWin的Perl。
除了CygWin之外,如果您还安装了本机Windows Perl,那么您所看到的错误才有意义。
CygWin的Perl理解/cygdrive/
路径 - 本地Windows Perl不会。
要告诉彼此,请尝试例如system("ls /")
:CygWin和Windows对根目录有不同的理解(并且Windows没有ls
命令)。