aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2019-07-20 17:12:37 +1000
committerRuben Westerberg <drclaw@mac.com>2019-07-20 17:12:37 +1000
commitc63269a7a17da013a0f5bde97899323e34c84905 (patch)
tree34de9802bbf59abecadb8d09376e55ef6c78c14b
parent3c4cb2454d629dff131ce8ff9dd7056255b28d13 (diff)
downloadperlweeklychallenge-club-c63269a7a17da013a0f5bde97899323e34c84905.tar.gz
perlweeklychallenge-club-c63269a7a17da013a0f5bde97899323e34c84905.tar.bz2
perlweeklychallenge-club-c63269a7a17da013a0f5bde97899323e34c84905.zip
Added ch2 solutions
-rw-r--r--challenge-017/ruben-westerberg/README1
-rwxr-xr-xchallenge-017/ruben-westerberg/perl5/ch-2.pl31
-rwxr-xr-xchallenge-017/ruben-westerberg/perl6/ch-2.p612
3 files changed, 35 insertions, 9 deletions
diff --git a/challenge-017/ruben-westerberg/README b/challenge-017/ruben-westerberg/README
index 1c2593c999..36e90655e8 100644
--- a/challenge-017/ruben-westerberg/README
+++ b/challenge-017/ruben-westerberg/README
@@ -8,3 +8,4 @@ calculated value and total recursion count as last output.
ch-2.pl and ch-2.p6
===
+Run the program with a command line argument (in single quotes). The argument is a URL to validate.
diff --git a/challenge-017/ruben-westerberg/perl5/ch-2.pl b/challenge-017/ruben-westerberg/perl5/ch-2.pl
new file mode 100755
index 0000000000..4441008227
--- /dev/null
+++ b/challenge-017/ruben-westerberg/perl5/ch-2.pl
@@ -0,0 +1,31 @@
+#!/usr/bin/env perl
+#
+use strict;
+use warnings;
+use v5.26;
+
+my $frag=qr/[\w\d]+/;
+my $qval=qr/[\w\d]+/;
+my $qkey=qr/[\w\d]+/;
+my $qpair=qr/$qkey\=$qval/;
+my $query=qr/$qpair(?:\&$qpair)*/;
+my $port=qr/\d+/;
+my $path=qr/(\/(?:[\w\d\.]+\/?)+)/;
+my $host=qr/[\w\d\.]+/;
+my $user=qr/[\w\d]+/;
+my $pass=qr/[\w\d]+/;
+my $auth=qr/\/\/(?:($user)(?:\:($pass))?\@)?($host)(?:\:($port))?/;
+my $scheme=qr/([a-z][a-z\-\.\+]+)/;
+my $match=$ARGV[0]=~/$scheme\:$auth?$path(?:\?($query))?(?:\#($frag))?/;
+die "Not a URI\n" unless $match;
+my @out=(
+ "Scheme: ".($1//""),
+ "User: ".($2//""),
+ "Password: ".($3//""),
+ "Host: ".($4//""),
+ "Port: ".($5//""),
+ "Path ".($6//""),
+ "Query: ".($7//""),
+ "Fragment: ".($8//""),
+);
+print join "\n", @out;
diff --git a/challenge-017/ruben-westerberg/perl6/ch-2.p6 b/challenge-017/ruben-westerberg/perl6/ch-2.p6
index 0d6d955f9d..9ec56c4730 100755
--- a/challenge-017/ruben-westerberg/perl6/ch-2.p6
+++ b/challenge-017/ruben-westerberg/perl6/ch-2.p6
@@ -3,7 +3,7 @@
grammar URI {
token TOP {<scheme>\:<authority>?<path>[\?<query>]?[\#<fragment>]?};##|<authority>};
token scheme { :i(<alpha>[<[\-\.\+] + alnum>]*)};
- token path { (\/<alpha>*)+};
+ token path { (\/[<alnum>\/?]*)+};
token authority { (\/\/)[<user>[\:<password>]?\@]?<host>[\:<port>]?};
token user { (<alnum>+)};
token password { ( <alnum> +)};
@@ -15,22 +15,16 @@ grammar URI {
token qkey {<alnum>+};
token qval {<alnum>+};
token fragment { (<alnum>+)};
- ##token query { \?<alpha>+};
- ##token fragment { <alpha>+ };
}
- ##|(<authority><path>)<query>?<fragment>?};
-
-#say URI.parse("jdbc://user:password@localhost:3306/pwc?profile=true#h1");
my $m=URI.parse(@*ARGS[0]);
die "Not a URI\n" unless $m;
-#say $m;
given $m {
put "Scheme: {.<scheme>}";
given .<authority> {
- put "User: {.<user>}";
+ put "User: {.<user>//""}";
put "Password: {.<password>//""}";
- put "Host: {.<host>}";
+ put "Host: {.<host>//""}";
put "Port: {.<port>//""}";
}
put "Path: {.<path>//""}";