⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utils.pm

📁 source of perl for linux application,
💻 PM
📖 第 1 页 / 共 2 页
字号:
package CPANPLUS::Internals::Utils;use strict;use CPANPLUS::Error;use CPANPLUS::Internals::Constants;use Cwd;use File::Copy;use Params::Check               qw[check];use Module::Load::Conditional   qw[can_load];use Locale::Maketext::Simple    Class => 'CPANPLUS', Style => 'gettext';local $Params::Check::VERBOSE = 1;=pod=head1 NAMECPANPLUS::Internals::Utils=head1 SYNOPSIS    my $bool = $cb->_mkdir( dir => 'blah' );    my $bool = $cb->_chdir( dir => 'blah' );    my $bool = $cb->_rmdir( dir => 'blah' );    my $bool = $cb->_move( from => '/some/file', to => '/other/file' );    my $bool = $cb->_move( from => '/some/dir',  to => '/other/dir' );    my $cont = $cb->_get_file_contents( file => '/path/to/file' );    my $version = $cb->_perl_version( perl => $^X );=head1 DESCRIPTIONC<CPANPLUS::Internals::Utils> holds a few convenience functions forCPANPLUS libraries.=head1 METHODS=head2 $cb->_mkdir( dir => '/some/dir' )C<_mkdir> creates a full path to a directory.Returns true on success, false on failure.=cutsub _mkdir {    my $self = shift;    my %hash = @_;    my $tmpl = {        dir     => { required => 1 },    };    my $args = check( $tmpl, \%hash ) or (        error(loc( Params::Check->last_error ) ), return    );           unless( can_load( modules => { 'File::Path' => 0.0 } ) ) {        error( loc("Could not use File::Path! This module should be core!") );        return;    }    eval { File::Path::mkpath($args->{dir}) };    if($@) {        chomp($@);        error(loc(qq[Could not create directory '%1': %2], $args->{dir}, $@ ));        return;    }    return 1;}=pod=head2 $cb->_chdir( dir => '/some/dir' )C<_chdir> changes directory to a dir.Returns true on success, false on failure.=cutsub _chdir {    my $self = shift;    my %hash = @_;    my $tmpl = {        dir     => { required => 1, allow => DIR_EXISTS },    };    my $args = check( $tmpl, \%hash ) or return;    unless( chdir $args->{dir} ) {        error( loc(q[Could not chdir into '%1'], $args->{dir}) );        return;    }    return 1;}=pod=head2 $cb->_rmdir( dir => '/some/dir' );Removes a directory completely, even if it is non-empty.Returns true on success, false on failure.=cutsub _rmdir {    my $self = shift;    my %hash = @_;    my $tmpl = {        dir     => { required => 1, allow => IS_DIR },    };    my $args = check( $tmpl, \%hash ) or return;    unless( can_load( modules => { 'File::Path' => 0.0 } ) ) {        error( loc("Could not use File::Path! This module should be core!") );        return;    }    eval { File::Path::rmtree($args->{dir}) };    if($@) {        chomp($@);        error(loc(qq[Could not delete directory '%1': %2], $args->{dir}, $@ ));        return;    }    return 1;}=pod=head2 $cb->_perl_version ( perl => 'some/perl/binary' );C<_perl_version> returns the version of a certain perl binary.It does this by actually running a command.Returns the perl version on success and false on failure.=cutsub _perl_version {    my $self = shift;    my %hash = @_;    my $perl;    my $tmpl = {        perl    => { required => 1, store => \$perl },    };    check( $tmpl, \%hash ) or return;        my $perl_version;    ### special perl, or the one we are running under?    if( $perl eq $^X ) {        ### just load the config                require Config;        $perl_version = $Config::Config{version};            } else {        my $cmd  = $perl .                ' -MConfig -eprint+Config::config_vars+version';        ($perl_version) = (`$cmd` =~ /version='(.*)'/);    }        return $perl_version if defined $perl_version;    return;}=pod=head2 $cb->_version_to_number( version => $version );Returns a proper module version, or '0.0' if none was available.=cutsub _version_to_number {    my $self = shift;    my %hash = @_;    my $version;    my $tmpl = {        version => { default => '0.0', store => \$version },    };    check( $tmpl, \%hash ) or return;    return $version if $version =~ /^\.?\d/;    return '0.0';}=pod=head2 $cb->_whoamiReturns the name of the subroutine you're currently in.=cutsub _whoami { my $name = (caller 1)[3]; $name =~ s/.+:://; $name }=pod=head2 _get_file_contents( file => $file );Returns the contents of a file=cutsub _get_file_contents {    my $self = shift;    my %hash = @_;    my $file;    my $tmpl = {        file => { required => 1, store => \$file }    };    check( $tmpl, \%hash ) or return;    my $fh = OPEN_FILE->($file) or return;    my $contents = do { local $/; <$fh> };    return $contents;}=pod $cb->_move( from => $file|$dir, to => $target );Moves a file or directory to the target.Returns true on success, false on failure.=cutsub _move {    my $self = shift;    my %hash = @_;    my $from; my $to;    my $tmpl = {        file    => { required => 1, allow => [IS_FILE,IS_DIR],                        store => \$from },        to      => { required => 1, store => \$to }    };    check( $tmpl, \%hash ) or return;    if( File::Copy::move( $from, $to ) ) {        return 1;    } else {        error(loc("Failed to move '%1' to '%2': %3", $from, $to, $!));        return;    }}=pod $cb->_copy( from => $file|$dir, to => $target );Moves a file or directory to the target.Returns true on success, false on failure.=cutsub _copy {    my $self = shift;    my %hash = @_;        my($from,$to);    my $tmpl = {        file    =>{ required => 1, allow => [IS_FILE,IS_DIR],                        store => \$from },        to      => { required => 1, store => \$to }    };    check( $tmpl, \%hash ) or return;    if( File::Copy::copy( $from, $to ) ) {        return 1;    } else {        error(loc("Failed to copy '%1' to '%2': %3", $from, $to, $!));        return;    }}=head2 $cb->_mode_plus_w( file => '/path/to/file' );Sets the +w bit for the file.Returns true on success, false on failure.=cutsub _mode_plus_w {    my $self = shift;    my %hash = @_;        require File::stat;        my $file;    my $tmpl = {        file    => { required => 1, allow => IS_FILE, store => \$file },    };        check( $tmpl, \%hash ) or return;        ### set the mode to +w for a file and +wx for a dir    my $x       = File::stat::stat( $file );    my $mask    = -d $file ? 0100 : 0200;        if( $x and chmod( $x->mode|$mask, $file ) ) {        return 1;    } else {        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -