Leser: 22
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/usr/bin/perl use strict; use warnings; my @blafu = qw / hallo ich peter /; for my $test (@blafu) { &sub1(); } sub sub1 { print "$test\n" }
for local $test {...
1 2 3 4 5 6 7 8 9 10 11
#!/usr/bin/perl -w use strict; use warnings; my @blafu = qw / hallo ich peter /; foreach my $test (@blafu) { &sub1($test); } sub sub1 { my $test = shift; print "$test\n" }
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) } }
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:
Code (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23use 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) } }