난 당신이 여기에 잘못된 일에 국한 있다고 생각 아래 있듯이
sub well_defined {
my $arg = shift;
$arg or warn "arg required" and return 0;
exists $lang{$arg} or warn "no such language: $arg" and return 0;
return 1;
}
이
는 부울 - 억양 동작을 할 수 있습니다. 나는 Data :: Constraint,
Brick, 등등을 가지고 이런 종류의 일을하고 이것에 대해
Mastering Perl에서 이야기한다. Perl이 가지고있는 프로그램의 구조와 동적 인 기능에 대해 약간의 영리함과 생각으로, 당신은 그러한 연대적이고 절차적인 접근이 필요하지 않습니다.
그러나 먼저 알아야 할 사항은 해당 호출 서브 루틴에서 실제로 알고 자하는 것입니다. 예 또는 아니오를 알고 싶다면 꽤 쉽습니다.
needs
의 문제점은 모든 조건에 대해 한 번 호출하면 프로그램 흐름을 제어하기 위해 needs
을 사용해야한다는 것입니다. 그것이 잘못된 길입니다. needs
은 답변을 드릴 수있는 곳입니다. 프로그램 상태를 변경하지 않는 것이 임무입니다. needs
이 false를 반환하더라도 다른 호출 서브 루틴이 계속되기를 원하기 때문에 잘못 사용할 경우 유용하지 않게됩니다. 한 번만 부르면 한 번 되돌려 야합니다. 호출 서브 루틴은 반환 값을 사용하여 수행 할 작업을 결정합니다.
기본 구조에는 needs
에 전달하는 테이블이 포함됩니다. 이것은 귀하의 유효성 확인 프로파일입니다.
요구 사항이 무엇이든간에 테이블을 구성하십시오.
sub needs($$) {
my ($table) = @_;
foreach $test (@$table) {
my($sub, $message) = @$test;
unless($sub->(...)) {
print $message;
return
}
}
return 1;
}
자,이 방법과 함께 정말 멋진 일이 당신이 미리 표를 알 필요가 없다는 것입니다 :
needs
에서 당신은 단지 테이블을 처리합니다. 당신은 설정이나 다른 방법으로부터 그것을 끌어낼 수 있습니다. 이는 테이블을 동적으로 변경할 수 있음을 의미합니다. 이제 코드가 상당히 축소됩니다.
sub run_find {
my $arg = shift @_;
return unless needs($validators{run_find});
...
}
이 작업을 계속 진행하십시오. In Perl 마스터하기 코드에서 코드를 완전히 제거하고 구성 파일로 옮기는 몇 가지 솔루션을 보여줍니다. 즉, 코드를 변경하지 않고 비즈니스 규칙을 변경할 수 있습니다.
동일한 문자 시퀀스를 입력 할 때 거의 언제든지 잘못 생각한 것입니다.:)
당신이 그것을 썼을 때'need'는 항상'$ condition'을 반환 할 것입니다. 그렇지 않습니까? – Zaid