1 map http://www.digitalcity.com http://origin-www.digitalcity.com 2 map tunnel://www.digitalcity.com tunnel://origin-www.digitalcity.com 3 map http://10.0.2.1 http://origin-www.digitalcity.com 4 map tunnel://10.0.2.1 tunnel://origin-www.digitalcity.com 5 reverse_map http://origin-www.digitalcity.com http://www.digitalcity.com 6 reverse_map tunnel://origin-www.digitalcity.com tunnel://www.digitalcity.com #### # pseudo-code open ASCII text file read in entire file, line by line into an array ignore comments foreach line matching regex, push each subexpression into a hash populate template if the completed template is seen in the file, we're ok, if not, die, and take action. #### #!/usr/bin/perl -w use strict; use Text::Template; my $OUT; my $line; my %vars; my $lines; my @lines; my $file = "/home/trixee/remap.tmpl"; my $template = new Text::Template (TYPE => 'FILE' , SOURCE => $file) or die "Couldn't construct template: $Text::Template::ERROR"; while (@lines = ) { foreach $lines (@lines) { chomp $lines; next if ($lines =~ /^\#/); if ($lines =~ /(\d+)(\s+)map(\s+)(\w+)\:\/\/(.*?)(\s+)(\4)\:\/\/(.*?)/) { $vars{'lines'} = []; push @{ $vars{'lines'} }, {'proto' => $4, 'uri1' => $6, 'uri2' => $8, 'd' => $1}; } } } foreach $line (@lines) { $OUT .= "line = $line->{'d'} map $line->{'proto'}://$line->{'uri1'} $line->{'proto'}://$line->{'uri2'}\n"; } __DATA__ # I am a comment; 1 map http://www.digitalcity.com http://origin-www.digitalcity.com 2 map tunnel://www.digitalcity.com tunnel://origin-www.digitalcity.com 3 map http://10.0.2.1 http://origin-www.digitalcity.com 4 map tunnel://10.0.2.1 tunnel://origin-www.digitalcity.com 5 reverse_map http://origin-www.digitalcity.com http://www.digitalcity.com 6 reverse_map tunnel://origin-www.digitalcity.com tunnel://www.digitalcity.com +++++++++++++++++++++++++++++++++++++++++++++ TEMPLATE: {$d} map {$proto}://{$uri1} {$proto}://{$uri2} {$d} map {$proto}://{$uri1} {$proto}://{$uri2} {$d} map {$proto}://{$uri1} {$proto}://{$uri2} {$d} map {$proto}://{$uri1} {$proto}://{$uri2} {$d} reverse_map {$proto}://{$uri2}://{$proto}://{$uri1} {$d} reverse_map {$proto}://{$uri2} {$proto}://{$uri1}