我遇到了Perl的open()函数问题。它与名称以空格结尾的文件有关。如果我使用带有2个参数的open()(文件句柄和文件名)并且文件名以空格结尾,则open()失败。错误消息表示虽然文件存在,但找不到该文件。当指定打开模式时,例如,如果我明确声明该文件被打开以供阅读,则不会发生这种情况。以下是一些示例代码:
use warnings;
use strict;
my $file = '/tmp/test_with_ending_space ';
open WRITE, ">", $file or die "open with mode got error: $!";
print WRITE "my open() test\n";
close WRITE;
# open() with mode
open READ, "<", $file or die "open without mode got error: $!";
while (<READ>) {
print;
}
close READ;
# open() without mode
open READ1, $file or die $!;
while (<READ1>) {
print;
}
close READ1;
以下是此类代码的输出:
marius@mariusm-PC:~/perl$ ./test.pl
my open() test
open without mode got error: No such file or directory at ./test.pl line 21.
&#34;通常&#34;没有发生过这样的事情。文件名,即文件名以其他字符结尾时。
如果这是一个已知问题的任何想法?如果是的话,有没有办法解决它?
为了以防万一,在你开始告诉我&#34;好的之前,请指定模式并告诉open()如何打开文件&#34;。不幸的是,这个问题出现在一些核心模块中,例如IO :: File :: open()(我原先被卡住的地方)。此函数的最后一次调用是open($fh, $file)
,即它调用native open()而没有任何特定模式。
答案 0 :(得分:2)
答案 1 :(得分:-2)
@choroba给了&#34;为什么&#34;,但你也要求解决方法。
嗯,这非常糟糕,但如果您感到绝望并且无法更改open()
来电,这将会奏效。首先,检测文件名是否以空格结尾(我假设您可以处理)。如果是,则为文件创建一个临时符号链接(不带尾随空格!),然后打开符号链接。
我的(旧)Solaris 2.6框中的WFM。