Thread Variablen in Sub's - strict meckert rum. (20 answers)
Opened by popcorn5 at 2007-04-26 20:29

PerlProfi
 2007-04-26 21:02
#76285 #76285
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Das ist nicht strict, sondern warnings das da meckert.
Und wie Ronnie schon gesagt hat gibt dein Beispiel keine Warnung:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl
use strict;
use warnings 'all';

&test;

sub test
{
my $var=1;
print $var."\n";
}


Warscheinlich hast du eine subroutine innerhalb einer subroutine, die dann auf eine Variable der äußeren zugreift, so wie in Ronnies Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use strict;
use warnings 'all';

&test;

sub test
{
my $var = 1;

sub test2
{
print $var."\n";
}

&test2;
}

warnings denkt hier nämlich, du möchtest eine closure definieren und sagt dir, dass das so nicht geht.
Der Wert von $var wird hier nur einmal auf 1 gesetzt und auch wenn er sich in der äußeren ändert hat das keinen Einfluss auf den Wert von $var in der inneren Subroutine.

Vielleicht hast du dich ja nur vertippt, und wenn nicht würde ich dir raten die Variable als Parameter zu übergeben, oder die innere Subroutine als anon. Subroutine zu schreiben damit sie bei Aufruf der äußeren neu interpretiert wird.
Code: (dl )
1
2
3
4
5
6
7
8
# entweder
$test2 = sub { print $var."\n" }
# oder
sub test2
{
my $var = shift;
print $var."\n";
}


Wenn es nicht anders geht, kannst du auch no warnings 'closure'; benutzen um die Warnung in diesem kurzen Bereich abzuschalten.

MfG

View full thread Variablen in Sub's - strict meckert rum.