X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FSub-Prototype-Util.git;a=blobdiff_plain;f=README;h=ad69e34840c8e265741c6352da03ecbb056a2bcb;hp=04da32e0b5761ce7e981ac4be67ba05c0194be4a;hb=HEAD;hpb=ca9ceb4f24802eebce590c2adcb09f8e170146c9 diff --git a/README b/README index 04da32e..ad69e34 100644 --- a/README +++ b/README @@ -2,18 +2,25 @@ NAME Sub::Prototype::Util - Prototype-related utility routines. VERSION - Version 0.09 + Version 0.11 SYNOPSIS - use Sub::Prototype::Util qw/flatten wrap recall/; + use Sub::Prototype::Util qw; - my @a = qw/a b c/; + my @a = qw; my @args = ( \@a, 1, { d => 2 }, undef, 3 ); - my @flat = flatten '\@$;$', @args; # ('a', 'b', 'c', 1, { d => 2 }) - recall 'CORE::push', @args; # @a contains 'a', 'b', 'c', 1, { d => 2 }, undef, 3 + my @flat = flatten '\@$;$', @args; + # @flat contains now ('a', 'b', 'c', 1, { d => 2 }) + + my $res = recall 'CORE::push', @args; + # @a contains now 'a', 'b', 'c', 1, { d => 2 }, undef, 3 + # and $res is 7 + my $splice = wrap 'CORE::splice'; - my @b = $splice->(\@a, 4, 2); # @a is now ('a', 'b', 'c', 1, 3) and @b is ({ d => 2 }, undef) + my @b = $splice->(\@a, 4, 2); + # @a contains now ('a', 'b', 'c', 1, 3) + # and @b is ({ d => 2 }, undef) DESCRIPTION Prototypes are evil, but sometimes you just have to bear with them, @@ -24,7 +31,9 @@ DESCRIPTION They all handle 5.10's "_" prototype. FUNCTIONS - "flatten $proto, @args" + "flatten" + my @flattened = flatten($proto, @args); + Flattens the array @args according to the prototype $proto. When @args is what @_ is after calling a subroutine with prototype $proto, "flatten" returns the list of what @_ would have been if there were no @@ -32,7 +41,10 @@ FUNCTIONS prototype, e.g. when a reference type is wrong or when not enough elements were provided. - "wrap $name, %opts" + "wrap" + my $wrapper = wrap($name, %opts); + my $wrapper = wrap({ $name => $proto }, %opts); + Generates a wrapper that calls the function $name with a prototyped argument list. That is, the wrapper's arguments should be what @_ is when you define a subroutine with the same prototype as $name. @@ -48,24 +60,28 @@ FUNCTIONS 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 "wrap". Valid keys are : + The remaining arguments %opts are treated as key / value pairs that are + meant to tune the code generated by "wrap". Valid keys are : + + * "ref => $func" - "ref => $func" Specifies the function used in the generated code to test the reference type of scalars. Defaults to 'ref'. You may also want to - use "Scalar::Util::reftype". + use "reftype" in Scalar::Util. + + * "wrong_ref => $code" - "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 'undef'. It's a good place to "croak" or "die" too. - "sub => $bool" + * "sub => $bool" + Encloses the code into a "sub { }" block. Default is true. - "compile => $bool" + * "compile => $bool" + Makes "wrap" compile the code generated and return the resulting code reference. Be careful that in this case "ref" must be a fully qualified function name. Defaults to true, but turned off when "sub" @@ -75,9 +91,13 @@ FUNCTIONS by using the "\&@" prototype : my $grep = wrap { 'CORE::grep' => '\&@' }; - sub mygrep (&@) { $grep->(@_) } # the prototypes are intentionally different + # the prototypes are intentionally different + sub mygrep (&@) { $grep->(@_) } + + "recall" + my @res = recall($name, @args); + my @res = recall({ $name => $proto }, @args); - "recall $name, @args" Calls the function $name with the prototyped argument list @args. That is, @args should be what @_ is when you call a subroutine with $name as prototype. You can still force the prototype by passing "{ $name => @@ -118,7 +138,7 @@ SUPPORT . COPYRIGHT & LICENSE - Copyright 2008-2009 Vincent Pit, all rights reserved. + Copyright 2008,2009,2010,2011,2013 Vincent Pit, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.