Как я могу проверить, не удалось ли `File :: Path :: remove_tree`? - PullRequest
1 голос
/ 24 сентября 2010

Я привык `... или умирать" ... не удалось ... $! ";.

Я был удивлен, обнаружив, что для того, чтобы узнать, не удалось File::Path::remove_tree или нет, ядолжен сделать что-то вроде этого:

remove_tree( 'foo/bar', 'bar/rat', {error => \my $err} );
if (@$err) {
 die "error..."
}

Я что-то упустил?Это действительно путь?

Много ненужного мне кода ...

Ответы [ 3 ]

3 голосов
/ 24 сентября 2010

remove_tree возвращает количество успешно удаленных файлов, поэтому ему необходим другой способ сообщения об ошибке, чем возвращаемое значение. Имейте в виду, что ряд файлов, возможно, был удален до того, как возникла ошибка, поэтому нельзя полагаться, что возвращаемое значение равно 0 как указывающее на ошибку.

Является ли это способом сообщения об ошибках - дело вкуса. Из самих документов:

Примечание: Следующий механизм обработки ошибок считается экспериментальным и может быть изменен в ожидании отзывов пользователей.

1 голос
/ 25 сентября 2010

Документы говорят, что возникают исключения:

Если make_path или remove_tree сталкиваются с ошибкой, диагностическое сообщение будет напечатано в STDERR через carp (для нефатальных ошибок) или через квака (для фатальных ошибок).

Это позволило нам использовать стандартную обработку исключений, по крайней мере, для ошибок, помеченных как фатальные.

use Try::Tiny;
try {
    … remove_tree …
} catch {
    warn "remove_tree failed: $_";
};

Предупреждения могут быть фатализированыкак-то тоже, но я не могу сейчас ничего приличного, кроме псевдонимов File::Path::_carp к File::Path::_croak.

1 голос
/ 24 сентября 2010

Я удаляю по одному пути за раз, затем проверяю, существует ли он там потом:

 foreach my $path ( @paths ) {
      my $rc = remove_tree( $path, { ... } );
      die ... if -e $path;
      }

Как и Данкрамб сказал , вы не можете доверять возвращаемому значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...