在我的Perl Catalyst应用程序中,我得到了像这样的URL参数的值,通常是:
my $val = $c->request->params->{arg} || '';
但该网址可能包含多个arg=$Val
。我只想保留arg=
的第一个值。我可以在我的代码中添加这个:
my $val = $c->request->params->{arg} || '';
$val = $val->[0] if (ref($val) eq 'ARRAY');
这很难看。有没有办法以更好的方式获取第一个值或url参数?
答案 0 :(得分:1)
您的应用实际上是否期望参数arg
有多个值?如果没有,您只需要
my $val = $c->request->params->{arg} || '';
当然,如果用户为您提供垃圾网址,它将是垃圾,但是您无法阻止用户为您提供垃圾。
如果参数arg
有多个值实际有效,为什么只需要第一个值?你真的想要所有的价值。
sub param_vals {
my ($params, $name) = @_;
return () if !exists($params->{name});
return $params->{$name} if !ref($params->{name});
return @{ $params->{$name} };
}
my @args = param_vals($c->request->{params}, 'arg');
答案 1 :(得分:0)
我刚刚将代码读到了Catalyst::Request
,但我没有看到总是提取单个值的任何内容。太糟糕Cat不使用像Hash::MultiValue
这样的东西!