在cygwin下为perl“无法打开文件”

时间:2014-11-17 12:43:00

标签: 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_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 

1 个答案:

答案 0 :(得分:0)

  

我确信此代码已经过测试,因此可能是我做错了什么,访问权限?或者还有什么呢?

验证调用的perl确实是来自CygWin的Perl。

除了CygWin之外,如果您还安装了本机Windows Perl,那么您所看到的错误才有意义。

CygWin的Perl理解/cygdrive/路径 - 本地Windows Perl不会。

要告诉彼此,请尝试例如system("ls /"):CygWin和Windows对根目录有不同的理解(并且Windows没有ls命令)。