ExtUtils-Builder
view release on metacpan or search on metacpan
lib/ExtUtils/Builder/Util.pm view on Meta::CPAN
package ExtUtils::Builder::Util;
$ExtUtils::Builder::Util::VERSION = '0.020';
use strict;
use warnings;
use Exporter 5.57 'import';
our @EXPORT_OK = qw/get_perl require_module unix_to_native_path native_to_unix_path command code function split_like_shell/;
use Carp 'croak';
use Config;
use ExtUtils::Config;
use ExtUtils::Helpers 0.027 'split_like_shell';
use File::Spec;
use File::Spec::Unix;
use Scalar::Util 'tainted';
sub get_perl {
my (%opts) = @_;
my $config = $opts{config} // ExtUtils::Config->new;
if (File::Spec->file_name_is_absolute($^X) and not tainted($^X)) {
return $^X;
}
elsif ($config->get('userelocatableinc')) {
require Devel::FindPerl;
return Devel::FindPerl::find_perl_interpreter($config);
}
else {
return $config->get('perlpath');
}
}
sub require_module {
my $module = shift;
(my $filename = "$module.pm") =~ s{::}{/}g;
require $filename;
return $module;
}
sub command {
my (@command) = @_;
require ExtUtils::Builder::Action::Command;
return ExtUtils::Builder::Action::Command->new(command => \@command);
}
sub code {
my %args = @_;
require ExtUtils::Builder::Action::Code;
return ExtUtils::Builder::Action::Code->new(%args);
}
sub function {
my %args = @_;
require ExtUtils::Builder::Action::Function;
return ExtUtils::Builder::Action::Function->new(%args);
}
my %cache;
sub glob_to_regex {
my $input = shift;
return $cache{$input} ||= do {
my $regex = _glob_to_regex_string($input);
qr/^$regex$/;
};
}
sub _glob_to_regex_string {
my $glob = shift;
my $in_curlies;
local $_ = $glob;
my $regex = !/\A(?=\.)/ ? '(?=[^\.])' : '';
while (!/\G\z/mgc) {
if (/\G([^\/.()|+^\$@%\\*?{},\[\]]+)/gc) {
$regex .= $1;
}
elsif (m{\G/}gc) {
$regex .= !/\G(?=\.)/gc ? '/(?=[^\.])' : '/'
}
elsif (/ \G ( [.()|+^\$@%] ) /xmgc) {
$regex .= quotemeta $1;
}
elsif (/ \G \\ ( [*?{}\\,] ) /xmgc) {
$regex .= quotemeta $1;
( run in 1.811 second using v1.01-cache-2.11-cpan-71847e10f99 )