sub encode { my $encode = shift; $encode =~ s/([^\w\s.!~*()'-=&])/sprintf "%%%02X", ord($1)/eg; $encode =~ tr/ /+/; return $encode; } sub decode { my $decode = shift; $decode =~ tr/+/ /; $decode =~ s/%([a-f\d][a-f\d])/pack("c",hex($1))/ige; return $decode; } $str = qq/Arnie said, "I'll be back!"/; $enc = encode ($str); $dec = decode ($enc); print "$enc\n$dec";