В чем разница между модулями Perl autodie и Fatal?

Модули Perl autodie и Fatal, кажется, делают схожие вещи. Каковы причины использования одного предпочтения к другому?

4 ответа

Решение

Модуль Fatal был добавлен в ядро ​​Perl в версии 5.05 (1998). Модуль Fatal имеет некоторые существенные недостатки и несоответствия в своем API, которые не могут быть исправлены обратно совместимым способом (то есть: исправление API приведет к поломке существующего кода, который использует Fatal).

Более новый модуль autodie был написан, чтобы обеспечить более согласованный API и позволить лексически ограничить эффект прагмы, а не глобальный (что может иметь неожиданные побочные эффекты).

Если у вас есть выбор, вы определенно должны предпочесть autodie. Он будет включен в качестве основного модуля в следующей версии Perl 5.12.

Модуль Autodie требует Perl 5.8. Единственная причина, по которой вы бы использовали Fatal, - это то, что вы застряли с действительно старой версией Perl (например, 5.6), но с 2002 года вышла 5.8, так что надеюсь, что это не так.

Цитировать Фатальную документацию

Fatal устарела благодаря новой прагме autodie. Пожалуйста, используйте autodie вместо Fatal. autodie поддерживает лексическую область видимости, создает реальные объекты исключений и предоставляет гораздо более приятные сообщения об ошибках.

Еще одна причина использовать autodie вместо Fatal - это избежать этой ошибки (из раздела BUGS документации Fatal):

Фатальный затормаживает контекст, в котором вызывается функция, и всегда делает его скалярным контекстом, кроме случаев, когда используется тег:void. Эта проблема не существует в autodie.

Autodie статьи Пола Фенвика - Искусство программирования Klingon начинается с объяснения некоторых недостатков Fatal.

Другие вопросы по тегам