In addition to japhy's excellent answer, I'd like to just point out what this is doing for anyone who might not quite understand why this works as it does.
(my_func()) forces the output of this function into list context as well as groups it for the [5] we're about to append. Now that [5] takes a slice of the list.
Here's a simple example
sub foo { return qw(a b c d) }
( foo() )[1,3];
# Is the same as:
('a', 'b', 'c', 'd')[1,3];
# And effectively the same as
@a = foo();
@a[1,3];
You can read more about slicing in the book Effective Perl Programming (a *must* read =) | [reply] [Watch: Dir/Any] [d/l] [select] |