我是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);
但是在执行程序时,我遇到了一个错误:
打开文件时出错:无效参数
答案 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使用该文件时出现此错误。 它实际上可以伪装成拒绝访问。