Thursday, April 22, 2010

Switch.pm aus dem Perl-Core entfernt

Nicholas Clark hat diese Woche Switch.pm aus dem Perl-Core entfernt. Switch.pm war lange Zeit die einzige Möglichkeit, so etwas wie ein Switch-Statement in Perl zu benutzen. Java, C++ und sogar Pascal haben das schon lange.

Warum wurde das jetzt entfernt?

Weil Switch.pm ein Sourcecode-Filter ist und dadurch nicht wirklich zuverlässig ist. Das switch war also kein wirkliches Sprachelement von Perl, sondern war "irgendwie" aufgesetzt.

Und seit Perl 5.10 gibt es auch etwas viel besseres: given/when!

Warum nicht der gleiche Name wie bei anderen Sprachen? Weil given/when viel mächtiger ist als das switch/case in den meisten anderen Sprachen. Das when benutzt nämlich den Smart-Match-Operator. Auf den Smart-Match-Operator werde ich in nächster Zeit in einem weitern Blogpost eingehen. Hier aber ein kurzes Beispiel für given/when:

    use feature qw(switch say);

my $var = 1;

# welche Variable soll betrachtet werden
given( $var ) {
when( 1 ){ say '$var ist 1'; }
when( 2 ){ say '$var ist 2'; }
default { say '$var ist weder 1 noch 2' }
}

given/when muss mit "use feature qw(switch)" aktiviert werden. Im Gegensatz zu Switch.pm sind das jetzt Elemente der Sprache und kein Codefilter mehr.

2 comments:

Zeno said...

Eine Frage hierzu: Gibt es einen bestimmten Grund, dass man

use feature qw(switch);

schreiben muss, wo es doch

given/when heißt?

ReneeB said...

Das ist eine gute Frage. Das war eine Entscheidung der Perl 5 Porters...

Vermutlich, weil "switch" drei Sachen exportiert: given, when und default. Und es wäre wohl zu viel Arbeit, alle drei Sachen extra zu exportieren.

Und Programmierer sollten ja faul sein ;-)

Vielleicht auch, weil es die "Nähe" zum switch in anderen Sprachen andeuten soll.

Aber alles nur Vermutung, da ich persönlich die Entscheidungsgrundlage nicht kenne. Da müsste man evtl. mal im Archiv der P5P-Mailingliste durchforschen. Z.B. unter http://perl.markmail.org