aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2019-08-18 09:29:26 +1000
committerRuben Westerberg <drclaw@mac.com>2019-08-18 09:29:26 +1000
commit5796c33fad4e1d36bf2aafe0ba452d0c51039a16 (patch)
tree3965e2ff760c37e36672522a641eee9d70d8ad3e
parentd851aa7a45e61e72d26abbfef7e167521b7ee50e (diff)
downloadperlweeklychallenge-club-5796c33fad4e1d36bf2aafe0ba452d0c51039a16.tar.gz
perlweeklychallenge-club-5796c33fad4e1d36bf2aafe0ba452d0c51039a16.tar.bz2
perlweeklychallenge-club-5796c33fad4e1d36bf2aafe0ba452d0c51039a16.zip
Added ch-2 p5
-rwxr-xr-xchallenge-021/ruben-westerberg/perl5/ch-2.pl28
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";