From 12a55cf6e1f0b0913900da90bed9ec2c8d2364ca Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 7 Oct 2019 12:55:26 +0100 Subject: Answers for challenge 29. --- challenge-029/roger-bell-west/perl5/ch-1.pl | 54 +++++++++++++++++++++++++++++ challenge-029/roger-bell-west/perl5/ch-2.pl | 14 ++++++++ challenge-029/roger-bell-west/perl6/ch-2.p6 | 7 ++++ 3 files changed, 75 insertions(+) create mode 100755 challenge-029/roger-bell-west/perl5/ch-1.pl create mode 100755 challenge-029/roger-bell-west/perl5/ch-2.pl create mode 100755 challenge-029/roger-bell-west/perl6/ch-2.p6 diff --git a/challenge-029/roger-bell-west/perl5/ch-1.pl b/challenge-029/roger-bell-west/perl5/ch-1.pl new file mode 100755 index 0000000000..cbc269fc9b --- /dev/null +++ b/challenge-029/roger-bell-west/perl5/ch-1.pl @@ -0,0 +1,54 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +# Write a script to demonstrate brace expansion. For example, script would take command line argument Perl {Daily,Weekly,Monthly,Yearly} Challenge and should expand it and print like below: +# +# Perl Daily Challenge +# +# Perl Weekly Challenge +# +# Perl Monthly Challenge + +foreach my $text (@ARGV) { + my %r; + my @e=split /(\{.*?\})/,$text; + foreach my $i (0..$#e) { + if ($e[$i] =~ /^\{(.*)\}$/) { + my @b=split ',',$1; + $r{$i}=$#b; + $e[$i]=\@b; + } + } + my %a=map {$_ => 0} keys %r; + OUTER: + while (1) { + my @out; + foreach my $k (0..$#e) { + if (exists $r{$k}) { + push @out,$e[$k][$a{$k}]; + } else { + push @out,$e[$k]; + } + } + print join('',@out),"\n"; + my @kl=sort keys %a; + unless (@kl) { + last; + } + my $i=0; + while (1) { + $a{$kl[$i]}++; + if ($a{$kl[$i]} > $r{$kl[$i]}) { + $a{$kl[$i]}=0; + $i++; + if ($i > $#kl) { + last OUTER; + } + } else { + last; + } + } + } +} diff --git a/challenge-029/roger-bell-west/perl5/ch-2.pl b/challenge-029/roger-bell-west/perl5/ch-2.pl new file mode 100755 index 0000000000..18fd42b309 --- /dev/null +++ b/challenge-029/roger-bell-west/perl5/ch-2.pl @@ -0,0 +1,14 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use FFI::Raw; + +my $cpf=FFI::Raw->new('libc.so.6','printf', + FFI::Raw::int, + FFI::Raw::str, + FFI::Raw::str, + ); + +$cpf->call("%s\n",'a string passed from perl5'); diff --git a/challenge-029/roger-bell-west/perl6/ch-2.p6 b/challenge-029/roger-bell-west/perl6/ch-2.p6 new file mode 100755 index 0000000000..122993cff1 --- /dev/null +++ b/challenge-029/roger-bell-west/perl6/ch-2.p6 @@ -0,0 +1,7 @@ +#! /usr/bin/perl6 + +use NativeCall; + +our sub cpf(Str, Str --> int32) is native(sub{'libc.so.6'}) is symbol('printf') { * } + +cpf("%s\n",'a string passed from perl6'); \ No newline at end of file -- cgit