note
2teez
<p>
<i>"..I have to create the <b>subroutine</b> that will take the even and odd numbers from an array.."</i>
<br><br>
A good compact solution has been showed by <a href= "_SELF">tobyink</a>.<br> However, you might find the following also useful:
<code>
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;
}
</code>
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.
</p>
<!-- Node text goes above. Div tags should contain sig only -->
<div class="pmsig"><div class="pmsig-918402">
If you tell me, I'll forget.<br>
If you show me, I'll remember.<br>
if you involve me, I'll understand.<br>
--- Author [unknown to me]
</div></div>
997196
997196