Oh stimmt, hatter, und mir fällt jetzt erst auf das er da ne closure stehen hat...
Naja, bei mir funktioniert die angegebene Funktion, aber den 3. Parameter braucht man doch, hätte mir wohl nen bissl mehr Zeit für den Post nehmen solln...
@KurtZ: Ich hab hier bei mir Perl 5.8.8, mit welcher Version hastes denn bei dir getestet?
MfG
User since
2008-07-09
4
Artikel
BenutzerIn
strict und warnings fördern zutage:
main::episode() called too early to check prototype at tst.pl line 16.
wenn man die sub inkl. Prototype voranstellt klappts auch!
Ich hab noch mal mit caller rumgespielt, und folgendes klappt bei mir prima, es funktioniert nur nicht, wenn man die sub 2x in der selben Zeile verwendet.
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
#!/usr/bin/perl
use strict;
use warnings;
{
my %flipflop;
sub episode ($$)
{
my( $start, $end ) = @_;
my $id = join( '.', (caller)[0..2] );
( $flipflop{$id} = 1 ) if $start;
my $return = $flipflop{$id} ;
( $flipflop{$id} = 0 ) if $end;
return $return;
} # episode
}
for (qw/ ich du er sie es wir ihr sie /)
{
print "$_ " if episode( /ich/, /er/ );
print "$_ " if episode( /er/, /es/ );
} # for
MfG
User since
2008-07-09
4
Artikel
BenutzerIn
Daran hab ich auch gedacht, aber ob das mit der Zeilennummer immer so robust ist ???
Es sind ja auch noch package und Dateiname mit dabei.
Ich jedenfalls hab noch in keinem Code den Flipflop 2x in der selben Zeile gesehen ;)
Trotzdem gefällt mir die Lösung auch noch nicht ganz so gut, irgendwie muss es doch möglich sein den genauen Aufruf ausfinig zu machen...
caller(0) hilft jedenfalls auch nicht weiter, ich hab die Ausgabe mal durch den Dumper() gejagt und verglichen, die Rückgabewerte sind bei einem 2 fachen Aufruf der epiisode() Funktion in einer Zeile leider identisch.
MfG
User since
2007-12-13
411
Artikel
BenutzerIn
R-o-l-f+2008-07-13 23:23:48--strict und warnings fördern zutage:
Ups ... Danke! : )
TMTOWTDYOG (there's more than one way to dig your own grave)