in reply to Re^2: quoting/escaping file names
in thread quoting/escaping file names
Avoid the shell and you avoid the need for shell quoteing
#!/usr/bin/perl -- ## ## ## perltidy -olq -csc -csci=3 -cscl="sub : BEGIN END " -otr -opr -ce +-nibc -i=4 -pt=0 "-nsak=*" ## perltidy -olq -csc -csci=10 -cscl="sub : BEGIN END if " -otr -opr +-ce -nibc -i=4 -pt=0 "-nsak=*" ## perltidy -olq -csc -csci=10 -cscl="sub : BEGIN END if while " -otr + -opr -ce -nibc -i=4 -pt=0 "-nsak=*" #!/usr/bin/perl -- use strict; use warnings; use Digest; use Digest::MD5; use Path::Tiny qw/ path tempfile tempdir cwd /; use File::Find::Rule qw/ find rule /; Main( @ARGV ); exit( 0 ); sub Main { ## self test #~ warn mmd5external( __FILE__ ); #~ warn mmd5perl( __FILE__ ); #~ warn mmd5( __FILE__ ); #~ rule( 'file' )->exec( \&Famatte )->in( '/tmp' ); #~ find( 'file' => 'exec' => \&Famatte , in => [ '/tmp' ] ); rule( 'file' => 'exec' => \&Famatte, )->in( '/tmp' ); } ## end sub Main sub Famatte { my( $shortname, $path, $fullname ) = @_; RealFamatte( $fullname ); return !!0; # discard filename } ## end sub Famatte sub RealFamatte { my( $filename ) = @_; print mmd5( $filename ), "\t$filename\n"; } ## end sub RealFamatte sub mmd5 { goto &mmd5perl; #~ goto &mmd5external; } ## end sub mmd5 #~ sub mmd5external { #~ use File::Which qw/ which /; #~ use Capture::Tiny qw/ capture /; #~ my( @args ) = @_; #~ my $cmd = which('md5sum'); #~ my( $stdout, $stderr, $exit ) = capture { #~ system( $cmd, @args ); #~ }; #~ if( $exit ){ #~ warn "uhoh got error exit( $exit ) : $stderr "; #~ } else { #~ $stdout =~ s/\s+$//; ## "chomp" #~ return $stdout; #~ } #~ } sub mmd5perl { my $fh = path( shift )->openr_raw; my $ctx = Digest->new( 'MD5' ); $ctx->addfile( $fh ); return $ctx->hexdigest; } ## end sub mmd5perl
perltidy, Digest, Digest::MD5, File::Find::Rule, Path::Tiny, File::Which, Capture::Tiny.
|
|---|