Это действительно хороший запрос.К сожалению, если не считать того, что запрограммировал автор модуля, Perl не знает, есть ли у модуля варианты XS или Pure Perl (PP) и загружен ли двигатель из-за отказа.
Этот пример, который вы привели, составлен изэффект, что они упакованы в один и тот же дистрибутив и модуль, и все это делается изнутри.Я бы исправил его в соответствии с соглашением CPAN: DateSimple
, которое требует DateSimple::PP
и рекомендует DateSimple::XS
.Вот как Text::CSV
и другие это делают.Этот метод позволяет напрямую использовать конструктор ::XS
для принудительного использования XS
и в то же время даже не устанавливать вариант pureperl.Кроме того, вы можете упаковать их вместе - это то, что Template::Stash
делает с Template::Stash::XS
.Первый шаг к получению чего-либо унифицированного - это получение функциональности ad-hoc.
Подобного рода вещи можно было бы легко сделать, если бы все модули извлекали Moose::Role
, который предоставлял несколько основных атрибутов _xs_class_name
, _pp_class_name
и engine_override
.Но, опять же, на данный момент нет ничего, что могло бы даже создать единый API для достижения этой цели.