Generally, your code is OK, but I would like to point out some things which can be improved.
#declare the filehandeles outside the foreach loop
Why? You can write less code (e.g. open my $filehandle, ...
) and (if you declare it inside the loop) Perl will close the filehandle automatically right after current iteration of the block finishes executing.
opendir (DIR, $dir) or die $!;
my @textFiles = grep /\.txt/, readdir DIR;
For simple matching of directory contents diamond operator
) can serve using smaller code:
my @files = <*.txt>;
- without any need to open or close any directories.
By the way, you can open just "." instead of using Cwd. "." means "current directory" in modern operating systems.
my $text_file_out = $text_file;
$text_file_out =~ s/\.txt//;
$text_file_out = $text_file_out . '_new.txt';
This can be done in one operation: (my $text_file_out = $text_file) =~ s/\.txt$/_new.txt/;
. Another option: my $text_file_out = $text_file =~ s/\.txt$/_new.txt/r;
modifier is available since Perl 5.14, see Regexp Quote Like Operators
Sorry if my advice was wrong.