Saturday, April 26, 2008

Die ersten Tage der "German Perl Tour"

Soo, ich bin mal wieder am Laptop und kann mal über die ersten Tage der "German Perl Tour" 2008 mit brian d foy schreiben...

Um die Mittagszeit am Donnerstag (24.04.) habe ich die Nachricht erhalten, dass brian in Frankfurt gelandet ist und sich im Hotel aufhält. Da ich erst noch arbeiten musste, konnte ich brian erst kurz vor dem Frankfurt.pm-Treffen abholen. Wir sind dann direkt zum Treffen gegangen, wo wir schon von zwei Perlmongern empfangen wurden. Wir waren im "Zimt und Koriander" - oder besser gesagt: Wir saßen im Freien ;-)
Um halb elf sind wir dann dort aufgebrochen. Ich habe dann erst um 1 Uhr im Bett gelegen, da ich noch ne Zeitlang auf einen Zug warten musste.

Um kurz nach 5 Uhr hat dann mein Wecker wieder geklingelt, da ich brian in Frankfurt abholen musste. Am Freitag stand erst ein Vortrag bei IBM in Böblingen statt und abends dann ein Treffen mit den Stuttgartern Perlmongers.
Wir sind ziemlich gut durchgekommen, bis 5 Kilometer vor Böblingen. Dann standen wir im Stau! Trotzdem waren wir noch einigermaßen pünktlich, um Alvar am Böblinger Bahnhof abzuholen. Alvar, brian und ich plus brians Gepäck - und das alles in einem kleinen Peugeot 206 ;-)

Bei IBM hat brian dann einen Vortrag über "Mastering Perl" gehalten. In vier Stunden gab es fünf größere Themenblöcke. Man hat gemerkt, dass brian nicht zum ersten Mal vor so einer Gruppe stand...
Der Vortrag war dann sehr pünktlich fertig und wir hatten noch jede Menge Zeit bis zum Treffen in Stuttgart. Wir sind trotzdem nach Stuttgart rein gefahren und haben das Auto im Parkhaus abgestellt.
Alvar, brian und ich sind dann in ein Café gegangen und danach noch durch die Stadt gelaufen. Kurz vor 19 Uhr kam dann noch Rolf dazu und wir sind in das Café gegangen, in dem dann später auch das Treffen stattgefunden hat. brian und ich waren schon ziemlich müde als das Treffen begann. Trotzdem haben wir es bis kurz vor elf ausgehalten und im Parkhaus habe ich dann die Rechnung für den Tag bekommen: 15.40 EUR Parkgebühren...

Wir konnten dann bei Rolf übernachten und heute vormittag ging es dann zu mir nach Hause. Heute steht nichts mehr auf dem Plan, außer mal Mails checken.

Morgen bringe ich brian dann zu "Big Nerd Ranch", wo er nächste Woche einen Kurs halten wird...

Thursday, April 24, 2008

"German Perl Tour 2008" startet

Wie ich ja schon angekündigt habe, ist brian d foy in Deutschland und heute geht es mit der "German Perl Tour 2008" los.

Um 19 Uhr trifft sich Frankfurt.pm zu einem zusätzlichen Treffen im Zimt und Koreander...

Thursday, April 10, 2008

my vs. our

In letzter Zeit bin ich immer wieder auf die Fragestellung "Was ist der Unterschied zwischen my und our?".

Aus perldoc -f my:
A "my" declares the listed variables to be local (lexically) to the enclosing
block, file, or "eval". If more than one value is listed, the list must be placed
in parentheses.


Und aus perldoc -f our:
Unlike "my", which both allocates storage for a variable and associates a simple
name with that storage for use within the current scope, "our" associates a
simple name with a package variable in the current package, for use within the
current scope. In other words, "our" has the same scoping rules as "my", but does
not necessarily create a variable.

Mit our sind die Variablen also an das package gebunden, wodurch die Variable auch nach "außen" hin sichtbar wird. D.h. dass die Variable auch von anderen packages aus verwendet werden können. Mit my ist das nicht möglich:

#!/usr/bin/perl
use strict;
use warnings;
{
package MyTest;
my $test = 823;
}
print $MyTest::test,"\n";



Gibt eine Warnung aus...

C:\>my_vs_our.pl
Name "MyTest::test" used only once: possible typo at C:\my_vs_our.pl line 12.
Use of uninitialized value in print at C:\my_vs_our.pl line 12.


Ändert man das my in our, gibt es folgende Ausgabe:

C:\>my_vs_our.pl
823


Allerdings finde ich den übermäßigen Gebrauch an our-Variablen nicht so prickelnd, weil es mich in meinem Modul stark einschränkt. Möchte ich in $test nicht nur eine Zahl speichern, sondern eine Datenstruktur, dann werden alle Skripte die $test direkt verwenden nicht mehr funktionieren.

Deshalb arbeite ich dann lieber mit my-Variablen und getter- und setter-Methoden.

#!/usr/bin/perl
use strict;
use warnings;
{
package MyTest;
our $test = 9;
sub get_test{ return $test; }
sub set_test{ $test = shift; }
}
print $MyTest::test,"\n";
print MyTest::get_test(),"\n";
MyTest::set_test( 199 );
print MyTest::get_test(),"\n";
__END__
9
9
199


vs.

#!/usr/bin/perl
use strict;
use warnings;
{
package MyTest;
our $test = { irgendwas => 823, test => 9 };
sub get_test{ return $test->{test}; }
sub set_test{ $test->{test} = shift; }
}
print $MyTest::test,"\n";
print MyTest::get_test(),"\n";
MyTest::set_test( 199 );
print MyTest::get_test(),"\n";
__END__
HASH(0x235fc0)
9
199


Wie man sieht, ist die Ausgabe bei der direkten Verwendung von $test nicht mehr wie ursprünglich gedacht, während die Verwendung der Funktionen noch einwandfrei läuft. Jetzt noch beim zweiten Code das our in my ändern und alles ist ok...