2010-02-18T14:39:29
murphyIch denke es gibt zwei saubere Lösungen für dieses Problem: Entweder man übergibt die Variable als Parameter oder man speichert sie implizit in einer Closure.
Hier ein Beispiel für den zweiten Ansatz, das so wie ich die Frage verstanden habe auf Deinen konkreten Fall anwendbar sein müsste:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use 5.010;
use strict;
use warnings;
sub callback_host(&) {
my ($thunk) = @_;
say "In callback host, knowing nothing about blafus";
$thunk->();
}
sub callback($) {
my ($blafu) = @_;
say "In callback, got the blafu '$blafu'";
}
my @blafus = qw/hallo ich peter/;
for my $blafu (@blafus) {
say "In loop, current blafu '$blafu'";
callback_host {
callback($blafu)
}
}
Die Callback Funktion kann ich leider nicht verändern, die ist in dem Modul drin (net::ldap) :/