2010-05-04 5 views
4

나는 Data::Alias을 좋아한다. 그것은 5.12에서 깨진 것 같습니다. 그것을 고칠 수 있습니까? 곧 수정 될 예정입니까? 좋은 대안이 있습니까?Perl 5.12에서 작동하는 Data :: Alias를 얻으려면 어떻게해야합니까?

+0

이 문제는 XSub 모듈에서 자주 발생합니다. –

+0

이에 따르면 Perl 5.12에는 Data :: Alias가 없습니다. https://bugzilla.redhat.com/show_bug.cgi?id=611014 –

+1

예! 마지막으로 업데이트 : http://cpansearch.perl.org/src/ZEFRAM/Data-Alias-1.08/Changes –

답변

10

버전 1.08 (2010 년 10 월 22 일 BST로 출시) 이전에 빌드 된 모든 버전은 Perl 5.12에서 1.08이 깨기 전에 Data::Alias으로 Perl 5.12에서 작동하지 않습니다. 최신 버전 (1.08 이상)으로 업그레이드하면 제대로 작동합니다!

재미있는 부가 설명을 드리 자면, 별명이 :=no longer meaning an empty attribute list의 정리로 향후에 언어 기능으로 Perl에 제공 될 수있는 것처럼 보입니다. 그것을 기대하다! :)

+1

CPAN의 모든 내용이 5.12 릴리스 후보에 대해 자동으로 테스트되었다고 생각합니까? 아마도 배포판에이 사건을 다루는 단위 테스트가 없었을 것입니다.이 경우 버그를보고하면 결코 다시 깨지지 않을 것입니다. :) – Ether

+0

@Ether : rt의 스레드에 의한 판단은 버그가 아닙니다. 내부의 변경으로 인해 모듈의 XS 코드가 손상되었습니다. CPAN에 대한 릴리스 후보를 테스트 할 때 필자는 모르겠지만 동일한 플랫폼에서 이전 버전의 perl에 대한 결과와 행렬 비교를하지 않으면 유용하지 않은 것으로 보입니다. CPAN에있는 많은 모듈이 실패하여 5.12가 고장났다는 의미는 아닙니다. :) –

+2

rafl은 몇 주 전에 나에게 그것을 보았고 너무 어렵지 않을 것이라고 말했다. (그것은 rafl에게는 너무 힘들다). 그는 이렇게하기로되어 있습니다. Method :: Signature는 5.12에서 작동 할 수 있습니다. – Schwern

4

모듈은 2007 년부터 업데이트되지 않았지만 저자 (Matthijs van Duin : [email protected])에게 언제든지 메시지를 보내거나 Robert가 답변에서 언급 한 버그 보고서를 제출할 수 있습니다. 여기

몇 가지 대안 :

  • 5.12+에서 작동 앨리어싱

    지금까지와 같은 추가 CPAN 모듈 :

    그리고 CPAN에 '별칭'에 대한 검색은 몇 가지 더, 아무도하지만 데이터 :: 별칭의 기능 "이 문장의 별칭으로하는 모든 일의"를 제공하기 위해 보이지 않는다 변합니다 . 따라서 Data::Alias이 수정 될 때까지 위의 또는 다음과 같은 순수한 Perl 메소드 중 하나를 사용할 수 있습니다.

  • Perl은 심볼 테이블에있는 변수에 대한 변수의 별명 지정을 지원합니다. 이것은 다음과 같이 수행됩니다 :

    항상 그렇듯이 동적 스코프/로컬이 실제로 사용하기 전에 무엇을하는지 알고 있어야합니다.

  • 어휘 스칼라 for 루프의 범위 별칭으로 사용될 수있다

    필요 어휘 별명이 유형에도 클로저 루프 밖으로 전달 될 수
    my $x = 1; 
    for my $y ($x) { 
        $y++; 
    } 
    print $x; # prints 2 
    

  • my $x = 1; 
    my $alias = sub{\@_}->($x); # return a reference to its argument list, 
              # which maintains its aliases 
    $$alias[0]++; 
    print $x;  # prints 2 
    

    을하지만 그건 정말 당신에게 m를 제공하지 않습니다

  • 당신은 서브 루틴 인수 목록에 대한 펄의 앨리어싱 마법을 사용하여 배열을 별칭을 만들 수 있습니다 다른 구문을 사용하여 참조보다는 광석 기능을 사용할 수 있습니다.

  • 그리고 펄의 참조를 사용하는 예 :

    my $x = 1; 
    my $y = \$x; # take a reference to $x 
    $$y++;  # dereference $y 
    print $x;  # prints 2 
    
+0

참조가 별칭과 다른 것은 아닙니다. 표시하는 예제는 Data :: Alias의 제한된 하위 집합입니다. –

+0

@brian d foy => 참고 예제는 대안을 보여주기위한 것이며 다른 두 예제는 내가 아는 순수한 Perl 앨리어싱 기술의 나머지 부분입니다. 이들은 물론 제한된 하위 집합입니다. 그렇지 않으면 Data :: Alias가 작성되지 않았을 것입니다. OP는 대안을 요청했다 –

+0

, 참고 문헌은 별명과 정확히 똑같은 것으로, 다른 옷에있다. 별칭을 지정하려면 변수 유형 glob의 해당 슬롯에 참조를 지정합니다. typeglob 레이블에 사용하는 sigil이 무엇이든간에 Perl에 역 참조를 지시하므로 '$ y'는 "y라고 표시된 유형 글로브의 스칼라 역 참조"로 읽습니다. '$ {* y {SCALAR}} ++;' –

0

나는 또 다른 잠재적 인 옵션을 발견 Scalar::Alias를, 펄 5.12에서 작동하도록 보인다. 분명히 스칼라의 앨리어스 만 있지만 등호 대신 뚱뚱한 쉼표는 필요하지 않습니다.