我在使用Perl的open()函數時遇到問題。它與名稱以空白結尾的文件有關。如果我用2個參數(文件句柄和文件名)使用open(),並且文件名以空格結尾,則open()失敗。錯誤消息說,雖然文件存在,但無法找到文件。指定打開模式時不會發生這種情況,例如,如果我明確聲明該文件已打開以供閱讀。下面是一些示例代碼:當文件名以空格結尾時,perl的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;
,這裏是從這樣的代碼輸出:
[email protected]:~/perl$ ./test.pl
my open() test
open without mode got error: No such file or directory at ./test.pl line 21.
沒有這樣的事情「通常」的文件名,即發生時的文件名與其他一些字符結束。
任何想法,如果這是一個已知的問題?如果是的話,有沒有辦法如何解決它?
爲了以防萬一,在開始告訴我「不錯,請指定模式並告訴您open()如何打開文件」。不幸的是,這個問題出現在一些核心模塊中,例如IO :: File :: open()(這是我原來被卡住的地方)。這個函數中的最後一次調用是open($fh, $file)
,即它調用本地open()而沒有任何特定的模式。
啊,我的壞。我之前瀏覽過這個文檔,但不知何故,這部分從我的觀點中逃脫了。 – MariusM 2014-10-06 12:24:15
@choroba:斑點。這不是在實踐中出現的問題,也不是我所知道的。這是傳播開放的三參數形式的另一個理由(假設暗示任何*其他*而不是*「單參數和雙參數形式的開放」*沒有這個問題)。 – Borodin 2014-10-06 15:34:32
@Borodin:的確如此。 – choroba 2014-10-06 15:40:57