use strict; use warnings; my @replace_by_level =( # Level 0 ---- { "abc.net" => "abcde.net", "something.else" => "Other.thing"}, # Level 1 --- { cm => "dm", dn => "xx", ef => "yy"}, # Level 2 -- { zero => "one", one => "two", two => "three"}, # Other levels as required ... ); my $orig_url = "https://abc.net/cm/one"; my ($transformed_url, $temp) = $orig_url =~m|(\w+://)(.+)|; my $level=0; $transformed_url .= join "/", map { $replace_by_level[$level++]{$_} } split /\//, $temp; print qq|$transformed_url\n|; # https://abcde.net/dm/two