X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FSub%2FNary.pm;h=2d161fe4de75b15fce0301abf341f0c61c23f5d4;hb=d40fc5f2c689d4e2c689cf0edf30e062b6fefa81;hp=f3f87e300cc901c220c6f7cad5319ff20617c2cc;hpb=9c114b45769d6880b8635884bb3734f00c2742c2;p=perl%2Fmodules%2FSub-Nary.git diff --git a/lib/Sub/Nary.pm b/lib/Sub/Nary.pm index f3f87e3..2d161fe 100644 --- a/lib/Sub/Nary.pm +++ b/lib/Sub/Nary.pm @@ -1,6 +1,6 @@ package Sub::Nary; -use 5.008001; +use 5.008_001; use strict; use warnings; @@ -28,30 +28,41 @@ BEGIN { use Sub::Nary; - my $sn = Sub::Nary->new(); + my $sn = Sub::Nary->new; my $r = $sn->nary(\&hlagh); =head1 DESCRIPTION -This module uses the L framework to walk into subroutines and try to guess how many scalars are likely to be returned in list context. It's not always possible to give a definitive answer to this question at compile time, so the results are given in terms of "probability of return" (to be understood in a sense described below). +This module uses the L framework to walk into subroutines and try to guess how many scalars are likely to be returned in list context. +It's not always possible to give a definitive answer to this question at compile time, so the results are given in terms of "probability of return" (to be understood in a sense described below). =head1 METHODS =head2 C -The usual constructor. Currently takes no argument. + my $sn = Sub::Nary->new; -=head2 C +The usual constructor. +Currently takes no argument. -Takes a code reference to a named or anonymous subroutine, and returns a hash reference whose keys are the possible numbers of returning scalars, and the corresponding values the "probability" to get them. The special key C<'list'> is used to denote a possibly infinite number of returned arguments. The return value hence would look at +=head2 C + + my $res = $sn->nary($coderef); + +Takes a reference to a named or anonymous subroutine, and returns a hash reference whose keys are the possible numbers of returning scalars, and the corresponding values the "probability" to get them. +The special key C<'list'> is used to denote a possibly infinite number of returned arguments. +The return value hence would look at { 1 => 0.2, 2 => 0.4, 4 => 0.3, list => 0.1 } -that is, we should get C<1> scalar C<1> time over C<5> and so on. The sum of all values is C<1>. The returned result, and all the results obtained from intermediate subs, are cached into the object. +that is, we should get C<1> scalar C<1> time over C<5> and so on. +The sum of all values is C<1>. +The returned result, and all the results obtained from intermediate subs, are cached into the object. =head2 C -Flushes the L object cache. Returns the object itself. +Flushes the L object cache. +Returns the object itself. =head1 PROBABILITY OF RETURN @@ -91,7 +102,7 @@ it is considered to return C<3> scalars with probability C<1/2>, C<2> with proba The total probability law for a given returning point is the convolution product of the probabilities of its list elements. -As such, +As such, sub notsosimple { return 1, simple(), 2 @@ -109,7 +120,8 @@ never returns C<1> argument but returns C<2> with probability C<1/2 * 1/2 = 1/4> If a core function may return different numbers of scalars, each kind is considered equally possible. -For example, C returns C<13> elements on success and C<0> on error. The according probability will then be C<< { 0 => 0.5, 13 => 0.5 } >>. +For example, C returns C<13> elements on success and C<0> on error. +The according probability will then be C<< { 0 => 0.5, 13 => 0.5 } >>. =item * @@ -600,17 +612,18 @@ C isn't specialized when encountered in the optree. L 5.8.1. -L (standard since perl 5), L (since perl 5.005) and L (since perl 5.006). +L (standard since perl 5), L (since perl 5.005) and L (since perl 5.6.0). =head1 AUTHOR Vincent Pit, C<< >>, L. -You can contact me by mail or on #perl @ FreeNode (vincent or Prof_Vince). +You can contact me by mail or on C (vincent). =head1 BUGS -Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. +Please report any bugs or feature requests to C, or through the web interface at L. +I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT