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


in reply to Assignments for Subroutines

If you turned these in as-is, I'd be curious to know what grade you got on the assignment. Here would be my answers:

1. Write a subroutine (&evens) that recieves an array of numbers and returns an array containing only even numbers. Give an example of calling the subroutine.
#!/usr/bin/env perl use Modern::Perl; sub evens { return grep { ! ($_ % 2) } @_; } say for evens(1..10);
2. Write a subroutine(&squares) that recieves an array of numbers and squares each number in the array. Note: nothing is returned.

Since the subroutine is supposed to take an array but return nothing, I assume it is to change the array in place. So I'll pass the array as a reference:

#!/usr/bin/env perl use Modern::Perl; sub squares { my $n = shift; $_ *= $_ for @$n; } my @nums = (1..10); squares(\@nums); say for @nums;
3. Write a subroutine(&huge) that returns true if the number sent is greater than 1,000,000 or false(look up what is true and false). Show an example of calling the function.
#!/usr/bin/env perl use Modern::Perl; sub huge { my $n = shift; return 1 if $n and $n > 1_000_000; return ! $n; # reverse the t/f for all other cases } for (-1,0,1,100,1_000_000, 1_000_001){ my $t = huge($_) ? 'true' : 'false'; say "$_ $t"; }

Aaron B.
Available for small or large Perl jobs; see my home node.