当文件名以空格结尾时,perl的open()有时会失败

时间:2014-10-06 12:16:15

标签: perl io

我遇到了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()而没有任何特定模式。

2 个答案:

答案 0 :(得分:2)

它记录在open

  

文件名传递给单参数和双参数形式                  open()将删除前导和尾随空格

阅读以下paragrpahs以获取更多详细信息。

答案 1 :(得分:-2)

@choroba给了&#34;为什么&#34;,但你也要求解决方法。

嗯,这非常糟糕,但如果您感到绝望并且无法更改open()来电,这将会奏效。首先,检测文件名是否以空格结尾(我假设您可以处理)。如果是,则为文件创建一个临时符号链接(不带尾随空格!),然后打开符号链接。

我的(旧)Solaris 2.6框中的WFM。