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 =)