我有一个像这样的物体
my $result;
$result->{success} = 0;
$result->{error} = {errorType => "SHIT_ERROR"};当我尝试用
print "result ".\$result;印出来
散列(0xc191a768)
我怎么才能真正得到它的内容呢?
最后,我想把这个参数传递给我的重定向请求。只是为了增加更多的细节。@dev-null建议如何将其作为json传递,但我想像-success=0&errorerrorType=.请建议如何实现这一目标。
发布于 2015-11-23 22:03:23
要获得$result的内容,您必须:
print $result->{success};然后打印error,但是请注意,error是一个嵌套的散列,如果您试图打印它的值:
print $result->{error};您仍然会得到类似于HASH(...)的内容(您必须打印{error}元素的{errorType}元素)。
回到你的问题上。您说要将此参数传递给重定向请求。如何实现重定向请求?
使用$m->重定向()方法的
如果您正在使用$m->redirect(),我建议您将$result更改为以下更简单的结构:
% my $result = {
% success => 0,
% errorType => 'SHIRT_ERROR',
% };
% $m->redirect( make_uri('error_handler', $result), 302);这会使一个像这样的uri:
/error_handler?errorType=SHIRT_ERROR&success=0而重定向方法将重定向到它。然后,您的error_handerl.mc可以包含如下内容:
<%class>
has 'success';
has 'errorType';
</%class>
<%init>
if ($.success eq "0") {
print $.errorType;
}
</%init>在$m->重定向()上使用JSON
看起来梅森不支持像success=0&error[errorType]=...这样的查询字符串
我唯一能想到的选择是用JSON序列化请求,如下所示:
component.mc
<%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
<%class>
has 'result';
</%class>
<%init>
use JSON;
my $result = decode_json $.result;
print dh $result;
</%init>第一个组件将重定向到这样的url:
http://localhost:5000/error_handler?result=%7B%22success%22%3A0%2C%22error%22%3A%7B%22errorType%22%3A%22SHIRT_ERROR%22%7D%7D我觉得它不太优雅,但很管用。
发布于 2015-11-23 16:39:10
use Data::Dump;
dd( $result );或
use Data::Dumper;
print Dumper( $result );或者简单的
while ( my ( $k, $v ) = each %{ $result } ) {
print "$k => $v\n";
}发布于 2015-11-23 17:39:48
如果要将散列序列化为JSON对象,则可以:
#!/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"}}https://stackoverflow.com/questions/33875982
复制相似问题