如果我有很多使用了许多模块的 Perl 代码,有没有一种快速简便的方法可以找出其中哪些模块不是纯 Perl 模块?
@DynaLoader::dl_modules
包含已加载的XS模块列表。
perl -MSome::Module1 -MSome::Module2 -M... \
-MDynaLoader -E'say for sort @DynaLoader::dl_modules;'
或者,如果你想要将它作为脚本编写:
# Usage: script Some::Module1 Some::Module2 ...
use 5.010;
use DynaLoader qw( );
while (defined($_ = shift(@ARGV))) {
s{::}{/}g;
$_ .= ".pm";
require $_;
}
say for sort @DynaLoader::dl_modules;
当然,你也可以把它放到现有的脚本中。
use 5.010;
use DynaLoader qw( );
END { say for sort @DynaLoader::dl_modules; }
JSON
运行他的解决方案时,出现了错误消息:“尝试重新加载B.pm已中止”。 - sid_comJSON
是否与Text::CSV
在XS版本与PurePerl版本方面有类似的行为? - sid_comBEGIN {
require Carp; #Does the stack stuff
# Fool Perl into thinking that these are already loaded.
@INC{ 'XSLoader.pm', 'DynaLoader.pm' } = ( 1, 1 );
# overload boobytrapped stubs
sub XSLoader::load { Carp::confess( 'NOT Pure Perl!' ); }
sub DynaLoader::bootstrap { Carp::confess( 'NOT Pure Perl!' ); }
}
use ExtUtils::Installed;
my $installed = ExtUtils::Installed->new();
my @miss;
foreach $module ($installed->modules()){
@miss = $installed->validate($module);
}
print join("\n", @miss);