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
