1

在我的 Perl Catalyst 应用程序中,我得到这样的 URL 参数的值,通常是:

my $val = $c->request->params->{arg} || '';

但 URL 可能包含多个arg=$Val. 我只想保留 的第一个值arg=。我可以在我的代码中添加这个:

my $val = $c->request->params->{arg} || '';
$val = $val->[0] if (ref($val) eq 'ARRAY');

那是相当丑陋的。有没有办法以更好的方式获取第一个值或 url 参数?

4

2 回答 2

1

您的应用程序实际上是否期望参数有多个值arg?如果没有,你只需要

my $val = $c->request->params->{arg} || '';

当然,如果用户向您提供垃圾 url,那将是垃圾,但是您无法阻止用户向您提供垃圾。

如果 parameter 有多个值实际上是有效的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');
于 2013-03-30T04:22:40.460 回答
0

我刚刚阅读了代码,Catalyst::Request但我没有看到任何东西总是可以提取单个值。太糟糕了,猫不使用类似的东西Hash::MultiValue

于 2013-03-30T03:54:34.923 回答