Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5802[/thread]

strict und my (Seite 3)

Leser: 1


<< |< 1 2 3 4 5 6 >| >> 53 Einträge, 6 Seiten
betterworld
 2003-10-06 16:45
#61256 #61256
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Strat,06.10.2003, 14:20]was ich auch seltsam finde ist, dass z.B.
print $var for my $var (1..10);
nicht funktioniert...[/quote]
oder
print for keys %$_ for @a;
das ware auch cool, wenn es gehen wuerde
kabel
 2003-10-06 16:46
#61257 #61257
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
Perlmonks:das trifft in die gleiche kerbe.
-- stefan
youngalcapone
 2003-10-07 02:15
#61258 #61258
User since
2003-08-14
185 Artikel
BenutzerIn
[default_avatar]
Man kann Variabeln doch auch mit;
our $weissichwas;
deklarieren?
Ich glaube das ist das, wonach gesucht wurde, oder?
Gruss, Dave
jan10001
 2003-10-07 13:35
#61259 #61259
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Quote
Man kann Variabeln doch auch mit;
our $weissichwas;
deklarieren?
Ich glaube das ist das, wonach gesucht wurde, oder?
Gruss, Dave
Stimmt damit geht es. :)
kabel
 2003-10-07 13:56
#61260 #61260
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
aha. und wo ist nu der relevante unterschied zum my? :p
im zweifelsfall my dem our vorziehen. our macht nicht wirklich etwas ...
-- stefan
Strat
 2003-10-07 14:35
#61261 #61261
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
our $Var; gibt es ab perl5.6 und es erzeugt eine globale Variable (=packagevariable), genauso wie
Code: (dl )
use vars qw($Var);

Ich bevorzuge jedoch den zweiten Weg, weil man haeufig in Gefahr kommt, our in Subroutinen zu verwenden, weil es so aussieht wie my, und wo man es dann nie wieder entdeckt, waehrend use vars qw() auffaelliger ist (und irgendwie von selbst an den Beginn des Packages will)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2003-10-07 14:40
#61262 #61262
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
haeufig kann ich jedoch ueber den folgenden Weg auf eine globale Variable verzichten, indem ich closures verwende:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{ # closure for caching
 my %userCache = ();

 sub GetUserData {
   my $id = shift;

   unless (exists $userCache{$id}) {
     $userCache{$id} = &FetchInfoFromDatabase($id};
   } # unless

   return $userCache{$id};

 } # GetUserData

} # closure for caching

Da ist %userCache nur in dem closure-Block zu sehen, und nicht von ausserhalb, aber fuer GetUserData nimmt es eine aehnliche Rolle wie eine globale Variable ein...\n\n

<!--EDIT|Strat|1065523265-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
steffenw
 2003-10-08 00:38
#61263 #61263
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code: (dl )
print $var foreach my $var (1..10);

Ich habe damit kein Problem, daß das nicht funktioniert. Die Variable wird ja auch später deklariert, als sie benutzt wird.

Man braucht es ja nur anders herum zu schreiben.
Code: (dl )
1
2
3
foreach my $var (1..10)
{ print $var;
}

So funktioniert es auch vorzüglich.

Manchmal baue ich auch solche Konstruktionen wie:
Code: (dl )
1
2
3
4
if ($aa == $bb or $cc == $dd and my $flag=1)
{ print "Bedingung stimmt\n";
print "jedoch durch 2. Teil zustandegekommen\n" if $flag;
}

Denn bei if, while, usw. klappt die Deklaration in der Bedingung auch recht gut. Die so deklarierte Variable ist bei if, o.ä bis in den else-Zweig hinein gültig.
$SIG{USER} = sub {love 'Perl' or die};
jan
 2003-10-08 00:44
#61264 #61264
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
mh, vielleicht irre ich mich, aber wenn du die zuweisung da machst, hast du doch immer die ausgabe "jedoch durch 2. Teil zustandegekommen, ganz gleich, wie die anderen vergleiche laufen....
steffenw
 2003-10-08 00:50
#61265 #61265
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Nein, wenn die erste Bedingung eine "wahr" ergibt, wird der rechte Teil vom "or" nicht ausgeführt. Die Deklaration ist aber trotzdem erfolgt. Wenn also schon die erste Bedingung zutrifft, ist $flag=undef. Selbst in einem else-Zweig ist $flag deklariert. Danach ist es weg. Ach so, es gilt ja, daß "and" vor "or" geht, deswegen brauchte ich keine zusätzliche Klammer.\n\n

<!--EDIT|steffenw|1065559939-->
$SIG{USER} = sub {love 'Perl' or die};
<< |< 1 2 3 4 5 6 >| >> 53 Einträge, 6 Seiten



View all threads created 2003-10-05 22:02.