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


in reply to Subroutine Even/Odd

This construct is weird:

if($number%2==0) { $number = $_; } print "$number";

It works because $_ is initially undef and you never assign to it. It's incredibly fragile though.

Here's how I'd do it...

use 5.010; use List::MoreUtils qw(part); my $numbers = [ 1 .. 10, 211, 1000 ]; my ($evens, $odds) = part { $_ % 2 } @$numbers; say "Even numbers: "; say $_ for @$evens; say "Odd numbers: "; say $_ for @$odds;
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'