In einem Skript sollen an verschiedene Strings die Namen von Subroutinen gebunden werden. In Abhängigkeit von diesem String soll die dazu gehörende Subroutine ausgeführt werden.
#!usr/bin/perl -w use strict; use warnings; use CGI qw/param/; my $ret; # Beispiel 1: Funktionsreferenzen my %commands1 = ( "BEFEHL1" => \&sub_1, "BEFEHL2" => \&sub_2, "BEFEHL3" => \&sub_3 ); # Beispiel 2: anonyme Funktionen my %commands2 = ( "BEFEHL1" => sub { print "Befehl 1"; }, "BEFEHL2" => sub { print "Befehl 2"; }, "BEFEHL3" => sub { print "Befehl 3"; } ); my $command = param('befehl'); my $arg = param('arg'); if(exists $commands{$command}) { $ret = $command{$command}->($arg); } else { print "$command ist kein gueltiger Befehl"; } sub sub_1 { return 1; } sub sub_2 { return 2; } sub sub_3 { return 3; }
Das 1. Beispiel definiert einen Hash, dessen Schlüssel die als String vorliegenden Kommandos sind, denen eine Referenz auf die dazu gehörende Subroutine zugewiesen wird. Sinnvoll ist diese Vorgehensweise, wenn es sich um umfangreiche Subroutinen handelt, denen Parameter übergeben werden sollen. Das zweite Beispiel definiert für die Elemente des Hashes anonyme (namenlose) Subroutinen, was dann sinnvoll sein kann, wenn es sich um relativ wenige Anweisungen handelt und keine Parameter erforderlich sind.