- my $a = [ ];
- recall 'CORE::push', $a, 1, 2, 3;
+ my $a = [ 0 .. 2 ];
+ my $push = wrap 'CORE::push';
+ $push->($a, 3, 4); # returns 3 + 2 = 5 and $a now contains 0 .. 4
+
+You can force the use of a specific prototype.
+In this case, C<$name> must be a hash reference that holds exactly one key / value pair, the key being the function name and the value the prototpye that should be used to call it.
+
+ my $push = wrap { 'CORE::push' => '\@$' }; # only pushes 1 arg
+
+Others arguments are seen as key / value pairs that are meant to tune the code generated by L</wrap>.
+Valid keys are :
+
+=over 4
+
+=item C<< ref => $func >>
+
+Specifies the function used in the generated code to test the reference type of scalars.
+Defaults to C<'ref'>.
+You may also want to use L<Scalar::Util/reftype>.
+
+=item C<< wrong_ref => $code >>
+
+The code executed when a reference of incorrect type is encountered.
+The result of this snippet is also the result of the generated code, hence it defaults to C<'undef'>.
+It's a good place to C<croak> or C<die> too.