當我打開一個目錄opendir()并隨后readdir()連續呼叫兩次時,后者回傳一個空陣列。
最小示例.pl:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
opendir(my $DIRH, "/home") or die "Cannot open /home: $!\n";
my @FILES = readdir($DIRH);
my @FILES2 = readdir($DIRH);
print Dumper \@FILES;
print Dumper \@FILES2;
輸出:
$VAR1 = [
'.',
'..',
'users',
'sysadmin',
'ne'
];
$VAR1 = [];
這是預期的行為嗎?
uj5u.com熱心網友回復:
Perl 中的許多運算子根據它們是在串列還是標量背景關系中呼叫而回傳不同的。這是readdir的情況
回傳由 . 打開的目錄的下一個目錄條目
opendir。如果在串列背景關系中使用,則回傳目錄中的所有其余條目。如果沒有更多條目,則回傳標量背景關系中的未定義值和串列背景關系中的空串列。
由于readdir代碼中的回傳值被分配給一個陣列,它位于串列背景關系中,因此它會讀取該目錄中的所有內容。因此,當目錄句柄到達檔案串列的末尾時,下一個“讀取”回傳一個空串列(即使同時添加了更多檔案)。
我看不到兩次讀取檔案串列的預期效果,但是要多次處理目錄,可以使用rewinddir。
uj5u.com熱心網友回復:
是的,這是預期的行為。您第一次呼叫readdir()讀取整個目錄并將其內容分配給@FILES. 這沒有給第二個readdir()閱讀留下任何東西,所以它什么也沒有回傳。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521577.html
