나는 여전히 디버깅을 시도하고있는 펄 스크립트를 가지고 있는데, 나는 그것이 ActivePerl과 Strawberry Perl에서 다르게 동작하는 것을 발견했다.Perl 스크립트가 Activestate vs Strawberry Perl에서 실행 중인지 여부를 감지 할 수 있습니까?
이렇게하면 Perl 스크립트가 실행중인 이러한 맛을 어떻게 감지하는지 궁금합니다.
나는 여전히 디버깅을 시도하고있는 펄 스크립트를 가지고 있는데, 나는 그것이 ActivePerl과 Strawberry Perl에서 다르게 동작하는 것을 발견했다.Perl 스크립트가 Activestate vs Strawberry Perl에서 실행 중인지 여부를 감지 할 수 있습니까?
이렇게하면 Perl 스크립트가 실행중인 이러한 맛을 어떻게 감지하는지 궁금합니다.
Windows에서 ActivePerl의 항상 (또는 적어도 펄 5.005 이후)에 Win32::BuildNumber()
함수를 정의합니다 : 모든 설정을 나열하려면 검사 할 경우
if (defined &Win32::BuildNumber) {
say "This is ActivePerl";
}
else {
say "This is NOT ActivePerl";
}
다른 플랫폼에서도 ActivePerl을 사용하려면 ActivePerl::BUILD()
함수를 사용해야합니다. ActivePerl 5.8.7 빌드 814에서만 소개되었으므로 이전의 실제 릴리스에서는 작동하지 않습니다.
당신은 당신이 당신의 문제를 일으키는 어떤 차이가 발견되면 모두 perls이
perl -V
컴파일 된 방법을 검사 할 수 있습니다, 당신은 Config 패키지를 사용하여 특정 기능을 감지 할 수 있습니다. 당신이 런타임에 확인할 수 있도록
이perl -MConfig -MData::Dump -e "dd \%Config"
유일하게 유용한 차이점은 Strawberry Perl이 'uname'에 자체 이름을 넣었지만 ActivePerl에는 빈 'uname'이 있다는 것입니다. 이로 인해 다른 Windows Perl이 ActivePerl과 혼동 될 가능성이 있습니다. 완벽한 상황은 아니지만 아마도 우리 모두가 ... – hippietrail
또한'Data :: Dump'는 Strawberry Perl에서 기본적으로 사용할 수있는 것 같지 않습니다. – hippietrail
ActiveState 버전 813.1은 기본적으로 ActivePerl 패키지를 제공하고 (모듈을로드 할 필요없이) Perl의 다른 버전은 그렇지 않습니다. 적어도 Strawberry Perl 5.20.1은 그렇지 않습니다. 당신은 당신의 스크립트의 ActiveState Perl을 통해 실행되고 있는지 여부를 알아낼 다음과 같은 코드를 사용할 수 있습니다
if (exists $::{'ActivePerl::'}) {
# getting called through ActiveState Perl
} else {
# not getting called through ActiveState Perl
}
은 ActivePerl의 모듈에 대한 자세한 내용은 http://docs.activestate.com/activeperl/5.8/lib/ActivePerl.html를 참조하십시오.
해키하지만 작동하고 비 해킹 솔루션이 아닌 것 같습니다 (- : – hippietrail