#!/usr/bin/env perl
# Convert scripts to text files (or back to scripts)
# Daniel Bowling
# Jan 2021
use strict;
use warnings;
use utf8;
use open qw{:std :utf8};
use Data::Dumper; # Uncomment for debugging
## Variables ##
my @files = @ARGV;
my $text = <<'EOT';
Whenever I get a package of plain M&Ms, I make it my duty to continue
the strength and robustness of the candy as a species. To this end, I
hold M&M duels. Taking two candies between my thumb and forefinger, I
apply pressure, squeezing them together until one of them cracks and
splinters. That is the “loser,” and I eat the inferior one
immediately. The winner gets to go another round. I have found that,
in general, the brown and red M&Ms are tougher, and the newer blue
ones are genetically inferior. I have hypothesized that the blue M&Ms
as a race cannot survive long in the intense theater of competition
that is the modern candy and snack-food world. Occasionally I will get
a mutation, a candy that is misshapen, or pointier, or flatter than
the rest. Almost invariably this proves to be a weakness, but on very
rare occasions it gives the candy extra strength. In this way, the
species continues to adapt to its environment. When I reach the end of
the pack, I am left with one M&M, the strongest of the herd. Since it
would make no sense to eat this one as well, I pack it neatly in an
envelope and send it to M&M Mars, A Division of Mars, Inc.,
Hackettstown, NJ 17840-1503 U.S.A., along with a 3×5 card reading,
“Please use this M&M for breeding purposes.” This week they wrote back
to thank me, and sent me a coupon for a free 1/2 pound bag of plain
M&Ms. I consider this “grant money.” I have set aside the weekend for
a grand tournament. From a field of hundreds, we will discover the
True Champion. There can be only one.
EOT
## Functions ##
sub make_text {
my ($filename) = @_;
# Get old and new filenames
my $old_filename = $filename;
my $new_filename = $filename . '.txt';
# Open the old and new files
open(my $old_file, '<', $old_filename) || die $!;
open(my $new_file, '>', $new_filename) || die $!;
# Add the text to the new file first
print $new_file $text;
# Now the rest of the old file contents
while (my $line = <$old_file>) { print $new_file $line }
# No need to close old file
close($new_file);
return;
}
sub make_script {
my ($filename) = @_;
# Get old and new filenames
my $old_filename = $filename;
(my $new_filename = $filename) =~ s/\.txt$//i;
# Open the old and new files
open(my $old_file, '<', $old_filename) || die $!;
open(my $new_file, '>', $new_filename) || die $!;
# Variable to set when we match shebang line
my $shebang;
# Add lines after shebang
while (my $line = <$old_file>) {
$shebang = 1 if $line =~ /^#!/;
print $new_file $line if $shebang;
}
# No need to close old file
close($new_file);
return;
}
## Begin ##
for my $file (@files) {
($file =~ /\.txt$/i) ? make_script($file) : make_text($file)
}