roger: abfangen "&$perl_function_name(10)" wenn funktion nicht existier

Hallo,

über eine Variable in der der Funktionsname steht, springe ich Funktionen an.
Wie kann ich das sauber abfangen wenn der Funktionsname nicht stimmt/existiert. (schreibfehler)

Gruß
      roger

  1. Wie kann ich das sauber abfangen wenn der Funktionsname nicht stimmt/existiert. (schreibfehler)

    Das könnte dir helfen: http://stackoverflow.com/questions/433752/how-can-i-determine-if-a-perl-function-exists-at-runtime

    1. Abend,

      Das könnte dir helfen: http://stackoverflow.com/questions/433752/how-can-i-determine-if-a-perl-function-exists-at-runtime

      das ist schon gut so. Da die Funktionen Parameter haben ist das mit dem Hash nicht so gut.
      Wie kann ich es nun anstellen, das eine Funktion mit Parameter aufgerufen wird ??

      z.B.

        
      my $befehl = 'lesen';  
      &$befehl($para1,$para2,$para3)  
      
      

      So funktioniert es nicht.

      Wie kann ich dies lösen ??
               Danke
                 roger

      1. Wie kann ich es nun anstellen, das eine Funktion mit Parameter aufgerufen wird ??

        z.B.

        my $befehl = 'lesen';
        &$befehl($para1,$para2,$para3)

        
        >   
        > So funktioniert es nicht.  
        >   
        >     Wie kann ich dies lösen ??  
          
        Mit einem Hash, auch wenn du das nicht sehen willst. Übergebe immer die Parameter. Deine Funktionen müssen diese Parameter ja nur auf Bedarf verwenden.  
          
        mfg Beat
        
        -- 
        
        ><o(((°>           ><o(((°>  
        
           <°)))o><                     ><o(((°>o  
        Der Valigator leibt diese Fische
        
      2. Wie kann ich es nun anstellen, das eine Funktion mit Parameter aufgerufen wird ??

        z.B.

        my $befehl = 'lesen';
        &$befehl($para1,$para2,$para3)

        
        >   
        > So funktioniert es nicht.  
        >   
        >     Wie kann ich dies lösen ??  
          
        So:  
          
        ~~~perl
        my $befehl = 'lesen';  
        $befehl->($para1,$para2,$para3) if ref $befehl eq 'CODE';  
        
        

        Struppi.

        1. So:

          my $befehl = 'lesen';

          $befehl->($para1,$para2,$para3) if ref $befehl eq 'CODE';

            
          Quark.  
            
          so:  
            
          ~~~perl
          no strict 'refs';  
          $befehl->(1,2,3) if defined &{$befehl};  
          
          

          Struppi.

        2. Wie kann ich es nun anstellen, das eine Funktion mit Parameter aufgerufen wird ??

          z.B.

          my $befehl = 'lesen';
          &$befehl($para1,$para2,$para3)

          
          > >   
          > > So funktioniert es nicht.  
          > >   
          > >     Wie kann ich dies lösen ??  
          >   
          > So:  
          >   
          > ~~~perl
          
          my $befehl = 'lesen';  
          
          > $befehl->($para1,$para2,$para3) if ref $befehl eq 'CODE';  
          > 
          
          

          Das würde ich NICHT tun, weil es böse ist beliebige Subs von aussen zugänglich zu machen.

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Das würde ich NICHT tun, weil es böse ist beliebige Subs von aussen zugänglich zu machen.

            Mal abgesehen davon, dass der Code so sowieso falsch war, wieso von aussen und wieso beliebig und wieso zugänglich?

            Das Beispiel kann z.b. von einem Perl/TK Skript kommen, wo Buttons eine Funktion auslösen, beliebig ist es auch nicht, sie müssen im package sein und zugänglich ist nur der Aufruf, aber keine Parameter oder sonst was.

            Struppi.

  2. Tach auch.

    über eine Variable in der der Funktionsname steht, springe ich Funktionen an.
    Wie kann ich das sauber abfangen wenn der Funktionsname nicht stimmt/existiert. (schreibfehler)

    Wenn es dir darum geht, Funktionen aufzurufen, welche durch Usereingaben bestimmt werden, würde ich dir empfehlen, anonyme Funktionen in einem Hash zu speichern. Dann kannst du auf Existens des Hash-Keys prüfen, und der User kann nicht irgendwelche Funktionen aufrufen, sondern nur solche, die du explizit als so aufrufbar definierst.

    Bis die Tage,
    Matti

  3. über eine Variable in der der Funktionsname steht, springe ich Funktionen an.

    Diese Vorgehen ist bereits kriminell. Die Antwort lautet: tue es nicht!

    Wie kann ich das sauber abfangen wenn der Funktionsname nicht stimmt/existiert. (schreibfehler)

    my %funcs = (
       key1 => &func1,
       key2 => &func2,
     );

    if( exists $funcs{$userinput} ){ $funcs{$userinput}->(); }
    else{ ... # your Errorhandling }

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische