Программист победил race condition в модуле MkDir из предыдущей задачи:
Файл можно скачать: MkDir5.pm .
Неужели здесь еще остались ошибки?
Увы, когда скрипту все-таки не удается создать каталог, он выводит какие-то странные сообщения…
Можно скачать пример использования и убедиться своими глазами.
Например, если обычным пользователем
попытаться создать каталог /roooot
,
ожидаемо было бы увидеть ошибку Permission denied
,
но вместо этого выдается
No such file or directory
.
perldoc -v '$!'
Если оператор -d
не находит
указанный каталог, он заполняет переменную
$!
, и к моменту
выполнения die "Can't create dir $dir: $!";
эта переменная уже не содержит
информации о том, почему не прошел mkdir
.
Чтобы всегда видеть правильные сообщения, стоило бы сохранять сообщение об ошибке в обыкновенной пользовательской переменной:
На этом заканчивается эпопея нашего программиста с рекурсивным созданием каталогов.
Впрочем, кто знает: возможно, через полгода ему придется исправлять даже этот “хороший” код.