# -sam k (commport5@lucidx.com)

for (0..255) {
 $escapes{chr($_)} = sprintf("%%%02X", $_);
}

sub uri_escape {
 my ($text, $patn) = @_;
 unless (defined($text)) {
  return undef;
 }
 if (defined($patn)) {
  unless (exists  $subst{$patn}) {
   $subst{$patn} = eval "sub {\$_[0] =~ s/([$patn])/\$escapes{\$1}/g; }";
  }
  &{$subst{$patn}}($text);
 }
 else {
  $text =~ s/([^;\/?:@&=+\$,A-Za-z0-9\-_.!~*'()])/$escapes{$1}/g;
 }
 return $text;
}

sub uri_unescape {
 my $str = shift;
 if (@_ && wantarray) {
  my @str = ($str, @_);
  foreach (@str) {
   s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg
  }
  return @str;
 }
 $str =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
 return $str;
}

1;
