Mittwoch, 30. Januar 2008

Movable Type Open Source released

Moveable Type (MT), eine Blog-Software geschrieben in Perl, ist seit 12. Dezember 2007 Open Source (MTOS).

Die Open Source Variante steht jetzt auch zum Download bereit.

via: Movable Type Open Source released

Dienstag, 29. Januar 2008

Perl 5.10: Smart Matching Benchmark

Über den neuen, coolen Smart-Matching-Operator hatte
ich schon mal etwas geschrieben (Perl 5.10: Smart Matching).

Angeregt durch Michael Schwerns Artikel Smart match beats the hell out of grep() and first() habe ich den dort erwähnten Benchmark ebenfalls einmal ausgeführt. Es stimmt: ~~ kann rasend schnell sein.


Benchmarking Code


#! perl
use Benchmark;
use 5.010;

use List::Util qw(first);

my @array = map { chr(64+int(rand(26)))."$_" } 1..1000;

timethese(100_000, {
'first' => sub {
my $needle = chr(64+int(rand(26))).int(rand(1000)+1);
first { $_ eq $needle } @array;
},
'grep BLOCK' => sub {
my $needle = chr(64+int(rand(26))).int(rand(1000)+1);
grep { $_ eq $needle } @array;
},
'grep EXPR' => sub {
my $needle = chr(64+int(rand(26))).int(rand(1000)+1);
grep $_ eq $needle, @array;
},
'~~' => sub {
my $needle = chr(64+int(rand(26))).int(rand(1000)+1);
$needle ~~ @array;
}
});


Meine Ergebnisse:

Benchmark: timing 100000 iterations of first, grep BLOCK, grep EXPR, ~~...
first: 36 wallclock secs (35.67 usr + 0.00 sys = 35.67 CPU) @ 2803.32/s (n=100000)
grep BLOCK: 21 wallclock secs (21.88 usr + 0.00 sys = 21.88 CPU) @ 4571.43/s (n=100000)
grep EXPR: 22 wallclock secs (21.52 usr + 0.02 sys = 21.53 CPU) @ 4644.47/s (n=100000)
~~: 11 wallclock secs (11.14 usr + 0.00 sys = 11.14 CPU) @ 8975.05/s (n=100000)


Cool und schnell, was will man mehr!


Vorhergehende Artikel von mir zu den neuen Features und Verbesserungen in Perl 5.10:

Montag, 28. Januar 2008

Neue Ausgabe $foo - Perl-Magazin online (1/2008)

Die neue Ausgabe (1/2008) des $foo - Perl-Magazin ist online.

Inhaltsübersicht:


  • Einiges zum Thema CGI-Sicherheit

  • Größere Datenmengen in Bilder gepresst

  • Rezension - Mastering Perl

  • Interview - Richard Dice

  • Neue RegEx-Features in Perl 5.10

  • Rätselhaftes open

  • Probleme mit base.pm

  • Perl 6 Tutorial - Teil 2

  • Winter of Code

  • Charsets

  • Tipps und Tricks: $/

  • Date::Calc

  • Usergruppen: Erlangen.pm

  • CPAN-News



Das Magazin wird von Ausgabe zu Ausgabe besser: Layout (Print und Online), Autoren, Inhalt sind inzwischen echt top.

via:

Donnerstag, 24. Januar 2008

Perl 5.10: Smart Matching

Der neue Smart-Matching-Operator ~~ ist meiner Ansicht nach die interessanteste Verbesserung von Perl 5.10.

Man kann jetzt sehr einfach nach der berühmten Nadel im Heuhaufen suchen,


use 5.010;

if ( $nadel ~~ $heu ) {
say 'Treffer in String';
}

if ( $nadel ~~ @heu ) {
say 'Treffer in Array';
}

if ( $nadel ~~ %heu ) {
say "Schlüssel $nadel existiert im Hash \%heu";
}

if ( $nadel ~~ $coderef ) {
say 'Codereferenz: $coderef->($nadel) liefert wahr';
}

if ( $nadel ~~ qr/Regex/ ) {
say 'Der reguläre Ausdruck passt';
}

und muss sich dabei nicht um den passenden Vergleichsoperator kümmern.

Schritt für Schritt

Einbinden

Der neue Smart-Matching Operator ~~ steht nur zur Verfügung, wenn er explizit angefordert wird:

use 5.010;

(Siehe dazu auch Perl 5.10: use 5.010;.)

KommutativerOperator

Der Smart-Matching Operator ist ein kommutativer Operator, d.h, es spielt keine Rolle, ob man $nadel ~~ @heu oder @heu ~~ $nadel verwendet. Die beiden Ausdrücke können also nach Belieben vertauscht werden.

~~ wird genauso verwendet wie die bekannten Vergleichsoperatoren eq bzw. ==.

Testprogramm

Um das Verhalten des Smart-Matching besser zu verstehen, erstellen wir zunächst ein sehr einfaches kleines Programm, welches anzeigt, ob bei einem Vergleich ein Treffer erzielt wurde oder nicht.

#!/opt/perl510/bin/perl
use strict;
use warnings;
use 5.010;

sub test_smartmatch {
my $lhs = shift @_; # Left Hand Side (LHS)
my $rhs = shift @_; # Right Hand Side (RHS)
if ( $lhs ~~ $rhs ) {
say "$lhs smartmatches $rhs";
} else {
say "$lhs doesn't smartmatch $rhs";
}
} ##

Und verwenden das Testprogramm für die nachfolgenden Fälle.

Strings vergleichen

&test_smartmatch("Foo","Foo");
Foo smartmatches Foo
&test_smartmatch("Fo","Foo");
Fo doesn't smartmatch Foo

Hier verhält sich ~~ wie eq, dem Vergleichsoperator für Zeichenketten.

Zahlen vergleichen

# Numish (looks like a number)
&test_smartmatch(23, 23);
23 smartmatches 23
&test_smartmatch(23,23.0);
23 smartmatches 23
&test_smartmatch(23,"23.0");
23 smartmatches 23.0
&test_smartmatch(23, "23.0x");
23 doesn't smartmatch 23.0x

Anders als der numerische Vergleichsoperator == handelt ~~ nach dem Motto "Wenn es aussieht wie eine Zahl, dann behandle es auch wie eine Zahl".
Vorsicht:
Wenn beide Seiten des Vergleichs wie ein String aussehen, wird es auch wie ein String behandelt.

&test_smartmatch('23', '23.0');
23 doesn't smartmatch 23.0
&test_smartmatch("23", "23.0");
23 doesn't smartmatch 23.0


Arrays

&test_smartmatch(23, [qw/12 13 23 32 42/]);
23 smartmatches ARRAY(0x3a224)
&test_smartmatch([qw/12 13 23 32 42/], 23);
ARRAY(0x3a104) smartmatches 23

Hier prüft ~~, ob der Array den gesuchten Wert enthält. Das Verhalten entspricht grep.

Auch hier gelten die oben angeführten Vergleichsregeln für Zeichenketten und Zahlen.

Hashes


&test_smartmatch(97, {'a' => '97', 'b' => '98', 'c' => '99' });
97 doesn't smartmatch HASH(0x18ca3c)
&test_smartmatch('a', {'a' => '97', 'b' => '98', 'c' => '99' });
a smartmatches HASH(0x3a314)

Hier prüft ~~, ob der Hash den gesuchten Schlüssel (key) enthält. Das Verhalten entspricht exists.

Reguläre Ausdrücke

&test_smartmatch('Foo',qr/oo/);
Foo smartmatches (?-xism:oo)

Hier verhält sich ~~ wie =~, dem Bindungsoperator für reguläre Ausdrücke.

Datenstrukturen vergleichen

Arrays vergleichen

&test_smartmatch([1,2,3],[1,2,3]);
ARRAY(0x3a314) smartmatches ARRAY(0x190cd3c)
&test_smartmatch([1,2,3],[1,2]);
ARRAY(0x18fa68c) doesn't smartmatch ARRAY(0x19161ac)
&test_smartmatch([1,2,3],[3,2,1]);
ARRAY(0x18fa67c) doesn't smartmatch ARRAY(0x191636c)

~~ prüft hier, ob alle Werte der Arrays identisch sind. Beide Arrays müssen daher auch gleich groß (lang) sein. Die Reihenfolge der Elemente spielt, wie von Arrays gewohnt, eine Rolle.

Hashes vergleichen

&test_smartmatch( {'a' => '97', 'b' => '98', 'c' => '99' },
{'c' => '99', 'b' => '98', 'a' => '97' });
HASH(0x3a104) smartmatches HASH(0x19461bc)
&test_smartmatch( {'a' => '97', 'b' => '98', 'c' => '99' },
{'a' => '100', 'b' => '101', 'c' => '102' });
HASH(0x3a314) smartmatches HASH(0x193cd7c)

~~ prüft hier, ob die Schlüssel der Hashes identisch sind. Beide Hashes müssen daher auch gleich groß sein. Die Reihenfolge der Elemente spielt, wie von Hashes gewohnt, keine Rolle.

Fazit
Smart-matching ist ein wirklich cooles Feature. Es macht einfach Spaß. Wenn man ein wenig mit Zahlen und Zeichenketten aufpasst, macht ~~ das, was man erwartet (DWIM).

Siehe dazu auch:


That's it.

Vorhergehende Artikel von mir zu den neuen Features und Verbesserungen in Perl 5.10:

Dienstag, 22. Januar 2008

Radio Perl, Folge 5

Auf einer längeren Zugfahrt habe auch ich es heute geschafft mir die fünfte Folge von Radio Perl anzuhören.

Die Themen der fünften Folge:


Das perlt im Gehörgang.

Jochen bittet darum, Links zu interessanten Themen für kommenden Folgen bei del.icio.us mit dem Tag radioperl abzulegen.

via: perlNews: Radio Perl - Folge 5

Jakoblog: Perl in Bibliothekssystemen

Wer sich für das Thema Perl in Bibliothekssystemen interessiert, dem empfehle ich Jakoblog — Das Weblog von Jakob Voß.

Jakob Voß ist u.a. der Autor des CPAN-Moduls PICA::Record, das beispielsweise zum Weiterverarbeiten von GBV-Verbunddaten mit SRU-Schnittstelle und Perl verwendet werden kann.

Lesenswert, nicht nur für Bibliothekare.

Perl Community Ads - Perl-Veranstaltungen promoten

Gábor Szabó hat bereits vor geraumer Zeit (November 2007) einen Perl Community Ad Server bereitgestellt. Die kostenfreien Anzeigen sollen zu einem höhererem Bekanntsheitsgrad der Perl Community führen.

Der Adserver unterstützt Geotargeting, es werden daher Anzeigen passend zur (IP-)Herkunft des Webseitenbesuchers angezeigt.

Das Einbinden in die eigene Website oder Blog via JavaScript ist wirklich sehr einfach. Dank CSS lassen sich die Textlinks auch im Look & Feel der eigenen Site einbinden.

Ich habe die Perl Community Ads jetzt auch hier eingebunden und würde mich darüber freuen, wenn der/die ein oder andere die Perl Community Anzeigen auch in seine/ihre Site einbinden würde. Danke.


via: Perl-Veranstaltungen promoten

Bundesagentur für Arbeit wählt Open Source - 13.000 Internet-Informationsplätze laufen unter Linux

Die Bundesagentur für Arbeit (BA) hat Ende 2007 die Umstellung ihrer rund 13.000 Internet-Informationsplätze in den Arbeitsagenturen von Windows-NT auf freie Software mit dem Betriebssystem Linux abgeschlossen.

Zitat:
"Die BA setzt bei der Umrüstung ihrer Internet-Center (IC) in den Agenturen für Arbeit auf die Vorteile des Betriebssystems Linux: stabiles Betriebsverhalten, hohe Sicherheit und weitreichende Anpassungs- und Konfigurationsmöglichkeiten. Zusammen mit den bereits seit Jahren unter Linux betriebenen Servern der IC ergeben sich standardisierte Automatisierungs- und Wartungsverfahren und damit eine Senkung der Betriebskosten. Durch den Einsatz quelloffener Programme (so genannter Open Source-Software) entfallen außerdem die Lizenzkosten – ein weiterer Pluspunkt."


via:

Erste Interviews mit den Sprechern der FOSDEM 2008 Brüssel

Die ersten Interviews mit den Sprechern auf der Fosdem 2008 sind online.

Es wird auch diesmal einen Language-Track zu Perl6 von Patrick Michaud geben. (Die Suche war also erfolgreich.)

"Patrick Michaud will talk about the Perl 6 programming language from a variety of perspectives, and targeting a number of different audiences. He'll look at some of the changes and improvements that Perl 6 has made as a language over previous versions of Perl, as well as many of the technical details of its implementation. Along the way he'll also take a look at Parrot, and see how it is progressing to become a common runtime platform for Perl, Python, PHP, Ruby, Javascript, and many other dynamic languages."

Der Call for Lightning Talks auf der Fosdem 2008 ist übrigens noch bis zum 31. Januar 2008 offen.

Via:

Samstag, 19. Januar 2008

How to Tell Your Perl Story (at ...)

brian d foy geht in seinem lesenswertem Artikel How to Tell Your Perl Story (at OSCON) auf das Thema "Themenfindung für Perl-Vorträge" ein:


  • Finding the Good Stories

  • What's Your Story and What's Your Audience?


    • The Perl language itself, and how it works

    • Using Perl features to provide programmer capabilities

    • Using other technologies from Perl

    • The process of using Perl to get work done


  • Lightning Talks and Birds of a Feather

  • Discussion Panels



Obwohl es mehr um die OSCON 2008 lässt sich diese Liste sicherlich auch für Talks bei den regionalen Perl Mongers-Treffen oder (inter)nationalen Perl-Workshops verwenden.

Siehe dazu auch:

Donnerstag, 17. Januar 2008

Parrot 0.5.2 freigegeben: "make perl6" - Es ist ganz einfach, z.B. LolCode

Am 15. Januar 2008 wurde Parrot 0.5.2 freigegeben. Eines der Highlights des neuen Releases ist "make perl6". Das ist zwar noch meilenweit von einem endgültigen Perl 6 entfernt, aber es geht voran. Das nächste Release ist für den 19. Februar 2008 geplant.

Simon Cozens hat Parrot einfach mal ausprobiert, einen Stub für LolCode von Will Coleda gefunden und davon ausgehend in zwei Stunden einen Parser für LolCode erstellt.

LOLCODE ist zugegebenermaßen keine Programmiersprache für den industriellen Einsatz, aber:

Simon Cozens:
"I spent two hours this afternoon basically starting from zero knowledge of the Parrot Compiler Toolkit and added a bunch of features to Will's stub, including variable assignment and access. That is astonishing.

The bottom line? The takeaway? It's really, really true. Parrot lets you implement your own languages using Perl 6 rules for the grammar and Perl 6 for the compiler. "



GUUG-Frühjahrsfachgespräch 2008 - Programm ist online - Anmeldung möglich

Das Frühjahrsfachgespräch (FFG) als "Hauskongress" der German Unix User Group (GUUG) e.V. ist eine Veranstaltung von und für professionelle Systemadministratoren und -programmierer und gleichzeitig die ideale Gelegenheit zu einem persönlichen Treffen der Mitglieder der GUUG.

Der Schwerpunkt liegt auf technischen Fragestellungen, daneben gewinnen aber auch rechtliche, ethische, soziale und ökonomische Aspekte, welche mit dem Einsatz und der Administration von informationstechnischen Systemen in Zusammenhang stehen, zunehmend an Bedeutung, z.B. Zeitmanagement (GTD), Schlipsträger, dumme Fehler kluger Informatiker.

Zum Abschluß der Veranstaltung wird Horst Samsel vom BSI über "Die Rolle des Staates bei der IT-Sicherheit" sprechen.

Das FFG 2008 findet vom 11.-14.03.2008 an der FH München statt.

Das FFG beginnt traditionell mit zwei Tutoriumstagen und schließt mit zwei Vortragstagen ab. Die Vorträge finden in zwei parallelen Tracks statt.

Die Preisliste gibt einen Überblick über die verschiedenen Karten für unterschiedliche Tage, Tutorien und die Konferenz. GUUG-Mitglieder erhalten einen Rabatt von 20%. Frühbucher erhalten ebenfalls einen 20%igen Rabatt bei Anmeldung bis zum 08.02.2008 und Bezahlung bis zum 15.02.2008.

Montag, 14. Januar 2008

Regex Legends: The People Behind the Magic

Im Flagrant Badassery - A JavaScript and regular expression centric blog gibt es ein (sicherlich unvollständiges) Verzeichnis der Menschen, die viel zur Entwicklung und Verbreitung regulärer Ausdrücke beigetragen haben:

Regex Legends: The People Behind the Magic


  • Jeffrey Friedl

  • Jan Goyvaerts

  • Philip Hazel

  • Stephen Kleene

  • Henry Spencer

  • Ken Thompson

  • Larry Wall



Kostprobe:

... Perl, which has done more than any other programming language to popularize and extend the power of regular expressions ...


The recently released Perl 5.10 continues to push the state of the art in regex power, and upcoming changes outlined by Wall for Perl 6 (called Perl 6 rules; described in Apocalypse, Synopsis, and Exegesis 5) fearlessly redesign Perl's regular expression language.

Enjoy!

Samstag, 12. Januar 2008

Perl 5.10: logical defined or //

Eine der Verbesserungen von Perl 5.10 ist der neue logische defined-or Operator //, der so ähnlich funktioniert wie der gute alte logische oder Operator ||.


$setting //= $DEFAULT;

macht genau dasselbe wie

$setting = defined $setting ? $setting : $DEFAULT;
oder

unless ( defined $setting ) {
$setting = $DEFAULT;
}

Es wird also nicht geprüft, ob $setting wahr ist, sondern ob $setting definiert ist.

In Perl wird jeder skalare Wert, der nicht zu Null (0) oder zur leeren Zeichenkette ('' bzw. "") evaluiert, als wahr interpretiert. Jeder skalare Wert, der nicht zu undef evaluiert, wird als definiert interpretiert. Null und die leere Zeichenkette sind daher logisch falsch aber definiert.

Beispiel:

use strict;
use warnings;

my $DEFAULT = 42;
my $setting = 0;

$setting ||= $DEFAULT;

setzt $setting auf den Wert von $DEFAULT, da 0 (Null) immer als logisch falsch interpretiert wird.

$setting //= $DEFAULT;

hingegen lässt 0 (Null), weil definiert, als Wert für $setting zu.

Eine elegante Lösung um den "0 ist kein wahrer Wert"-Bug zu vermeiden.

Siehe dazu auch:


Was ist eigentlich mit dor und err passiert?

Das Feature err bzw. dor, ein // (defined or) mit geringerer Präzedenz, welches in 5.9.4 noch implementiert wurde, ist in 5.10.0 nicht mehr vorhanden. Die Gründe dafür kann man der längeren Diskussion auf der p5p-Mailing-Liste entnehmen.

Die kurze Fassung:

  • err kann eine falsche Assoziation, z.B mit Fehler, bei Programmierern erzeugen.

  • In Perl 6 wird es keinen err sondern einen orelse Operator geben, der anders funktionieren wird als ein defined or mit niedriger Präzendenz





That's it.

Vorhergehende Artikel von mir zu den neuen Features und Verbesserungen in Perl 5.10:

Donnerstag, 10. Januar 2008

11 besonders sichere Open-Source-Projekte: Perl ist dabei

Insgesamt elf Open-Source-Projekte, darunter die Programmiersprache Perl, haben die zweite Sprosse (Rung2) der Coverity-Scan Sicherheits-Leiter erreicht.

Das Coverity-Scan-Projekt testet im Auftrag des US Department of Homeland Security Open Source Software im Quellcode auf Fehler, die Sicherheitslücken verursachen können. (Mit Closed Source Software ist das ja nicht so einfach möglich.)

via: Pressetext - Coverity: Elf Open-Source-Projekte besonders sicher - Perl und PHP erreichen zweite Sprosse der Sicherheitsleiter

Test Driven Development

Skud (Kirrily Robert) hat die Slides von ihrem dreieinhalbstündigem Tutorial Test Driven Development auf der Open Source Developers' Conference 2007 bereits vor einem Monat bei SlideShare veröffentlicht.

Schöne Einführung und Übersicht in das Thema Testen für Perl-, Python-, PHP-, Ruby-, C/C++- und JavaScript-Programmierer.



Enjoy!

Perl 5.10: use 5.010;

Die gute Nachricht zuerst: Perl 5.10 ist rückwärtskompatibel zu früheren Perlversionen.

Die neuen Features von Perl 5.10 werden also aus Gründen der Rückwärtskompatibilität nicht automatisch geladen, sondern müssen explizit wie folgt als Pragma eingebunden werden:

Alle neuen Features verwenden


use strict;
use warnings;
use 5.010; # Bevorzugt zu verwenden

oder

use strict;
use warnings;
use 5.10.0;

oder

use strict;
use warnings;
use feature qw/:5.10/;

oder

use strict;
use warnings;
use feature ':5.10.0';

Aus Portabilitätsgründen ist die erste Form zu bevorzugen.

Kommandozeilenschalter -E

Die neuen Features können auf der Kommandozeile mit dem neuen Schalter -E geladen werden:

perl -w -E "say 'Hallo Welt'"


Nur bestimmte Features einbinden

Wer nur bestimmte Features einbinden möchte, muss dies explizit angeben.

Beispiel: state, say und switch einbinden

use feature qw/say state switch/;


Scope

Alle neuen Features, die über das Pragma use feature eingeführt werden, haben einen lexikalischen Scope (Geltungsbereich), d.h. es ist nur im umschließenden Block bzw. Datei gültig.

Man kann sie daher für einzelne Codeblöcke einschalten

use strict;
use warnings;

{ # Start of Scope
use feature 'say';
say "say ist hier verfügbar.";
} # End of Scope

print "say ist hier nicht verfügbar.\n";


oder mittels no feature ausschalten.


use strict;
use warnings;
use feature 'say';

say "say ist hier verfügbar";

{ # Start of Scope
no feature 'say';
print "Hier ist say nicht verfügbar.\n";
} # End of Scope

say "Hier ist say wieder verfügbar.";

Siehe dazu auch:


That's it.

Vorhergehende Artikel von mir zu den neuen Features und Verbesserungen in Perl 5.10:

Dienstag, 8. Januar 2008

Perl 5.10: -Duserelocatableinc relocatable Perl für Linux

Eine der Verbesserungen von Perl 5.10 ist die Möglichkeit ein verschiebbares (relocatable) Perl unter Linux und ähnlichen Betriebssystemen zu erstellen.

Darüber werden sich vor allem Systemadministratoren und Paketmanager freuen.

Dieses Feature muss bereits bei der Kompilierung eingeschaltet werden:


-Duserelocatableinc


Mit ActiveState Perl für Windows geht das ja schon länger:


C:\perl\bin\reloc_perl.bat [options] topath [frompath]

Run 'perldoc reloc_perl.bat' for further information.

Zur Abwechslung muss Perl für Linux mal zu Perl für Windows aufholen.

Schritt für Schritt zum relocatable Perl


cd /tmp
wget http://www.perl.com/CPAN/src/perl-5.10.0.tar.gz
tar -xzf perl-5.10.0.tar.gz
cd perl-5.10.0/
more README
perldoc INSTALL

./Configure -des -Dprefix=/opt/perl510 -Duserelocatableinc

make
make test
sudo make install

Jetzt sollte sich ein relocatable Perl 5.10 im Verzeichnis /opt/perl510/ befinden.
(Siehe dazu auch: Perl 5.10.0 parallel zu einem bestehendem Perl installieren.)

/opt/perl510/bin/perl -V
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
... (SNIP)
@INC:
/opt/perl510/lib/5.10.0/i686-linux
/opt/perl510/lib/5.10.0
/opt/perl510/lib/site_perl/5.10.0/i686-linux
/opt/perl510/lib/site_perl/5.10.0
.


Perl 5.10 von /opt/perl510/ nach /opt/customer/ verschieben:


sudo mkdir /opt/customer/
sudo mv /opt/perl510/ /opt/customer/

Perl 5.10 befindet sich jetzt im Verzeichnis /opt/customer/perl510/.

/opt/customer/perl510/bin/perl -V
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
... (SNIP)
@INC:
/opt/customer/perl510/lib/5.10.0/i686-linux
/opt/customer/perl510/lib/5.10.0
/opt/customer/perl510/lib/site_perl/5.10.0/i686-linux
/opt/customer/perl510/lib/site_perl/5.10.0
.


That's it.

Vorhergehende Artikel von mir zu den neuen Features und Verbesserungen in Perl 5.10:

Dienstag, 1. Januar 2008

Perl 5.10: Bessere Fehlermeldungen

Bessere Fehlermeldungen sind eines der der neuen Features von Perl 5.10.

Beispiel (Use of uninitialized value):


use strict;
use warnings;

my $vorname = 'Lieschen';
my $nachname = 'Mueller';

my $alter = undef;

print "$vorname $nachname ist $alter Jahre alt.\n";

Fehlermeldung in Perl 5.8.8

Use of uninitialized value in concatenation (.)
or string at better_errormessages_510.pl line 9.


Welche der drei Variablen ist nicht initialisiert?

Fehlermeldung in Perl 5.10.0

Use of uninitialized value $alter in concatenation (.)
or string at better_errormessages_510.pl line 9.


Alles klar? Schönes Feature.


Vorhergehende Artikel von mir zu den neuen Features in Perl 5.10: