Perl script to rename web files and links

Post Type: 
Tutorial

This is a little Perl script I had to write for a piece of coursework I've posted the code below and attached the file with an extra .txt extension, its far from the best coding but it should:

Assist in the maintenance of a web site by allowing the HTML file for a web page to be renamed and automatically update the links in any other pages to refer to the new name, only for a single directory however as recursion is not enabled.

Its unlikely that anyone in my class is seeing this but if you are, its not a good idea to copy because this lecturer, unlike the others will notice and because I want to share not cheapen education.

If said lecturer is seeing this and would like me to take the script down please contact me.

Source:

#!/usr/bin/env perl

# AUTHOR: Kris Davidson
# DATE:   March 2008

# FUNCTION:
# This script should allow an HTML file to be renamed then loop through all other files in the directory
# and update the links in those files to refer to the new name.
# It expects two alphanumeric parameters both ending .html and seperated by a space.

# CONVENTIONS:
# 1. Spaces instead of tabs
# 2. Bracketing BSD and GNU
# 3. Identation is 8 columns

# TODO:
# 1. Allow directory recursion?
# 2. Code to be cleaned up / improved

# MISC:
# A note to the Perl-One-Liners, yes I'm aware that a chunk of the script could be reduced to something
# perl -i -pe 'BEGIN { $from = shift @ARGV; $to = shift @ARGV; } s/$from/$to/g'
# You may value obfuscation, I however do not.

#
# Pragmas/Best practice options
#
use warnings;
use strict;

#
# Definitions (A bit C like I know, but I think it keeps the code readable and tidy)
#
my $changed;        # A Security/safety consideration that indicates a files content has changed
my $correct;        # Holds argument validation
my $fileHandler;    # Holds the file currently being read/searched/changed
my $newName;        # The new file name
my $oldName;        # The old file name
my $pool;           # All files to be searched and updated
my $usage;          # Holds correct usage statement
my @newFile;        # Array that contains changes made

#
# Input validation
#
$usage =
"
Syntax: [Old file name] [New file name]
        Seperated by a single space with the .html extension included.
\n";

#
# Each argument must end with .html
#
if (defined $ARGV[0] && $ARGV[1])
{
        $correct = ($ARGV[0]=~ /.+\.html$/) & ($ARGV[1]=~ /.+\.html$/);
}

die $usage unless $correct;

#
# Argument passing
#
$oldName = $ARGV[0];
$newName = $ARGV[1];

#
# Some validation and error checking
#
if ($oldName eq $newName)
        {
                die "\n [Old file name] and [New file name] are the same, no changes made\n\n";
        }
elsif (! -e $oldName)
        {
                die "\n [Old file name] does not exist, aborting\n\n";
        }
elsif (-e $newName)
        {
                die "\n [New file name] already exists, aborting\n\n";
        }

#
# Rename file
#
rename ($oldName, $newName) or die "ERROR, could not rename file: $!\n";

while ($pool = <*html>)                                       # REMOVED for formatting, check attached
{
        open (FILE, "<", $pool) or die "$0: $pool: $!\n";     # REMOVED for formatting, check attached

        while ($fileHandler = <FILE>)                         # REMOVED for formatting, check attached
        {
                if ($fileHandler =~ s/$oldName/$newName/g)    # REMOVED for formatting, check attached
                {
                       $changed = 1;
                }
                push (@newFile, $fileHandler);                # Add changes to array
        }	
	close (FILE);
        if ($changed)
        {
                open (NFILE, ">", $pool);    # Open file for writing / replacing
                print (NFILE @newFile);      # Write the constructed array to the file
                close (NFILE);               # Close file / clean-up
                $changed = 0;
        }
        undef @newFile;                      # Erase the array before moving to the next file
}
AttachmentSize
script.pl.txt3.29 KB