-s
не всегда возвращает ноль для каталогов. Он всегда может вернуть ноль на Windows, но я не знаю такой гарантии. Возможно, что -s
ведет себя по-разному в разных Windows системах или для разных файловых систем. И вполне возможно, что он может вести себя по-разному в разных версиях Perl.
И почему?
defined( my $size = -s $qfn )
or do {
warn("Skipping $qfn: $!\n");
next;
};
$total_size += $size;
или
stat($qfn)
or do {
warn("Skipping $qfn: $!\n");
next;
};
$total_size += -s _;
действительно лучше, чем
stat($qfn)
or do {
warn("Skipping $qfn: $!\n");
next;
};
$total_size += -s _ if -f _;
Другими словами, действительно хорошая идея - полагаться на читателя, зная, что каталоги и любые другие типы специальных файлов могут возвращать нулевой размер файла, особенно если вы сами этого не знаете?