develooper Front page | perl.fwp | Postings from August 2002

Re: Multilingual function lookup table

Thread Previous | Thread Next
From:
Andrew.Savige
Date:
August 24, 2002 20:18
Subject:
Re: Multilingual function lookup table
Message ID:
694BB7191495D51183A9005004C0B05452DF39@ir-exchange-srv.ir.com.au
En op 23 augustus 2002 sprak (-ugene:
> One different way of doing it is to use the dispatch tables
> that are a builtin Perl feature:
>
> sub invoker {
>     &{$Handler::{+shift} || sub {-1}};
> }
>
> sub Handler::edit {
>     my $z = shift;
>     print "in EditHandler, z=$z\n";
>     return 1;
> }
>
> sub Handler::chmod {
>     my $z = shift;
>     print "in ChmodHandler, z=$z\n";
>     return 2;
> }

In case anyone is interested in comparing languages,
I have hacked out an analogous Java solution using the
Java Reflection API. Needless to say, I much prefer
(-ugene's Perl solution. :)

import java.util.*;
import java.lang.reflect.*;

class itest3
{
   public int edit(int z) {
      System.out.println("in EditHandler, z="+z);
      return 1;
   }

   public int chmod(int z) {
      System.out.println("in ChmodHandler, z="+z);
      return 2;
   }

   private int invoker(String name, int z) {
      Method meth;
      try {
         meth = this.getClass().getMethod(name, new Class[]{int.class});
      } catch (NoSuchMethodException e) {
         return (-1);
      }
      Integer iret;
      try {
         iret = (Integer)meth.invoke(this, new Object[]{new Integer(z)});
      } catch (Exception e) {
         System.out.println("oops, method call failed");
         return (-1);
      }
      return iret.intValue();
   }

   public void init() {
      int rc = invoker("edit", 42);
      System.out.println("rc="+rc);
      rc = invoker("chmod", 99);
      System.out.println("rc="+rc);
      rc = invoker("fred", 7);
      System.out.println("rc="+rc);
   }

   public static void main(String args[]) {
      itest3 ii = new itest3();
      ii.init();
   }
}

/-\

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About