[quote=Sucher,26.04.2007, 23:41]nur aus Interesse: Warum möchte man denn eine sub in einer sub definieren?[/quote]
Closures! Ein beliebtes Beispiel sind Iteratoren:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
sub create_iter {
my $start = shift || 1;
my $func = shift || sub { $_[0] += 1 };
return sub { my $t = $start; $func->($start); return $t }
}
my $iter = create_iter(17, sub { $_[0] += 2 });
while (my $i = $iter->()) {
last if $i > 25;
print $i . "\n";
}
my $iter2 = create_iter(1, sub { $_[0] *= 2 });
while (my $i = $iter2->()) {
last if $i > 256;
print $i . "\n";
}