1

我是 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);

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

打开文件时出错:invalid argument

4

5 回答 5

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"
于 2013-09-11T04:13:22.010 回答
3

像这样使用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>) {
---
}
于 2013-09-11T05:25:18.227 回答
1

尝试:

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

裸文件句柄是非常老式的,使用词法范围的文件句柄被认为是一种很好的做法。一方面,当变量超出范围时,文件将被关闭。此外,open 的 3 参数形式实际上是当今唯一被认为是可敬的形式。真的没有理由使用任何其他形式。

于 2013-09-11T04:09:42.357 回答
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);
于 2013-09-11T16:09:51.397 回答
0

当 git.exe 使用该文件时出现此错误。真的可以变相拒绝访问。

于 2015-03-19T21:09:40.190 回答