aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Wicks <lw@judocoach.com>2021-10-20 21:35:08 +0100
committerLance Wicks <lw@judocoach.com>2021-10-20 21:35:08 +0100
commit7cc542ed1fff1966b80b9436d9cf160bbd017dca (patch)
tree80195d73af2a364fc15ca2c1c7fb55704e57d592
parent20c6e9bc78a2bab9f8da2f0bda2fa204a6ffdb3c (diff)
downloadperlweeklychallenge-club-7cc542ed1fff1966b80b9436d9cf160bbd017dca.tar.gz
perlweeklychallenge-club-7cc542ed1fff1966b80b9436d9cf160bbd017dca.tar.bz2
perlweeklychallenge-club-7cc542ed1fff1966b80b9436d9cf160bbd017dca.zip
Solution to Week 135, task 1, Perl.
This is a quick hacky solution, not using Moo for a change. But maintaining my roll it up in a module streak. :) Happy Perl-ing everyone.
-rw-r--r--challenge-135/lance-wicks/perl/lib/Digit.pm22
-rwxr-xr-xchallenge-135/lance-wicks/perl/middle_digit7
-rw-r--r--challenge-135/lance-wicks/perl/t/01-digit.t24
3 files changed, 53 insertions, 0 deletions
diff --git a/challenge-135/lance-wicks/perl/lib/Digit.pm b/challenge-135/lance-wicks/perl/lib/Digit.pm
new file mode 100644
index 0000000000..3e6c5d29b8
--- /dev/null
+++ b/challenge-135/lance-wicks/perl/lib/Digit.pm
@@ -0,0 +1,22 @@
+package Digit;
+
+#use Moo;
+
+use strict;
+use warnings;
+
+sub middle {
+ my ( $self, $integer ) = @_;
+
+ $integer = abs( $integer || 0 );
+
+ return 'Too short' if length $integer < 3;
+ return 'Even number of digits' if !( $integer % 2 );
+
+ my @digits = split '', $integer;
+
+ my $start = ( ( ( length $integer ) - 1 ) / 2 ) - 1;
+ return join '', @digits[ $start .. $start + 2 ];
+}
+
+1;
diff --git a/challenge-135/lance-wicks/perl/middle_digit b/challenge-135/lance-wicks/perl/middle_digit
new file mode 100755
index 0000000000..3396d0ac8e
--- /dev/null
+++ b/challenge-135/lance-wicks/perl/middle_digit
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+
+use lib './lib';
+use Digit;
+
+print Digit::middle( undef, $ARGV[0] );
+print;
diff --git a/challenge-135/lance-wicks/perl/t/01-digit.t b/challenge-135/lance-wicks/perl/t/01-digit.t
new file mode 100644
index 0000000000..650ca0e98a
--- /dev/null
+++ b/challenge-135/lance-wicks/perl/t/01-digit.t
@@ -0,0 +1,24 @@
+use Test2::V0 -target => 'Digit';
+
+subtest 'Examples' => sub {
+ is $CLASS->middle(1234567), 345;
+ is $CLASS->middle(123), 123;
+ is $CLASS->middle(-123), 123;
+};
+
+subtest 'Expected too short failures' => sub {
+ is $CLASS->middle(), 'Too short', 'We need at least 3 digits';
+ is $CLASS->middle(1), 'Too short', 'We need at least 3 digits';
+ is $CLASS->middle(12), 'Too short', 'We need at least 3 digits';
+};
+
+subtest 'Expected even number faulures' => sub {
+ is $CLASS->middle(1234),
+ 'Even number of digits',
+ 'Even number fails as expected';
+ is $CLASS->middle(1234567890),
+ 'Even number of digits',
+ 'Even number fails as expected';
+};
+
+done_testing;