I would recommend using (&@) as a prototype. That way you can use a list for other arguments. If you use ($\@) your second argument must be an array.
use strict;
use Data::Dumper;
sub takes_coderef (&@);
takes_coderef {print "I'm a code ref called with (", join(", ", @_), "
+)\n"} "first", 2, 3;
sub takes_coderef (&@) {
my $coderef = shift;
my @otherargs = @_;
&$coderef(@otherargs);
print Data::Dumper->Dump([\@otherargs], ["*otherargs"]);
}
___OUTPUT___
I'm a code ref called with (first, 2, 3)
@otherargs = (
'first',
2,
3
);
See this thread about prototypes and especially Tom Christiansen's Prototypes in Perl for a very in-depth discussion of prototypes.
-- flounder |