Schrift
[thread]8125[/thread]

BLOCK-Frage



<< >> 7 Einträge, 1 Seite
Froschpopo
 2006-06-30 07:21
#67728 #67728
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Gibts eigentlich einen Unterschied zwischen den beiden folgenden Beispielen?
ich brauche den block nur, um ein Stückchen Code beim Start auszuführen. Ich habe NICHT vor, irgendwann dorthin zurück-zu-springen (!)
Für einmalig-auszuführende Codes, sollte doch Bsp. 1 ausreichen oder hat das irgendeine Nebenwirkung?
Funktionieren tuts jedenfalls.
Code: (dl )
1
2
3
{
#wird immer ausgeführt
}


und
Code: (dl )
1
2
3
4
&start;
sub start {
#wird immer ausgeführt
}
esskar
 2006-06-30 09:49
#67729 #67729
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
um 1 kannst du die geschweiften klammern weglassen.
um 2 nicht!

:)
renee
 2006-06-30 10:03
#67730 #67730
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
1 wird an der Stelle ausgeführt, an der der Block steht, 2 wird ausgeführt wenn Du die Sub aufrufst!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sid burn
 2006-06-30 13:39
#67731 #67731
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Dein erstes Beispiel hat noch die Nebenwirkung das du einen neuen lexikalischen Bereich erzeugst, im Gegensatz dazu wenn du die Klammern einfach weg lässt. Erzeugte variablen mit "my" innerhalb des Blockes sind auch nur direkt innerhalb des Blockes ansprechbar.

Code: (dl )
1
2
3
4
5
{
my $string = "Hallo, Welt\n";
print $string;
}
print $string;


Mit "use strict" gobt es dann folgende Meldung:

Code: (dl )
1
2
Global symbol "$string" requires explicit package name at - line 6.
Execution of - aborted due to compilation errors.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
vayu
 2006-06-30 17:49
#67732 #67732
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
um etwas am beginn auszuführen gibt es doch extra den

Code: (dl )
1
2
3
BEGIN {
#irgendwas machen
}

Block oder?
Froschpopo
 2006-06-30 18:48
#67733 #67733
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hi sid burn,

genau das ist ja der sinn der sache, warum ich unbedingt einen Block brauche. Ich arbeite mit ModPerl und brauche daher lexikalische bereiche.
sid burn
 2006-07-03 02:48
#67734 #67734
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
@vayu
Der BEGIN Block war folgendes das der Code schon beim Kompilieren des Skriptes zu Bytecode ausgeführt wird. Wenn du also einen BEGIN Block hast wird dieser zuerst ganz normal nach Bytecode kompiliert, und dann Springt perl kurz zur Laufzeitumgebung und führt den CodeBlock aus, danach wird dein Code weiter Kompiliert. Jedenfalls hatte ich das so verstanden.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
<< >> 7 Einträge, 1 Seite



View all threads created 2006-06-30 07:21.