簡體   English   中英

Perl打開:沒有這樣的文件或目錄

[英]Perl Open: No such file or directory

我試圖將目錄中的每個文本文件讀入變量,然后打印前100個字符,包括換行符。 但是,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通過數組獲取每個文件時,它工作得很好。 我在這里忽略了什么明顯的東西嗎?

更好的解決方案是改用readdir()(或如果要遞歸地使用File :: Find ):

my $dir = "C:\\SomeFiles";

opendir(my $dh, $dir) || die "$!";

while (my $file = readdir($dh)) {
    if ($file =~ /\\.txt$/i) {
        print $file . "\n";
        my $txt = do {
            local $/ = undef;
            open(my $ff, "<", "$dir\\$file") || die "$!";
            <$ff>;
        };
        print substr($txt, 0, 100) . "\n";
    }
}

closedir($dh);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM