use strict; use warnings; my $path = 'file.htm'; my @check = ('href','src'); my ($handle, $text); open($handle, $path); $text = join('', <$handle>); close($handle); my $check = '(?:' . join('|', @check) . ')'; $text =~ s/($check=")([^"]+)/$1.relative($2)/ieg; open($handle, ">$path"); print $handle $text; close($handle); sub relative { return $_[0] if length($_[0]) < 2; # Ignore empty or / URLs return $_[0] if index($_[0],':') != -1; # Ignore email links return $_[0] if substr($_[0],0,1) eq '/'; # Ignore absolute URLs if (substr($_[0],0,1) eq '.') { return $_[0] if substr($_[0],1,1) eq '.'; # Ignore URLs already ../ return '.'.$_[0]; # URLs ./ change to ../ } return '../'.$_[0]; # Rest changes to ../ }