나는 몇 가지 코드를 찾고 있어요,하지만 난 다음 줄이 무엇을하고 있는지/체크 이해가 안 :이 줄은 perl에서 무엇을 의미합니까?
return if !%Foo::Details:: ;
이 일을 정확히 무엇을? Foo :: Details 모듈의 존재 여부를 확인하고 있습니까?
나는 몇 가지 코드를 찾고 있어요,하지만 난 다음 줄이 무엇을하고 있는지/체크 이해가 안 :이 줄은 perl에서 무엇을 의미합니까?
return if !%Foo::Details:: ;
이 일을 정확히 무엇을? Foo :: Details 모듈의 존재 여부를 확인하고 있습니까?
스칼라 컨텍스트의 해시가 비어 있으면 false를 반환하므로 해시가 %Foo::Details::
이 비어 있으면 코드에서 빈 목록을 반환합니다.
해시는 Foo::Details
네임 스페이스의 기호 표입니다. 패키지 변수 또는 하위가 Foo::Details
네임 스페이스에 만들어지면 변수 또는 하위 이름에 해당하는 glob가 %Foo::Details::
에 만들어집니다. 따라서 Foo :: Details 네임 스페이스가 비어 있으면 빈 목록을 반환합니다.
$ cat >Foo/Details.pm
package Foo::Details;
sub boo { }
1;
$ perl -E'say %Foo::Details:: ?1:0;'
0
$ perl -E'use Foo::Details; say %Foo::Details:: ?1:0;'
1
Foo :: Details 모듈이로드 되었는지를 확인하려고 할 수도 있지만 완벽하지는 않습니다. 예를 들어, Foo :: Details :: Bar가로드 된 경우에도 Foo :: Details가로드되었다고 생각합니다. Foo :: Details가로드되었는지 확인하려면 $INC{"Foo/Details.pm"}
이 true인지 확인하는 것이 좋습니다. 이 접근 방식의 문제점은 "인라인 된 모듈"을 찾지 못한다는 것입니다.
이 코드는 모듈이로드되었는지 여부를 테스트합니다. %Foo::Details::
은 모듈 Foo::Details
의 기호 표입니다.
하면 Foo::Details
는 !
으로 부정하는 경우 true를 반환하고에 어떤 함수에서 반환합니다 (이 요소가 없기 때문에) %Foo::Details::
는 false를 돌려줍니다로드되지 않았다.
당신의 심볼 테이블에 대한 자세한 내용을보실 수 있습니다 perlmod#Symbol Tables
here is another SO post
또한 모듈로드 여부를 결정하는 방법에 대해 설명합니다.
모듈이 심볼 테이블에로드되었는지 여부를 테스트하는 정말 좋지 않은 방법입니다. '% Foo :: Details'는'Foo :: Details' 패키지의 심볼 테이블 엔트리입니다. 만약로드되지 않았다면 false를 리턴 할 것입니다. ['perlmod'의 심볼 테이블 섹션을보십시오.] (http://perldoc.perl.org/perlmod.html#Symbol-Tables) –
@HunterMcMillen 나는 그것의 compactness에 유일하게 기초를 둔 우아하다고 생각합니다. 정확히 그게 가난한가? – Jarmund
이 코드 조각이 무엇을하고 있는지 명확하게 밝히지는 않았으므로 이것이 내가 * 가난하다고 생각하는 이유입니다. 더 나은, 더 읽기 쉬운 솔루션이 있습니다. –