root am Freitag, 6. Januar 2006 13.15:
> Hello,
> about closure I read the
>
> Perl literacy course
>
> lecture #9 Closures
>
> Shlomo Yona  http://cs.haifa.ac.il/~shlomo/
>
>
> The explanations are clear but in this example:
> (it's an excerpt of an example of Shlomo)
>
> #!/usr/bin/perl
> use warnings;
> use strict;
>
> my $sumform = make_binary('$_[0] + $_[1]');
>
> print "7 + 8 = ", $sumform -> (7, 8), "\n";
>
> print "5 + 3 = ", $sumform -> (5, 3), "\n";
>
>
> sub make_binary
> {
>       my $vars = shift;
>       return eval "sub { $vars; }";
> }
>
> I understand the mechanism of the closure, but I don't figure out
> how the anonymous subroutine puts the two arguments in $_[0] and in $_[1] ?

Well, the anonymous sub returned by make_binary is

sub { $_[0] + $_[1] };

and it is called with

$sumform -> (7, 8)

so the list (7,8) is passed via @_ to the anonymous sub and retrieved from 
there with $_[0] and $_[1].

It's the "normal" way to access the arguments directly.



Maybe the term 'vars' in '$vars' is misleading, since it describes the 
actually anonymous sub created with the argument '$_[0] + $_[1]' to 
make_binary. Consider 

make_binary (100);

There are no vars, but only a constant.

So, $code instead of $vars would be a better variable name in the eval line of 
the _generic_ sub make_binary(), which could also be used to make a sub 
forking processes or with any other functionality.


hth, joe

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to