我試圖將目錄中的每個文本文件讀入一個變量,然後打印前100個字符,包括換行符。但是,Perl說這些文件即使確實存在,也不存在。Perl打開:沒有這樣的文件或目錄
use strict;
use warnings;
my $dir = "C:\\SomeFiles";
my @flist;
open(my $fh, "dir /a:-d /b $dir |") || die "$!";
while (<$fh>) {
if ($_ =~ /.*(.txt)$/i) {
push(@flist, $_);
}
}
foreach my $f (@flist) {
print "$dir\\$f";
my $txt = do {
local $/ = undef;
open(my $ff, "<", "$dir\\$f") || die "$!";
<$ff>;
};
print substr($txt, 0, 100);
}
當我運行該腳本,下面是寫入控制檯:
C:\SomeFiles\file1.txt
No such file or directory at script.pl line 19, <$fh> chunk 10.
它尋找正確的文件,我敢肯定,該文件存在。當我嘗試使用此方法打開單個文件而不是通過使用foreach
的數組獲取每個文件時,它工作得很好。有什麼顯而易見的,我在這裏忽略了?
當心隱藏空白:使用'chomp' – ThisSuitIsBlackNot
而且,整個文件讀入內存僅僅打印前100個字符是浪費的。爲什麼不使用'read'? – ThisSuitIsBlackNot
@ThisSuitIsBlackNot:打印前100個字符是一個示例任務,用於解釋我遇到的問題。我的真實任務涉及整個文件,與公開問題無關。 (在嘗試打開文檔之前,嘗試將其用於任何事情時發生該錯誤。) –