You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.1 KiB
49 lines
1.1 KiB
#!/usr/bin/env perl |
|
|
|
use strict; |
|
use warnings; |
|
use autodie; |
|
use utf8; |
|
|
|
my @rules; |
|
my $dir = '/app/storeid'; |
|
|
|
opendir (DIR, $dir) or die $!; |
|
while (my $file = readdir(DIR)) { |
|
next if ($file =~ m/^\./); |
|
open (my $data, '<', $dir . '/' . $file) or die "Error: $!\n"; |
|
while (<$data>) { |
|
chomp; |
|
if (/^\s*([^\t]+?)\s*\t+\s*([^\t]+?)\s*$/) { |
|
push(@rules, [qr/$1/, $2]); |
|
} else { |
|
print STDERR "$0: Parse error in $ARGV[0] (line $.)\n"; |
|
} |
|
} |
|
} |
|
closedir(DIR); |
|
|
|
print STDERR "$0: loaded " . scalar @rules . " rules\n"; |
|
|
|
$| = 1; |
|
URL: while (<STDIN>) { |
|
chomp; |
|
my @X = split(" "); |
|
my $a = $X[0]; |
|
my $url = $X[1]; |
|
|
|
foreach my $rule (@rules) { |
|
if (my @match = $url =~ /$rule->[0]/) { |
|
print STDERR "$0 [$a]: rewriting for: $url \n"; |
|
my $new_url = $rule->[1]; |
|
for (my $i=1; $i<=scalar(@match); $i++) { |
|
$new_url =~ s/\$$i/$match[$i-1]/g; |
|
} |
|
print "$a OK store-id=$new_url\n"; |
|
next URL; |
|
} |
|
} |
|
|
|
print "$a OK store-id=$url\n"; |
|
} |
|
|
|
|