http://www.perlmonks.org?node_id=997205


in reply to Subroutine Even/Odd

"..I have to create the subroutine that will take the even and odd numbers from an array.."

A good compact solution has been showed by tobyink.
However, you might find the following also useful:

use warnings; use strict; my $numbers = [ 1 .. 10 ]; print even($numbers); ## call even number generator subroutine print $/; print odd($numbers); ## call odd number generator subroutine print $/; ## call combined even and odd number generator subroutine my %even_n_odd_numbers = %{ even_odd($numbers) }; for ( keys %even_n_odd_numbers ) { print $_, " ", join " ", @{ $even_n_odd_numbers{$_} }, $/; } sub even { my ($numbers) = @_; my @even_numbers; for (@$numbers) { push @even_numbers, $_ if $_ % 2 == 0; } return @even_numbers if wantarray; } sub odd { my ($numbers) = @_; my @odd_numbers; for (@$numbers) { push @odd_numbers, $_ if $_ % 2 == 1; } return @odd_numbers if wantarray; } sub even_odd { my ($numbers) = @_; my %even_odd = ( 'even' => undef, 'odd' => undef, ); for (@$numbers) { if ( $_ % 2 == 0 ) { push @{ $even_odd{'even'} }, $_; } else { push @{ $even_odd{'odd'} }, $_; } } return \%even_odd; }
The combined subroutine is a lot better, because you don't have to repeat codes lines like one did in two different subroutines ( sub even{...} and sub odd{...}) having just only one line that is different from one another.

If you tell me, I'll forget.
If you show me, I'll remember.
if you involve me, I'll understand.
--- Author unknown to me