如何将perl哈希引用绑定到java哈希映射

如何将perl哈希引用绑定到java哈希映射,java,perl,Java,Perl,我正在使用Perl,需要将哈希传递给Java方法 我尝试了以下代码: my $obj = new Pod_101() ; my %data = ('input' => 45, 'Lisa' => 30, 'Kumar' => 40); my $val = $obj->evaluate(\%data, "\${input*12}"); 它会导致以下错误: 无法将哈希(0x556322c62368)转换为位于的对象java.util.Map /usr/lib/x86_64-

我正在使用Perl,需要将哈希传递给Java方法

我尝试了以下代码:

my $obj = new Pod_101() ;
my %data = ('input' => 45, 'Lisa' => 30, 'Kumar' => 40);
my $val = $obj->evaluate(\%data, "\${input*12}");
它会导致以下错误:

无法将哈希(0x556322c62368)转换为位于的对象java.util.Map /usr/lib/x86_64-linux-gnu/perl5/5.26/Inline/Java/Object.pm第107行


似乎不直接支持将Perl哈希传递给Java。 下面是一个示例,说明如何通过将哈希键和值作为数组传递来解决此问题:

use Inline Java => <<'END' ;
   import java.util.* ;

   class Pod_101 {
      public Pod_101() {
      }

      public HashMap get_hash (String keys[], Integer vals[] ){
         HashMap<String, Integer> hash = new HashMap<>() ;
         for(int i= 0; i < keys.length; i++){
             hash.put(keys[i], vals[i]);
         }
         return hash;
      }
      public Integer evaluate(HashMap<String, Integer> h, String foo){
          return h.get("input") ;
      }
   }
END

my $obj = Pod_101->new() ;
my %data = ('input' => 45, 'Lisa' => 30, 'Kumar' => 40);
my $h = $obj->get_hash( [keys %data], [values %data]) ;
my $val = $obj->evaluate($h, "\${input*12}");
print "$val\n";

evaluate()
是如何定义的?似乎不支持传递散列,但传递数组。因此,您可以尝试将哈希作为数组传递给Java?公共字符串求值(映射结果,字符串s){String expression=s;StringWriter writer=new StringWriter();尝试{System.out.println(results);expression=“\n”+expression;Template expressionTemplate=new Template(“expression”),new StringReader(expression),new Configuration());expressionTemplate.process(results,writer);}catch(Exception e){System.out.println(e);}return writer.toString()}感谢Håkon Hægland,它正在按照您的建议工作。
45