in reply to Create a built-in-like sub?

While the question was answered, there's also the point of using prototypes to allow for the bareword function call. (You were under use strict, right?) That would allow for you to use compress() as a bareword and have it "behave appropriately".

I think this was a 5.6+ feature. For what you go, I would write it as such:

sub compress ($) { my $val = shift; # Do stuff with $val }
If you wanted it to handle an array, then some number of other values (sorta like push) ...
sub compress (\@@) { my $array = shift; my @values = @_; # Do stuff with the listref $array and the list of scalars @values }
And, there are symbols for pretty much everything else you'd want to do.

------
We are the carpenters and bricklayers of the Information Age.

Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.