Pcore
view release on metacpan or search on metacpan
lib/Pcore.pm view on Meta::CPAN
require Pcore::Core::Exception; # set $SIG{__DIE__}, $SIG{__WARN__}, $SIG->{INT}, $SIG->{TERM} handlers
# process -forktmpl pragma
require Pcore::Util::Sys::ForkTmpl if !$MSWIN && $import->{pragma}->{forktmpl};
_CORE_INIT_AFTER_FORK();
return;
}
sub _CORE_INIT_AFTER_FORK {
require Pcore::Core::Patch::AnyEvent;
return;
}
# TODO add PerlIO::removeEsc layer
sub config_stdout ($h) {
if ($MSWIN) {
if ( -t $h ) { ## no critic qw[InputOutput::ProhibitInteractiveTest]
require Pcore::Core::PerlIOviaWinUniCon;
binmode $h, ':raw:via(Pcore::Core::PerlIOviaWinUniCon)' or die; # terminal
}
else {
binmode $h, ':raw:encoding(UTF-8)' or die; # file TODO +RemoveESC
}
}
else {
if ( -t $h ) { ## no critic qw[InputOutput::ProhibitInteractiveTest]
binmode $h, ':raw:encoding(UTF-8)' or die; # terminal
}
else {
binmode $h, ':raw:encoding(UTF-8)' or die; # file TODO +RemoveESC
}
}
return;
}
sub _CORE_RUN {
# EMBEDDED mode, if run not from INIT block or -embedded pragma specified:
# CLI not parsed / processed;
# process permissions not changed;
# process will not daemonized;
if ( !$EMBEDDED ) {
require Pcore::Core::CLI;
Pcore::Core::CLI->new( { class => 'main' } )->run( \@ARGV );
if ( !$MSWIN ) {
# GID is inherited from UID by default
if ( defined $ENV->{UID} && !defined $ENV->{GID} ) {
my $uid = $ENV->{UID} =~ /\A\d+\z/sm ? $ENV->{UID} : getpwnam $ENV->{UID};
die qq[Can't find uid "$ENV->{UID}"] if !defined $uid;
$ENV->{GID} = [ getpwuid $uid ]->[2];
}
# change priv
Pcore->sys->change_priv( gid => $ENV->{GID}, uid => $ENV->{UID} );
P->sys->daemonize if $ENV->{DAEMONIZE};
}
}
return;
}
# L10N
sub set_locale ( $self, $locale = undef ) {
require Pcore::Core::L10N;
return Pcore::Core::L10N::set_locale($locale);
}
# AUTOLOAD
sub AUTOLOAD ( $self, @ ) { ## no critic qw[ClassHierarchies::ProhibitAutoloading]
my $lib = lc our $AUTOLOAD =~ s/\A.*:://smr;
my $class = $UTIL->{$lib} // 'Pcore::Util::' . ucfirst $lib;
require $class =~ s[::][/]smgr . '.pm';
if ( $class->can('new') ) {
eval <<"PERL"; ## no critic qw[BuiltinFunctions::ProhibitStringyEval ErrorHandling::RequireCheckingReturnValueOfEval]
*{$lib} = sub {
shift;
return $class->new(\@_);
};
PERL
}
else {
# create lib namespace with AUTOLOAD method
eval <<"PERL"; ## no critic qw[BuiltinFunctions::ProhibitStringyEval ErrorHandling::RequireCheckingReturnValueOfEval]
package $self\::Util::_$lib;
use Pcore;
sub AUTOLOAD {
my \$method = our \$AUTOLOAD =~ s/\\A.*:://smr;
# install method wrapper
eval <<"EVAL";
*{"$self\::Util::_$lib\::\$method"} = sub {
shift;
return &$class\::\$method;
};
EVAL
goto &{\$method};
}
PERL
( run in 1.373 second using v1.01-cache-2.11-cpan-39bf76dae61 )