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

Ungewöhnliches Benchmarkergebnis (Seite 2)



<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
Strat
 2004-05-29 01:52
#82786 #82786
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=sri,28.05.2004, 16:54]1. our() und use vars () ist nicht das selbe! our ist lexical scoped, use vars package scoped.[/quote]
stimmt nicht; our() erstellt ebenso package-Variabeln wie use vars(), nur dass our erst ab perl5.6 vorhanden ist

aber ich stimme dir zu, dass dieser benchmark sinnlos ist...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
sri
 2004-05-29 04:31
#82787 #82787
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Strat,28.05.2004, 23:52]stimmt nicht; our() erstellt ebenso package-Variabeln wie use vars(), nur dass our erst ab perl5.6 vorhanden ist[/quote]
Stimmt wohl. :)

perldoc -f our erklärt es ganz gut.
Gast Gast
 2004-05-29 13:37
#82788 #82788
[quote=esskar,27.05.2004, 13:38]könnte daran liegen, das use aufrufe beim nur 1 mal pro script ausgeführt werden; our jedoch jedesmal![/quote]
Das verstehe ich jetzt nicht ...
our() deklariert m.E. lediglich einmal die Variablen die im Package globale Verwendung finden sollen.
esskar
 2004-05-29 16:08
#82789 #82789
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wenn ich aber

Code: (dl )
1
2
our $var1;
our $var1;


sind dies eben zwei aufrufe; die werden nämlich zur Laufzeit ausgewertet.

Code: (dl )
1
2
use Pck;
use Pck;


wird aber zur compilezeit ausgewertet!
Gast Gast
 2004-05-29 16:38
#82790 #82790
@esskar
OK - es ist mir schon klar daß
our($var1, $var2);
für jede der betroffenen Variablen einzeln ausgeführt wird.
Wenn das aber zu der beschriebenen Verlängerung der Laufzeit führen würde, dann müßte ja jedes my() wohl auch ein ähnliches (Laufzeit) Ergebnis erzeugen.

Alledings sollte nicht unberücksichtigt bleiben, daß
use vars qw/$var1 $ar2/;
innerhalb des Moduls vars.pm auch auf jede Variable einzeln angewandt wird.

Irgendwas stimmt da nicht mit den Randbedingungen des Benchmark-Tests.

Daneben kann man nicht einfach sagen:
'use' wird während der Compilierung ausgeführt und deshalb interessiert mich die dazu erforderliche Zeitspanne nicht. ;)
sri
 2004-05-29 17:43
#82791 #82791
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Dieter,29.05.2004, 14:38]@esskar
OK - es ist mir schon klar daß
our($var1, $var2);
für jede der betroffenen Variablen einzeln ausgeführt wird.
Wenn das aber zu der beschriebenen Verlängerung der Laufzeit führen würde, dann müßte ja jedes my() wohl auch ein ähnliches (Laufzeit) Ergebnis erzeugen.

Alledings sollte nicht unberücksichtigt bleiben, daß
use vars qw/$var1 $ar2/;
innerhalb des Moduls vars.pm auch auf jede Variable einzeln angewandt wird.

Irgendwas stimmt da nicht mit den Randbedingungen des Benchmark-Tests.

Daneben kann man nicht einfach sagen:
'use' wird während der Compilierung ausgeführt und deshalb interessiert mich die dazu erforderliche Zeitspanne nicht. ;)[/quote]
RTFM! und schau dir mein Beispiel oben mal genauer an!
Gast Gast
 2004-05-29 18:35
#82792 #82792
[quote=sri,29.05.2004, 15:43]RTFM! und schau dir mein Beispiel oben mal genauer an![/quote]
Was meinst Du damit?
Beispiel hab ich mir angesehen ...
steffenw
 2004-05-30 00:49
#82793 #82793
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
So mal ganz nebenbei:

Ist nicht "use vars ..." die alte, noch geduldetet Variante und "our ..." die modernere? So habe ich das bisher immer gesehen und benutzte deswegen nur our, um nicht irgendwann "deprecated" zu lesen.

Ist nicht auch "use constant ..." nur noch da, weil es noch keine andere Konstantendefinition als über diese sub's gibt?
$SIG{USER} = sub {love 'Perl' or die};
Strat
 2004-05-30 02:03
#82794 #82794
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=sri,29.05.2004, 02:31][quote=Strat,28.05.2004, 23:52]stimmt nicht; our() erstellt ebenso package-Variabeln wie use vars(), nur dass our erst ab perl5.6 vorhanden ist[/quote]
Stimmt wohl. :)

perldoc -f our erklärt es ganz gut.[/quote]
AS 809:
Code: (dl )
1
2
3
4
5
C:\>perl
our $Var = 20;
while ( ($x, $y) = each %::) { print "$x => $y\n" if $x =~ /Var/ }
^D
Var => *main::Var

oder:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Dokumente und Einstellungen\Administrator>perl
package XYZ;
our $Var = 20;
while (($x, $y) = each %::) {
 print "$x => $y\n";
}
print "-------------------\n";
while (($x, $y) = each %XYZ::) {
 print "$x => $y\n";
}
^D
... gekuerzt fuer main
-------------------
... gekuerzt: XYZ
Var => *XYZ::Var

identisch mit use vars => package-variable
Das einzige, was our gegenueber use vars mehr hat ist, dass man es ueber packagegrenzen hinweg verwenden kann, weil da intern automatisch das package vorangesetzt wird, wobei es aber trotzdem eine package-Variable ist, wie die obigen codebeispiele gut zeigen.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
sri
 2004-05-30 04:20
#82795 #82795
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Strat,30.05.2004, 00:03]Das einzige, was our gegenueber use vars mehr hat ist, dass man es ueber packagegrenzen hinweg verwenden kann, weil da intern automatisch das package vorangesetzt wird, wobei es aber trotzdem eine package-Variable ist, wie die obigen codebeispiele gut zeigen.[/quote]
Sobald use strict vars verwendet wird (wer tut das nicht?:-) ist dem nicht mehr so.

Dann kann $var nämlich nur innerhalb ihres lexical scope ohne vorangestelltes package verwendet werden.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sri@odyssey:~$ cat test.pl
use strict;
use vars '$rav';
$rav = 10;
Test: {
our $var = 20;
print "var: $var\n";
}
print "rav: $rav, var: $var\n";
sri@odyssey:~$ perl test.pl
Variable "$var" is not imported at test.pl line 8.
Global symbol "$var" requires explicit package name at test.pl line 8.
Execution of test.pl aborted due to compilation errors.
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2004-05-27 00:23.