34. use strict;
#
my $add = sub { $_[0] + $_[1] };
#
$add->(3, 4);
# => 7
use strict;
sub add {
$_[0] + $_[1];
}
add(2,4);
2011 2 19
35. use strict;
my $c = 3
my $add = sub { $_[0] + $c};
$add->(4);
# => 7
2011 2 19
36. use strict;
my $c = 3
my $proc = sub { $c++ };
$proc->();
# 3
$proc->();
# 4
$proc->();
# 5
2011 2 19
37. use strict;
sub add {
$_[0] + $_[1];
}
my $func = ¥&add;
$func->(3, 4);
# => 7
2011 2 19
38. use strict;
#
sub generate {
my ($a, $b) = @_;
sub { $a + $b };
}
generate(3, 4)->();
# => 7
2011 2 19
39. use strict;
use feature qw(say);
#
sub generate {
my ($num) = @_;
sub { $num++ };
}
my $fun = generate(2);
say $fun->(); # => 2
say $fun->(); # => 3
my $fun2 = generate(2);
say $fun2->(); # => 2
say $fun2->(); # => 3
2011 2 19
50. use strict;
package Collection;
sub new {
my $class = shift;
bless {data => @_}, $class;
}
sub iter {
my $self = shift;
my $counter = 0;
sub { $self->{data}[$counter++] };
}
package main;
my $iter = Collection->new(1, 2)->iter;
say $iter->(); # => 1
say $iter->(); # => 2
2011 2 19
52. use strict;
use feature qw(say);
# 1 ..
my $infinite_list
= sub { my $c = 1; sub { $c++; } };
# 100
my $num_list = $infinite_list->();
for my $i (0..100) {
say $num_list->();
}
2011 2 19