in reply to Re: John Guttag's book - 2nd exercise. My attempt in Perl.
in thread John Guttag's book - 2nd exercise. My attempt in Perl.

Should while (my $current = shift) be  while ( defined( my $current = shift ) ) ? Otherwise it seems to fail if @array contains 0.

Replies are listed 'Best First'.
Re^3: John Guttag's book - 2nd exercise. My attempt in Perl.
by Laurent_R (Canon) on May 22, 2017 at 19:19 UTC
    Yes, Anonymous Monk, you're correct, this while loop has a bug when one of the values in the array is 0.

    IMHO, this array traversal should really be made with a for loop, as it is usually better to use a for loop to iterate over an array, but the OP did not specify very clearly what was authorized and what not.

    This is what it might look like with a for loop.

    use strict; use warnings; my @array = (-11,-13,4, 22, 17); print find_max_odd(@array), "\n"; sub find_max_odd { my $max; for my $num (@_) { next unless $num % 2; $max = $num unless defined $max; $max = $num if $num > $max; } return defined $max ? $max : "No odd number found\n"; # this co +uld be replaced with if conditional statements if needed }