Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;无法打开文件";对于cygwin下的perl_Perl_Cygwin - Fatal编程技术网

&引用;无法打开文件";对于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格式差异。。。。。