diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2019-08-18 09:29:26 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2019-08-18 09:29:26 +1000 |
| commit | 5796c33fad4e1d36bf2aafe0ba452d0c51039a16 (patch) | |
| tree | 3965e2ff760c37e36672522a641eee9d70d8ad3e /challenge-021/ruben-westerberg | |
| parent | d851aa7a45e61e72d26abbfef7e167521b7ee50e (diff) | |
| download | perlweeklychallenge-club-5796c33fad4e1d36bf2aafe0ba452d0c51039a16.tar.gz perlweeklychallenge-club-5796c33fad4e1d36bf2aafe0ba452d0c51039a16.tar.bz2 perlweeklychallenge-club-5796c33fad4e1d36bf2aafe0ba452d0c51039a16.zip | |
Added ch-2 p5
Diffstat (limited to 'challenge-021/ruben-westerberg')
| -rwxr-xr-x | challenge-021/ruben-westerberg/perl5/ch-2.pl | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/challenge-021/ruben-westerberg/perl5/ch-2.pl b/challenge-021/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..05b23a5fbe --- /dev/null +++ b/challenge-021/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,28 @@ +#!/usr/bin/env perl + +my $uri=$ARGV[0]//"http://my.test.url/where/is/../it"; +#split +# +#Reuse code from week 17 +use strict; +use warnings; +use v5.26; + +my $URI=$ARGV[0]//'http://a.uri/with/strange%65characters{}?query=true#frag<>'; + +print "Original URI:\t$URI\n"; +#%Encode any character outside of restriced and unrestricted set except % +$URI=~s/([^0-9a-zA-Z-_.~%!*'();:@&=+\$,\/?#\[\]])/{sprintf("%%%2X",ord $1)}/ge; + +#Normalize decode any encoded unresreved characters. Normalize encoding to upper case +$URI=~s/\%([a-fA-F0-9]{2,2})/{decode($1)}/ge; +sub decode { + my $h=shift; + my $c=chr hex $h; + $c=~/[0-9a-zA-Z-_.~]/ ? $c:uc "%$h"; +} + +#Scheme to lower case +$URI=~s/^([a-zA-Z][a-zA-Z\-\.\+]+)/{uc $1}/e; + +print "Normalized URI:\t$URI\n"; |
