perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 26
Click for quality!




10.02.2012 / 20:49

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragUnterschiedliches Verhalten my ... / use vars - aber nur lokal
Seitenanfang
Hallo,
wenn ich nachfolgendes Skript im Internet laufen lasse, gibt es keinen Unterschied, ob ich die Variable $zahl mit my oder mit use vars deklariere. Es wird bei jedem Start ausgegeben
*** $zahl(1): 1 ***
*** $zahl(2): 2 ***
Wenn ich es auf meinem lokalen System (XAMMP/Apache) laufen lasse, so kommt das gleiche Ergebnis, wenn ich die Variable mit use vars definiere.
Wenn ich sie mit my definiere, so kommt beim ersten Aufruf
*** $zahl(1): 1 ***
*** $zahl(2): 2 ***
beim zweiten
*** $zahl(1): 2 ***
*** $zahl(2): 3 ***
dann
*** $zahl(1): 3 ***
*** $zahl(2): 4 *** u.s.w.
d.h. es wird offensichtlich die Variable an der Zeile 9 des Skripts nicht mehr initialisiert.
Jetzt dachte ich aber, dass bei der Defin. am Anfang my und use vars gleiche Wirkung haben.
Und warum läuft es nur lokal falsch.
Ist da ein Parameter einzustellen, so nach dem Motto 'wenn my angegeben, dann behandele es wie ...'
Vielen Dank
Hier das Skript:

#!/usr/bin/perl -w
use strict;
use LWP::UserAgent;
#use vars qw($zahl);
my $zahl;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
$zahl = 1;
print <<AAA;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head></head><body>
AAA
getinc ();
print <<GGG;
</div>
</body>
</html>
GGG

sub getinc
{print "*** \$zahl(1): $zahl ***<br>";
$zahl= $zahl+1;
print "*** \$zahl(2): $zahl ***<br>";
}

Datum: 05.06.2007-14:02

Beitragre: Unterschiedliches Verhalten my ... / use vars - aber nur loka
Seitenanfang
Hallo!

Vermutlich hast du mod_perl in deinem Indianer mit installiert. Um dieses 'mystische' Verhalten zu vermeiden, solltest du in subroutinen keine Variablen benutzen, die Außerhalb erstellt wurden. Umgehen könntest du das Problem z.B. folgendermaßen:


getinc(\$zahl);
...
sub getinc {
my $zahl = ${shift};
print ...
}

Jetzt übergibts du einen Zeiger auf die eigentliche $zahl, die du vorher initialisiert hast, es sollte funktionieren.

Möchtest du den Wert der Variablen in der Subroutine gar nicht ändern, reicht es natürlich auch, nur den Wert von $zahl zu übergeben.


getinc($zahl);
...
sub getinc {
my $zahl = shift;
print $zahl;
}

Grüße, Skrilax

Datum: 06.06.2007-10:17

-






-
-