2015-04-15 1 views

ответ

5

Кстати, не используйте undef $d - $d = undef предпочтительнее.

Есть несколько способов - все они просто, если вы знаете, Perl или регулярные выражения

Самым очевидным

while (defined(my $node = $d->read)) { 
    next if $node eq '.' or $node eq '..'; 
    print "$dir\n"; 
} 

Использование регулярных выражений

while (defined(my $node = $d->read)) { 
    next if $node =~ /\A\.\.?\z/; 
    print "$dir\n"; 
} 

или, более опрятно, но менее безопасно потому что узел каталога Linux может иметь такие имена, как ... и .... и т. д., вы можете просто убедиться, что узел содержит что-то другое t [.] [.]? Хань точка .

while (defined(my $node = $d->read)) { 
    next unless $node =~ /[^.]/; 
    print "$dir\n"; 
} 
+0

Спасибо. Я это попробую. – Chetu

+4

Чтобы расшифровать комментарий Бородина, '$ d = undef;' устанавливает var в undefined, а 'undef $ d;' также освобождает некоторую память, связанную со скаляром, что делает ее более дорогостоящей для использования этой переменной. – ikegami

 Смежные вопросы

  • Нет связанных вопросов^_^