【问题标题】:Hashmap in PerlPerl 中的哈希表
【发布时间】:2011-06-10 14:26:38
【问题描述】:

我正在使用 FRONTIER::CLIENT 模块在 Perl 中编写客户端 API。我正在尝试在 Perl 中执行类似以下操作:

HashMap<Integer, String> message = (HashMap<Integer, String>)client.execute("APIWrapper.login"); 
System.out.println(message.get(1000));

如何在 Perl 中实现相同的想法?

【问题讨论】:

    标签: arrays perl hashmap perl-module


    【解决方案1】:

    Hashmaps 是一种原生的 perl 数据结构。任何用散列符号 % 声明的变量都是存储键值对的散列。请参阅Perl data types 上的此文档。另请参阅Perl Data Structures Cookbook

    编辑

    See this example

    # This can be anything which returns pairs of strings
    my %login_message = getData(); # ( 'key1' => 'value1', 'key2' => 'value2' ); 
    
    for my $key ( keys %login_message ) { 
            print "key: $key, value: $login_message{$key}\n"; 
    }
    
    sub getData {
            return ( 'key1' => 'value1', 'key2' => 'value2' );
    }
    

    输出:

    key: key2, value: value2
    key: key1, value: value1
    

    【讨论】:

    • 我想出了以下内容,但我得到了这个异常:“WANTED DATA, GOT TAG VALUE.my %login_message = {$server->call("APIWrapper.loginRequest")}; while ( (my $key, my $value) = each %login_message) { print "key: $key, value: $login_message{$key}\n"; }
    • 这就是我想出的:我的 %login_message = ( $server->call("APIWrapper.loginRequest", @credentials) );对于我的 $key ( keys %login_message ) { print "key: $key, value: $login_message{$key}\n";并且输出仍然保持不变:WANTED DATA, GOT TAG 'VALUE'
    • @Gruther,您的错误“WANTED DATA, GOT TAG 'VALUE'”不是内部 Perl 错误消息。查看您对$server-&gt;call(...) 的调用的文档,看看它是否包含有关其错误的信息。对于 Perl 的内部错误,您可以使用 perldiag 手册页。
    • 感谢您的回复。我会尽量做进一步的解释; $server->call("Wrapper.loginRequest", @credentials);此方法 (Wrapper.loginRequest) 返回一个 hashmap 键值对。这是试图在 Perl 中实现的 java 示例:
    • Object [] params2 = new Object[]{new String("admin"),new String("admin")}; HashMap result = (HashMap)client.execute("Wrapper.loginRequest",params2); System.out.println(result.get(1000));
    【解决方案2】:

    以下代码是在 Perl 中使用哈希的示例:

    my %data = (
        red => 1,
        blue => 37,
        green => 99,
    );
    
    print $data{'red'}, "\n";
    

    【讨论】:

    • 感谢大家的帖子。我设法修复了这个错误。问题出在前沿模块中。我切换到 XML::RPC::FAST,一切看起来都很好。为什么整数不超过 9 个字符。我可以在 Perl 或 Bigint 中找到长整数吗?
    猜你喜欢
    • 1970-01-01
    • 2015-01-18
    • 2013-12-20
    • 2013-08-10
    • 1970-01-01
    • 2011-06-14
    • 2015-08-01
    相关资源
    最近更新 更多