diff options
| -rwxr-xr-x | challenge-021/roger-bell-west/perl5/ch-1.pl | 17 | ||||
| -rwxr-xr-x | challenge-021/roger-bell-west/perl5/ch-2.pl | 73 | ||||
| -rwxr-xr-x | challenge-021/roger-bell-west/perl6/ch-1.p6 | 12 |
3 files changed, 102 insertions, 0 deletions
diff --git a/challenge-021/roger-bell-west/perl5/ch-1.pl b/challenge-021/roger-bell-west/perl5/ch-1.pl new file mode 100755 index 0000000000..e0e7824b71 --- /dev/null +++ b/challenge-021/roger-bell-west/perl5/ch-1.pl @@ -0,0 +1,17 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Math::BigFloat try => 'GMP'; + +my $a=0; +my $b=Math::BigFloat->new(1); +my $e=Math::BigFloat->new(1); + +while (1) { + $a++; + $b/=$a; + $e+=$b; + print "$e\n"; +} diff --git a/challenge-021/roger-bell-west/perl5/ch-2.pl b/challenge-021/roger-bell-west/perl5/ch-2.pl new file mode 100755 index 0000000000..a0d8e8524a --- /dev/null +++ b/challenge-021/roger-bell-west/perl5/ch-2.pl @@ -0,0 +1,73 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use URI::Escape; + +foreach my $url (@ARGV) { + my $u=urlparse($url); + foreach my $mode (keys %{$u}) { + if (exists $u->{$mode}) { + $u->{$mode}=uri_unescape($u->{$mode}); + } + } + foreach my $mode (qw(scheme host)) { + if (exists $u->{$mode}) { + $u->{$mode}=lc($u->{$mode}); + } + } + if (exists $u->{port} && exists $u->{scheme}) { + if (my $dp={http => 80, + https => 443, + ftp => 21, + smtp => 25, + telnet => 22, + ldap => 389, + ldaps => 686, + }->{$u->{scheme}}) { + if ($dp==$u->{port}) { + delete $u->{port}; + } + } + } + print urlassemble($u),"\n"; +} + +sub urlparse { + my ($url)=@_; + my %match; + if ($url =~ m!//!) { + $url =~ m!^(?<scheme>.*?)://(?:(?:(?<userinfo>.*)@)?(?<host>[-._a-z0-9]+)(?::(?<port>[0-9]+))?)?(?<pqf>.*)!i; + map {$match{$_}=$+{$_}} keys %+; + } else { # if no userinfo-host-port component, split on the last colon + $url =~ m!^(?<scheme>.*):(?<pqf>[^:]*)!; + map {$match{$_}=$+{$_}} keys %+; + } + $match{pqf} =~ m!(?<path>[^?#]*)(?:\?(?<query>[^#]*))?(?:\#(?<fragment>.*))?$!; + map {$match{$_}=$+{$_}} keys %+; + delete $match{pqf}; + return \%match; +} + +sub urlassemble { + my $u=shift; + my $out=$u->{scheme}.':'; + if (exists $u->{host}) { + $out.='//'; + if (exists $u->{userinfo}) { + $out.=$u->{userinfo}.'@'; + } + $out.=$u->{host}; + if (exists $u->{port}) { + $out.=':'.$u->{port}; + } + } + $out.=$u->{path}; + if (exists $u->{query}) { + $out.='?'.$u->{query}; + } + if (exists $u->{fragment}) { + $out.='#'.$u->{fragment}; + } + return $out; +} diff --git a/challenge-021/roger-bell-west/perl6/ch-1.p6 b/challenge-021/roger-bell-west/perl6/ch-1.p6 new file mode 100755 index 0000000000..ef249e7c3b --- /dev/null +++ b/challenge-021/roger-bell-west/perl6/ch-1.p6 @@ -0,0 +1,12 @@ +#! /usr/bin/perl6 + +my $a=0; +my $b=FatRat.new(1,1); +my $e=Rat.new(1); + +while (1) { + $a++; + $b/=$a; + $e+=$b; + print "$e\n"; +} |
