perl中2种结构类型之间的差异

时间:2015-10-15 09:29:04

标签: perl

任何人都可以向我解释Perl中以下结构之间的区别:

$VAR = {"user" => "text", "id" => "textid"};

$VAR = {"user" : 4, "code" : "codetext"};

我如何访问每个结构的值?

2 个答案:

答案 0 :(得分:5)

$VAR = {"user" => "text", "id" => "textid"};

此处$ VAR是一个哈希引用,其中包含2个键(userid),其值分别为texttextid

访问hashref数据

#!/usr/bin/perl
use strict;
use warnings;
my $hashref = {"user" => "text", "id" => "textid"};
foreach my $key (keys %$hashref){
    print "Key: $key and Value: $hashref->{$key}";  
}
$VAR = {"user" : 4, "code" : "codetext"};

这不是有效的语法,如果use strict; use warnings;,您将收到错误。我认为这是JSON数据的转储。如果是这种情况,您需要使用CPAN上的可用JSON modules解析JSON。 simbabque向您展示了如何使用JSON module解析JSON。

答案 1 :(得分:4)

第一个是哈希引用,里面有两个

$VAR = {"user" => "text", "id" => "textid"};

您可以使用解除引用运算符->或使用${ ... }语法来访问它。因为它只有一个深度,{}可以省略。

my $id   = $VAR->{id};    # textid
my $user = $$VAR{user}; # text

perlreftut了解详情。

第二个是无效的Perl语法。它看起来像是JSON。也许它没有反序列化呢?

使用JSON module对其进行反序列化,最终得到第一个。

use JSON 'decode_json';

#         'note the quotes'
my $VAR = '{"user" : 4, "code" : "codetext"}';
my $perl_data_structure = decode_json($VAR);
my $user = $perl_data_structure->{user};