Welcome to the Monastery PerlMonks

### Re: Subroutine Even/Odd

by 2teez (Vicar)
 on Oct 04, 2012 at 08:16 UTC ( #997205=note: print w/replies, xml ) Need Help??

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

Create A New User
Node Status?
node history
Node Type: note [id://997205]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (3)
As of 2018-03-18 06:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
When I think of a mole I think of:

Results (228 votes). Check out past polls.

Notices?