Perl错误:打开文件时参数无效

时间:2013-09-11 04:03:43

标签: perl

我是perl的新手。我试图执行下面提到的程序:

我正在尝试打开文件并从文件中读取内容。

$FILE=open(FILE,"\\10.82.71.28\Testing501\Test_Folder\834_KMS_FACE_834A.mms");
 if($FILE)
  {
   print "The file: $FILE has opened successfully";
  }
 else
{
  die "There is an error while opening the file :$!\n";
}

while($record=<FILE>)
{
  print $record;
}

close(FILE);

但是在执行程序时,我遇到了一个错误:

打开文件时出错:无效参数

5 个答案:

答案 0 :(得分:6)

如果你执行

print "\\10.82.71.28\Testing501\Test_Folder\834_KMS_FACE_834A.mms";

你得到了

Unrecognized escape \T passed through at a.pl line 1.
Unrecognized escape \T passed through at a.pl line 1.
Unrecognized escape \8 passed through at a.pl line 1.
\10.82.71.28Testing501Test_Folder834_KMS_FACE_834A.mms

(您确实使用use strict; use warnings;,对吧?)

您希望代码生成以下字符串:

\\10.82.71.28\Testing501\Test_Folder\834_KMS_FACE_834A.mms

如上所示,以下内容显然不会产生所需的字符串:

"\\10.82.71.28\Testing501\Test_Folder\834_KMS_FACE_834A.mms"

您可以使用以下内容:

"\\\\10.82.71.28\\Testing501\\Test_Folder\\834_KMS_FACE_834A.mms"

答案 1 :(得分:2)

使用q文字来逃避像这样的反斜杠

$filepath = q{\\\10.82.71.28\Testing501\Test_Folder\834_KMS_FACE_834A.mms};

open my $FILE, '<', "$filepath" or die "path: $!"
while($record = <$FILE>) {
---
}

答案 2 :(得分:1)

尝试:

open my $file, '<', 'path' or die "path: $!"
while($record = <$file>) ...

裸文件句柄非常老式,使用词法范围的文件句柄被认为是一种很好的做法。首先,当变量超出范围时,文件将被关闭。此外,开放的3种论证形式实际上是目前唯一被认为是可敬的形式。没有理由使用任何其他形式。

答案 3 :(得分:1)

您已经接受了答案,但您始终可以使用正斜杠而不是反斜杠。

$FILE=open(FILE,"//10.82.71.28/Testing501/Test_Folder/834_KMS_FACE_834A.mms");

顺便说一下,标准的Perl方式是使用or

open(FILE,"//10.82.71.28/Testing501/Test_Folder/834_KMS_FACE_834A.mms") 
     or die qq(...);

并且,最好使用三参数形式,并使用标量变量作为文件句柄。它使得将文件作为子例程参数传递变得更容易:

my $file_name = '//10.82.71.28/Testing501/Test_Folder/834_KMS_FACE_834A.mms';
open my $fh, "<", $file_name 
   or die qq(Couldn't open the file $file_name);

答案 4 :(得分:0)

git.exe使用该文件时出现此错误。 它实际上可以伪装成拒绝访问。