#!/usr/bin/perl -- use 5.014; use strict; use warnings; use Path::Tiny qw/ path /; use POSIX(); use autodie qw/ close /; Main( @ARGV ); exit( 0 ); sub Main { #~ my( $infile_paths ) = @_; my( $infile_paths ) = 'C:\temp\test_folder\paths.txt';; my @paths = GetPaths( $infile_paths ); for my $path ( @paths ){ FormerlyMainNowReplaceXmlKids( $path ); } } ## end sub Main sub GetPaths { my @paths = path( shift )->lines_utf8; s/\s+$// for @paths; # "chomp" return @paths; } ## end sub GetPaths sub FormerlyMainNowReplaceXmlKids { #~ my( $directory ) = @_; ## same as shift @_ ## same as shift my $directory = shift; my $date = POSIX::strftime( '%Y-%m-%d', localtime ); my $bak = "$date.bak"; my @xml_files = path( $directory )->children( qr/\.xml$/ ); for my $file ( @xml_files ) { Replace( $file, "$file-$bak" ); } } ## end sub Main sub Replace { my( $in, $bak ) = @_; path( $in )->move( $bak ); my $infh = path( $bak )->openr_raw; my $outfh = path( $in )->openrw_raw; while( <$infh> ) { s{&}{&}g; ## will match more than what you want fix it s{&amp;}{&}g; s{\s>\s}{>}g; s{\s<\s}{<}g; print $outfh $_; } close $infh; close $outfh; } ## end sub Replace #### #!/usr/bin/perl -- use strict; use warnings; use Path::Tiny qw/ path /; Main( @ARGV ); exit( 0 ); sub Main { my @dirs = DirsForDiddling( '.../paths.txt' ); DiddleXmlChildren( $_ ) for @dirs; } ## end sub Main sub DirsForDiddling { my( $dirfile ) = @_; my @dirs = path( $dirfile )->lines_utf8; s/\s+$// for @dirs; ## no trailing whitespace return @dirs; } ## end sub DirsForDiddling sub DiddleXmlChildren { my( $directory , $date, $bak ) = @_; $date ||= POSIX::strftime( '%Y-%m-%d', localtime ); $bak ||= "$date.bak"; my @xml_files = XmlChildren( $directory ); for my $file ( @xml_files ) { Diddle( $file, "$file-$bak" ); } } ## end sub DiddleXmlChildren sub XmlChildren { return path( shift )->children( qr/\.xml$/ ); } ## end sub XmlChildren #### sub Main { my @dirs = DirsForDonuts( '.../paths.txt' ); for my $dir( @dirs ){ DonutXmlChildren( $dir ); } } ## end sub Main sub DirsForDonuts { my( $dirfile ) = @_; my @dirs = path( $dirfile )->lines_utf8; s/\s+$// for @dirs; ## no trailing whitespace return @dirs; } ## end sub DirsForDonuts sub DonutXmlChildren { my( $directory , $date, $bak ) = @_; $date ||= POSIX::strftime( '%Y-%m-%d', localtime ); $bak ||= "$date.bak"; my @xml_files = XmlChildren( $directory ); for my $file ( @xml_files ) { Donut( $file, "$file-$bak" ); } } ## end sub DonutXmlChildren sub XmlChildren { return path( shift )->children( qr/\.xml$/ ); } ## end sub XmlChildren #### Sky( 6 ); my $confusion = 'uhoh'; sub Sky { ... } sub Fall { ... } Fall( 6666666666666 ); ... if( ... ){ ... } ...