Thread Variablenübernahme in Subroutine (7 answers)
Opened by Sven_123 at 2010-07-06 13:45

moritz
 2010-07-06 13:50
#139574 #139574
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Hallo,

das liegt daran, dass Perl 5 keine ordentlichen lokalen Subroutinen kennt. Mit use warnings bekommst du die Warnung:

Code: (dl )
Variable "$x" will not stay shared at foo.pl line 9.


Frag dich einfach, was passieren sollte, wenn du blubb() ausserhalb der Funktion bla aufrufst - welchen Wert sollte $x haben?

Abhilfe schafft es, die Routine in einer lexikalischen Variable zu speichern:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use warnings;
use strict;
bla(1);

sub bla{
    my $x=$_[0];
    print "bla: $x";
    my $blubb = sub {
        print "  blubb: $x\n";
    };
    $blubb->();
    if ($x <= 5){bla(($x+1))}
}

View full thread Variablenübernahme in Subroutine