trying to learn smart matching in an exercise.

Why does this program output "odd" when I input an even number?

Thank you,

Chris

#!/usr/bin/perl

use warnings;
use strict;

use 5.010;

say "Checking the number <$ARGV[0]>";

my $favorite = 62;

given( $ARGV[0] ) {
        when( ! /^\d+$/ ) { say "Not a number!" }

        my @divisors = divisors( $ARGV[0] );

        when( @divisors ~~ 2 ) { # 2 is in @divisors
                say "$_ is even";
                continue;
                }

        when( !( @divisors ~~ 2 ) ) { # 2 isn't in @divisors
                say "$_ is odd!";
                continue;
                }

        when( @divisors ~~ $favorite ) {
                say "$_ is divisible by my favorite number";
                continue;
                }

        when( $favorite ) { # $_ ~~ $favorite
                say "$_ is my favorite number";
                continue;
                }

        my @empty;
        when( @divisors ~~ @empty ) { say "Number is prime" }

        default { say "$_ is divisible by @divisors" }
        }

sub divisors {
        my $number = shift;

        my @divisors = ();
        foreach my $divisor ( 2 .. ($ARGV[0]/2 + 1) ) {
                push @divisors, $divisor unless $number % $divisor;
                }

return @divisors;

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to