서브 루틴과 메소드 인수의 검증에서 벗어나기 위해 범용 모듈을 찾고 있습니다. CPAN에 대한 다양한 가능성을 조사했습니다 : Params::Validate
, Params::Smart
, Getargs::Mixed
, Getargs::Long
및 그 외 몇 가지를 조사했습니다.서브 루틴 인수를 검증하는 데 유용한 펄 모듈은 무엇입니까?
이러한 모듈 또는 다른 모듈의 장단점에 대한 정보는 높이 평가할 수 있습니다. 감사.
서브 루틴과 메소드 인수의 검증에서 벗어나기 위해 범용 모듈을 찾고 있습니다. CPAN에 대한 다양한 가능성을 조사했습니다 : Params::Validate
, Params::Smart
, Getargs::Mixed
, Getargs::Long
및 그 외 몇 가지를 조사했습니다.서브 루틴 인수를 검증하는 데 유용한 펄 모듈은 무엇입니까?
이러한 모듈 또는 다른 모듈의 장단점에 대한 정보는 높이 평가할 수 있습니다. 감사.
을 사용하기 시작하면 MooseX::Types
을 원하는대로 찾을 수 있습니다. 유형에는 자동으로 is_ $ type() 및 to_ $ type()이 있습니다. 이것들은 타입 제약 조건을 입력하는지 확인하거나 타입에 대한 유효한 강제 변환을하기위한 것입니다. 나는 당신이 당신의 물체의 상태가 추가 비용없이 상기 유형을 갖출 수 있기 때문에 이러한 유형의 것들조차 더 잘 좋아합니다.
use Moose;
has 'foo' => (isa => MyType, is => ro);
sub _check_my_type {
my ($self, $type) = @_;
is_MyType($type);
};
그것은 당신의 현대 펄이 물건을 사용하는 경우 당신은 아마 "잘못하고 있어요."하고 깊이/재귀 유형에 대한 약간의 지원이 부족 될 수 있지만 대신 자신 만의 일관성 검사 (MyType과 동일)를 가진 객체를 사용하고 객체를 전달하십시오.
MooseX::Method::Signatures에서 인수를 검증하는 것 이상의 것을 제공합니다. POD에서
예 :
package Foo;
use Moose;
use MooseX::Method::Signatures;
method morning (Str $name) {
$self->say("Good morning ${name}!");
}
method hello (Str :$who, Int :$age where { $_ > 0 }) {
$self->say("Hello ${who}, I am ${age} years old!");
}
method greet (Str $name, Bool :$excited = 0) {
if ($excited) {
$self->say("GREETINGS ${name}!");
}
else {
$self->say("Hi ${name}!");
}
}
MooseX::Method::Signatures 또한 펄 판에 더 섹시한 구문을 제공하는 MooseX::Declare와 같은 표준으로 제공됩니다. 위 그래서 (단지 간결 첫 번째 방법을 보여주는)와 같이 쓸 수있다 :
use MooseX::Declare;
class Foo {
method morning (Str $name) {
$self->say("Good morning ${name}!");
}
}
일반 서브 루틴에 대한 추론 signatures CPAN 모듈도 있습니다하지만 불행히도 그것은 위와 같은 기능으로 풍부하지 않다. 무스 명성의 하이퍼 생산 프로그래머 - -
나는 현재 내가 데이브 Rolsky는 것으로 나타났습니다
영업과 같은 질문을 연구하고 최근에 Params : 검증의 유지 보수를 인수 (2009 년)이있다, 그래서 나는이 생각 좋은 징조. 모듈은 2003 년 이후로 업그레이드되지 않았습니다. 따라서 서브 루틴 매개 변수를 검사 할 때 다시 사용할 수 있습니다.
나는 Params :: Validate를 좋아하지만 잘못된 매개 변수를 어떻게 든보고하고 스크립트가 계속 실행되도록하려면 죽는 것을 선호하는 것 같다. ... – Marcus
당신이 그것을 사용할 수 있다면 무스는 나쁜 제안이 아닙니다. 할 수 없다면 마우스가 무른 빛입니다. 이것은 여러분에게 타입 검사와 무언가의 의존성이없는 몇 가지 다른 것들을 얻을 것이다. 명확히 말하면, 나는 <3 무스지만 CGI의 경우 항상 최선의 선택은 아니다. – mikegrb
마우스가 활발하게 개발되지 않았습니다. 그것은 죽은 프로젝트입니다 (Mouse.pm의 문서에 따라 마우스 대신 무스를 사용하십시오.). 불행히도 마우스 문서는 CGI 용으로 제안하지 않습니다. "몇 년 동안 상당한 발전이 있었지만, 컴파일 타임 페널티는 아주 특정한 애플리케이션에서 시작하지 못했습니다. 시작 시간이 필수적인 명령 행 애플리케이션이나 CGI 스크립트를 작성하는 경우 가능하다면 후자는 HTTP :: Engine과 FastCGI를 대신 사용하는 것이 좋습니다. " http://rt.cpan.org/Public/Bug/Display.html?id=42203 –