如何仅保留第一个参数值?

时间:2013-03-30 03:50:27

标签: perl catalyst

在我的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参数?

2 个答案:

答案 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这样的东西!