EDIT: The following will probably do what you want. Note that slightly more advanced processing is required to make sure that links that aren't supposed to be changed, such as absolute URLs or mailto links, are ignored.
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 UR +Ls if (substr($_[0],0,1) eq '.') { return $_[0] if substr($_[0],1,1) eq '.'; # Ignore URLs alread +y ../ return '.'.$_[0]; # URLs ./ change to +../ } return '../'.$_[0]; # Rest changes to .. +/ }
In reply to Re: Altering an array with grep & map
by TedPride
in thread Altering an array with grep & map
by JayBee
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |