2013-03-30 2 views
1

, 나는 일반적으로,이 같은 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 매개 변수를 선택하는 방법이 있습니까?

답변

0

코드를 읽은 후 Catalyst::Request 코드를 읽었지만 항상 단일 값을 찾아 낼 수있는 것은 없습니다. 너무 나쁜 고양이는 Hash::MultiValue과 같은 것을 사용하지 않습니다!

1

앱이 실제로 매개 변수 arg에 대해 여러 값을 기대합니까? 그렇지 않으면, 당신이 필요로하는 모든 사용자가 쓰레기 URL을 제공하는 경우가 쓰레기 것,

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'); 
+0

하나의 arg = $ val이 예상됩니다. 둘 이상이 클라이언트의 실수입니다. – Julien

+0

나는 클라이언트가 아니라 서버를 제어한다! – Julien

+0

알아. 내가 말한 것은 달리 이해가되지 않을 것이다. (나의 마지막 코멘트에서 "당신"은 "사용자"를 의미했습니다.) – ikegami