首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Perl中获取哈希值

在Perl中获取哈希值
EN

Stack Overflow用户
提问于 2015-11-23 16:34:56
回答 3查看 946关注 0票数 0

我有一个像这样的物体

代码语言:javascript
复制
my $result;
$result->{success} = 0;
$result->{error} = {errorType => "SHIT_ERROR"};

当我尝试用

代码语言:javascript
复制
print "result ".\$result;

印出来

散列(0xc191a768)

我怎么才能真正得到它的内容呢?

最后,我想把这个参数传递给我的重定向请求。只是为了增加更多的细节。@dev-null建议如何将其作为json传递,但我想像-success=0&errorerrorType=.请建议如何实现这一目标。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-23 22:03:23

要获得$result的内容,您必须:

代码语言:javascript
复制
print $result->{success};

然后打印error,但是请注意,error是一个嵌套的散列,如果您试图打印它的值:

代码语言:javascript
复制
print $result->{error};

您仍然会得到类似于HASH(...)的内容(您必须打印{error}元素的{errorType}元素)。

回到你的问题上。您说要将此参数传递给重定向请求。如何实现重定向请求?

使用$m->重定向()方法的

如果您正在使用$m->redirect(),我建议您将$result更改为以下更简单的结构:

代码语言:javascript
复制
% my $result = {
%   success => 0,
%   errorType => 'SHIRT_ERROR',
% };
% $m->redirect( make_uri('error_handler', $result), 302);

这会使一个像这样的uri:

代码语言:javascript
复制
/error_handler?errorType=SHIRT_ERROR&success=0

而重定向方法将重定向到它。然后,您的error_handerl.mc可以包含如下内容:

代码语言:javascript
复制
<%class>
  has 'success';
  has 'errorType';
</%class>
<%init>
  if ($.success eq "0") {
    print $.errorType;
  }
</%init>

在$m->重定向()上使用JSON

看起来梅森不支持像success=0&error[errorType]=...这样的查询字符串

我唯一能想到的选择是用JSON序列化请求,如下所示:

component.mc

代码语言:javascript
复制
<%init>
use JSON;

my $result;
$result->{success} = 0;
$result->{error} = {errorType => "SHIRT_ERROR"};

my $h = {
  result => encode_json $result
};

$m->redirect(make_uri('/error_handler', $h), 302);
</%init>

error_handler.mc

代码语言:javascript
复制
<%class>
  has 'result';
</%class>
<%init>
  use JSON;

  my $result = decode_json $.result;

  print dh $result;
</%init>

第一个组件将重定向到这样的url:

代码语言:javascript
复制
http://localhost:5000/error_handler?result=%7B%22success%22%3A0%2C%22error%22%3A%7B%22errorType%22%3A%22SHIRT_ERROR%22%7D%7D

我觉得它不太优雅,但很管用。

票数 1
EN

Stack Overflow用户

发布于 2015-11-23 16:39:10

代码语言:javascript
复制
use Data::Dump;
dd( $result );

代码语言:javascript
复制
use Data::Dumper;
print Dumper( $result );

或者简单的

代码语言:javascript
复制
while ( my ( $k, $v ) = each %{ $result } ) {
  print "$k => $v\n";
}
票数 0
EN

Stack Overflow用户

发布于 2015-11-23 17:39:48

如果要将散列序列化为JSON对象,则可以:

代码语言:javascript
复制
#!/usr/bin/env perl

use strict;
use warnings;

use JSON;

my $result;
$result->{success} = 0;
$result->{error} = {errorType => "SHIT_ERROR"};

print encode_json $result; # {"success":0,"error":{"errorType":"SHIT_ERROR"}}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33875982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档