Take: Subroutine ausführen, Name im Skalar

Hallo,

ich habe mal eine Frage, ich glaube ich hab auch schon irgendwo mal gesehen, dass das geht.
Mein Problem:
ich würde gerne eine Sub ausführen lassen, deren Name in einem Skalar steht, also zum Beispiel:

  
$test = "test_sub";  
# Hier kommt der Befehl zum ausführen der Sub  
  
sub test_sub {  
              print "Hallo Welt!";  
              }  

Am Ende sollte dann "Hallo Welt!" auf dem Bildschirm stehen :)
Hoffe ihr habts verstanden und schonmal vielen Dank!

Gruß,
Take

  1. ich würde gerne eine Sub ausführen lassen, deren Name in einem Skalar steht, also zum Beispiel:

    $test = "test_sub";

    Hier kommt der Befehl zum ausführen der Sub

    sub test_sub {
                  print "Hallo Welt!";
                  }

    
    >   
    > Am Ende sollte dann "Hallo Welt!" auf dem Bildschirm stehen :)  
    > Hoffe ihr habts verstanden und schonmal vielen Dank!  
      
    Zum Beispiel:  
      
    ~~~perl
    my %functions=(  
       hallo =>  
          sub {  
             print "hallo welt\n";  
          },  
       adee =>  
          sub {  
             print "adee du schnöde welt\n";  
          },  
    );  
      
    exists $functions{ $eviluserinput }  
       and $functions{ $eviluserinput }->();
    

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. my %functions=(

      hallo =>
            sub {
               print "hallo welt\n";
            },
         adee =>
            sub {
               print "adee du schnöde welt\n";
            },
      );

      exists $functions{ $eviluserinput }
         and $functions{ $eviluserinput }->();

        
        
      Hatte ich mir zwar anders vorgestellt, ist aber super die Lösung! :)  
      Vielen Dank,  
      Take
      
  2. Am Ende sollte dann "Hallo Welt!" auf dem Bildschirm stehen :)
    Hoffe ihr habts verstanden und schonmal vielen Dank!

    Das geht so:

    #!/usr/bin/perl -w  
    use strict;  
      
    my $test = "test_sub";  
      
    no strict 'refs';  
    $test->();  
      
    sub test_sub {  
        print "Hallo Welt!";  
    }
    

    Aber prinzipiell ist der Weg von Beat vorzuziehen, da du damit den Ablauf besser kontrollieren kannst

    Struppi.

    1. no strict 'refs';
      $test->();

      Jo, das hatte ich ursprünglich gemeint, aber auf meiner HP ist Beats Version (die ja im Grunde nix anderes macht) echt sicherer!

      Danke dir auch nochmal,
      Take