似乎CPAN上的一些(很多?)模块部分使用XS在C中实现,并且如果需要可以回退到纯perl实现.虽然这很聪明,但它显然会损害性能,我想知道它发生了所以我可以解决问题.
是否有停止或检测此类后备的一般方法?
有关此行为的示例,请查看(非常方便)@L_301_0@(code snippet)
解决方法
任何解决方案都必须基于每个模块(因为决定使用哪个实现由父模块本身,而不是Perl中的某些机制).在您引用的情况下,在use语句之后检查$Date :: Simple :: NoXs的值将告诉您是否正在使用XS.
use Date::Simple; die "not using XS for Date::Simple\n" if $Date::Simple::NoXs;
例如,要检测Scalar :: Util是否使用XS或纯Perl版本,您必须检查是否存在双变量函数.
use Scalar::Util; die "not using XS for Scalar::Util\n" unless if @Scalar::Util::EXPORTFAIL;