![]() |
![]()
| ![]() |
![]()
NAMEPerl::PrereqScanner::Lite - Lightweight Prereqs Scanner for PerlSYNOPSISuse Perl::PrereqScanner::Lite; my $scanner = Perl::PrereqScanner::Lite->new; $scanner->add_extra_scanner('Moose'); # add extra scanner for moose style my $modules = $scanner->scan_file('path/to/file'); DESCRIPTIONPerl::PrereqScanner::Lite is the lightweight prereqs scanner for perl. This scanner uses Compiler::Lexer as tokenizer, therefore processing speed is really fast.METHODSnew($opt)Create a scanner instance.$opt must be hash reference. It accepts following keys of hash:
scan_file($file_path)Scan and figure out prereqs which is instance of "CPAN::Meta::Requirements" by file path.scan_string($string)Scan and figure out prereqs which is instance of "CPAN::Meta::Requirements" by source code string written in perl.e.g. open my $fh, '<', __FILE__; my $string = do { local $/; <$fh> }; my $modules = $scanner->scan_string($string); scan_module($module_name)Scan and figure out prereqs which is instance of "CPAN::Meta::Requirements" by module name.e.g. my $modules = $scanner->scan_module('Perl::PrereqScanner::Lite'); scan_tokens($tokens)Scan and figure out prereqs which is instance of "CPAN::Meta::Requirements" by tokens of Compiler::Lexer.e.g. open my $fh, '<', __FILE__; my $string = do { local $/; <$fh> }; my $tokens = Compiler::Lexer->new->tokenize($string); my $modules = $scanner->scan_tokens($tokens); add_extra_scanner($scanner_name)Add extra scanner to scan and figure out prereqs. This module loads extra scanner such as "Perl::PrereqScanner::Lite::Scanner::$scanner_name" if specifying scanner name through this method.If you want to specify an extra scanner from external package without "Perl::PrereqScanner::Lite::" prefix, you can prepend "+" to $scanner_name. Like so "+Your::Awesome::Scanner". Extra scanners that are default supported are followings;
ADDITIONAL NOTATIONIf "no_prereq" is enabled by "new()" (like so: "Perl::PrereqScanner::Lite->new({no_prereq => 1})"), this module recognize "## no prereq" optional comment. The requiring declaration with this comment on the same line will be ignored as prereq.For example use Foo; use Bar; ## no prereq In this case "Foo" is the prereq, however "Bar" is ignored. SPEED COMPARISONPlainRate Perl::PrereqScanner Perl::PrereqScanner::Lite Perl::PrereqScanner 8.57/s -- -97% Perl::PrereqScanner::Lite 246/s 2770% -- With Moose scannerRate Perl::PrereqScanner Perl::PrereqScanner::Lite Perl::PrereqScanner 9.00/s -- -94% Perl::PrereqScanner::Lite 152/s 1587% -- NOTESThis is a quotation from <https://github.com/moznion/Perl-PrereqScanner-Lite/issues/13>.Yes, it's true. This design is so ugly and not smart. So I have to redesign and reimplement this module, and I have some plans. If you have a mind to expand this module by implementing external scanner, please be careful. Every "scan_*" calls must not affect to any others through the singleton of this module (called it $c in <https://github.com/moznion/Perl-PrereqScanner-Lite/blob/c03638b2e2a39d92f4d7df360af5a6be65dc417a/lib/Perl/PrereqScanner/Lite/Scanner/Moose.pm#L8>). SEE ALSOPerl::PrereqScanner, Compiler::LexerLICENSECopyright (C) moznion.This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. AUTHORmoznion <moznion@gmail.com>
|