Это действительно хороший запрос функции. К сожалению, за исключением того, что запрограммировал автор модуля, 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 для достижения этого.
Я ответил на общий подход, но в качестве опции в стороне 'DateTime' является defacto perl distro для представления дат. –
@ Evan Carroll, DateTime может быть самым популярным (и полнофункциональным), но вряд ли это единственный человек. Существует много модулей даты на Perl. – cjm