App-MBUtiny
view release on metacpan or search on metacpan
lib/App/MBUtiny/Util.pm view on Meta::CPAN
=back
=head1 HISTORY
See C<Changes> file
=head1 AUTHOR
Serż Minus (Sergey Lepenkov) L<http://www.serzik.com> E<lt>abalama@cpan.orgE<gt>
=head1 COPYRIGHT
Copyright (C) 1998-2019 D&D Corporation. All Rights Reserved
=head1 LICENSE
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
See C<LICENSE> file and L<https://dev.perl.org/licenses/>
=cut
use vars qw/ $VERSION @EXPORT_OK /;
$VERSION = '1.03';
our $DEBUG = 0;
use Carp;
use URI;
use URI::Escape qw/uri_unescape/;
use File::Find;
use File::Copy;
use Digest::MD5;
use Digest::SHA1;
use Socket qw/inet_ntoa inet_aton AF_INET/;
use Data::Dumper; #$Data::Dumper::Deparse = 1;
use CTK::ConfGenUtil;
use constant {
DIRMODE => 0777,
};
use base qw/Exporter/;
@EXPORT_OK = qw/
filesize sha1sum md5sum
resolv
explain
xcopy
node2anode set2attr
parse_credentials hide_password
/;
sub sha1sum {
my $f = shift;
my $sha1 = new Digest::SHA1;
my $sum = '';
return $sum unless -e $f;
open( my $sha1_fh, '<', $f) or (carp("Can't open '$f': $!") && return $sum);
if ($sha1_fh) {
binmode($sha1_fh);
$sha1->addfile($sha1_fh);
$sum = $sha1->hexdigest;
close($sha1_fh);
}
return $sum;
}
sub md5sum {
my $f = shift;
my $md5 = new Digest::MD5;
my $sum = '';
return $sum unless -e $f;
open( my $md5_fh, '<', $f) or (carp("Can't open '$f': $!") && return $sum);
if ($md5_fh) {
binmode($md5_fh);
$md5->addfile($md5_fh);
$sum = $md5->hexdigest;
close($md5_fh);
}
return $sum;
}
sub filesize {
my $f = shift;
my $filesize = 0;
$filesize = (stat $f)[7] if -e $f;
return $filesize;
}
sub resolv { # Resolving. See Socket::inet_ntoa
# Original: Sys::Net::resolv
my $name = shift;
# resolv ip to a hostname
if ($name =~ m/^\s*[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\s*$/) {
return scalar gethostbyaddr(inet_aton($name), AF_INET);
}
# resolv hostname to ip
else {
return inet_ntoa(scalar gethostbyname($name));
}
}
sub explain {
my $dumper = new Data::Dumper( [shift] );
$dumper->Indent(1)->Terse(1);
$dumper->Sortkeys(1) if $dumper->can("Sortkeys");
return $dumper->Dump;
}
sub xcopy {
my $object = shift || ''; # from
my $target = shift || ''; # to
my $exclude = shift; # exclude files
carp("Source directory not exists: $object") && return
unless $object && (-e $object and -d $object);
carp("Target directory not defined: $target") && return
unless $target;
if ($exclude && ref($exclude) ne 'ARRAY') {
carp("The third argument must be reference to array containing list of files for excluding");
return;
} else {
$exclude = [] unless $exclude;
}
my $ob = File::Spec->canonpath($object);
my $tg = File::Spec->canonpath($target);
my (@exf, @exd);
foreach (@$exclude) {
my $tf = File::Spec->canonpath(File::Spec->catfile($ob, $_));
my $td = File::Spec->canonpath(File::Spec->catdir($ob, $_));
if (-e $td && -d $td) {
push @exd, $td;
} else {
push @exf, $tf;
}
};
( run in 0.637 second using v1.01-cache-2.11-cpan-39bf76dae61 )