&引用;无法打开文件";对于cygwin下的perl
我有以下代码试图将内容写入日志文件:&引用;无法打开文件";对于cygwin下的perl,perl,cygwin,Perl,Cygwin,我有以下代码试图将内容写入日志文件: 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\u FPATH”指向正确的位置,如 /cygdrive/
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\u FPATH”指向正确的位置,如
/cygdrive/c/mylog/verify.log.
我还直接在cygwin控制台中使用了“echo”test“>/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();
“!$”
->没有这样的文件或目录时也会出现同样的错误
虽然它在cygwin Promot中仍然像这样工作
echo "hahahahahaha" > /cygdrive/c/test/log.log
我确信这段代码已经过测试,所以可能是我做错了什么,对吗?或者还能是什么
验证调用的perl
确实是来自CygWin的perl
您看到的错误只有在除了CygWin之外还安装了本机Windows Perl的情况下才有意义
CygWin的Perl能够理解/cygdrive/
路径,而本机Windows Perl则不能
要区分两者,请尝试例如
system(“ls/”
:CygWin和Windows对根目录的理解不同(而Windows没有ls
命令)。使用$在die
消息中的code>error reporting变量,找出打开失败的原因。例如,die“无法打开$f:$!”
您还应该知道,以换行符结束die
消息会禁止行号显示在die消息中。@TLP没有这样的文件或目录……我不熟悉cygwin如何处理路径,但这似乎是错误的一个可能来源。您的输出路径似乎在路径的末尾包含一个点。@mpapec无法打开:在-e行1没有这样的文件或目录,但我发现了一些东西,忘了提到我从visual studio提示符切换到cygwin,从visual studio提示符运行“c:\cygwin\cygwin.bat”,我刚试过原始cygwin的测试,它没有给我错误。路径应为windows/cygwin格式差异。。。。。