9 번째 수정본
(9 번째 수정본부터 9 번째 수정본까지의 변경사항)
(소소한 수정)
(두 수정본의 내용이 동일하거나, 수정본을 비교할 수 없음.)
-  
 - 1. perldoc Scalar::Util 정리
 
-  
 -  
 - 1.1. 이름
 
-  
 - 1.2. 개괄
 
-  
 - 1.3. 설명
 
-  
 - 1.4. 진단
 
-  
 - 1.5. 알려진 버그
 
-  
 - 1.6. 참고
 
-  
 - 1.7. COPYRIGHT
 
-  
 
2. 기타 & Comments 
-  
 
1. perldoc Scalar::Util 정리
원문: http://search.cpan.org/~gbarr/Scalar-List-Utils-1.23/lib/Scalar/Util.pm
Scalar::Util - 스칼라를 다루는 일반적인 유틸리티들의 모음
    use Scalar::Util qw(blessed dualvar isweak readonly refaddr reftype tainted
                        weaken isvstring looks_like_number set_prototype);
                        
Scalar::Util 모듈은 디폴트로는 어느 서브루틴도 익스포트하지 않음.
 blesses EXPR
-  EXPR이 bless된 레퍼런스이면 bless된 패키지의 이름을 반환. 그 외에는 undef 반환
 
   $scalar = "foo";
   $class  = blessed $scalar;           
   $ref    = [];
   $class  = blessed $ref;              
   $obj    = bless [], "Foo";
   $class  = blessed $obj;              
 dualvar NUM, STRING
-  수 컨택스트에서는 NUM값을, 스트링 컨택스트에서는 STRING을 갖는 스칼라를 반환
 
    $foo = dualvar 10, "Hello";
    $num = $foo + 2;                    
    $str = $foo . " world";             
 isvstring EXPR
-  EXPR이 vstring이면 참을 반환
 
    $vs   = v49.46.48;
    $fmt  = isvstring($vs) ? "%vd" : "%s"; 
    printf($fmt,$vs);
 isweak EXPR
-  EXPR이 weak reference이면 참을 반환
 
    $ref  = \$foo;
    $weak = isweak($ref);               
    weaken($ref);
    $weak = isweak($ref);               
-  주의: 약한 레퍼런스를 복사하면 일반적인 강한 레퍼런스가 생성된다:
 
    $copy = $ref;
    $weak = isweak($copy);              
 look_like_number EXPR
-  EXPR이 수로 판단되면 참을 반환. 
perlapi문서의 "looks_like_number" 참고
 
 openhandle FH
-  FH가 파일핸들이고 열려 있거나, FH가 tie된 핸들이면 참을 반환. 그 외에는 undef 반환
 
    $fh = openhandle(*STDIN);           
    $fh = openhandle(\*STDIN);          
    $fh = openhandle(*NOTOPEN);         
    $fh = openhandle("scalar");         
 readonly SCALAR
-  SCALAR가 읽기 전용이면 참을 반환
 
    sub foo { readonly($_[0]) }
    $readonly = foo($bar);              
    $readonly = foo(0);                 
 refaddr EXPR
-  EXPR이 레퍼런스라면, 참조되는 값의 내부 메모리 주소 반환. 그 외에는 undef 반환
 
    $addr = refaddr "string";           
    $addr = refaddr \$var;              
    $addr = refaddr [];                 
    $obj  = bless {}, "Foo";
    $addr = refaddr $obj;               
 reftype EXPR
-  EXPR이 레퍼런스라면, 참조되는 변수의 타입을 반환. 그 외에는 undef 반환
 
    $type = reftype "string";           
    $type = reftype \$var;              
    $type = reftype [];                 
    $obj  = bless {}, "Foo";
    $type = reftype $obj;               
 set_prototype CODEREF, PROTOTYPE
-  인자로 주어진 함수의 프로토타입을 지정. PROTOTYPE이 undef인 경우는 프로토타입을 삭제. CODEREF 반환
 
    set_prototype \&foo, '$$';
 tainted EXPR
-  EXPR의 결과가 오염된 것이면 참을 반환
 
    $taint = tainted("constant");       
    $taint = tainted($ENV{PWD});        
 weaken REF
-  REF를 weak reference로 변환. 약한 레퍼런스는 자신이 참조하는 오브젝트에 대해 레퍼런스 카운트를 유지하지 않는다. 오브젝트의 레퍼런스 카운트가 0이 되면 REF는 undef으로 설정된다.
 -  레퍼런스의 사본을 유지하되 오브젝트가 원래 DESTROY되어야 했을 시점에 안 되는 것을 방지하는 데 유용하다.
 
    {
      my $var;
      $ref = \$var;
      weaken($ref);                     
    }
    
-  약한 레퍼런스를 복사할 경우 복사본은 강한 레퍼런스가 되는 것에 유의하라.
 
    my $var;
    my $foo = \$var;
    weaken($foo);                       
    my $bar = $foo;                     
-  이 문제는 어떤 상황에서는 눈에 잘 들어오지 않는다. 예를 들어, 이미 제거되었을 수도 있는 오브젝트들을 참조하는 약한 레퍼런스의 리스트를 대상으로 
grep()을 쓰는 경우가 있다.
 
    @object = grep { defined } @object;
-  위 코드는 이미 제거된 오브젝트에 대한 레퍼런스들을 삭제한다. 그러나 남아 있는 레퍼런스는 강한 레퍼런스가 되어 버리고, @object 배열 내에 강한 레퍼런스가 들어 있기 때문에 남은 오브젝트들은 결코 제거되지 않을 것이다.
 
이 모듈을 사용할 때 임포트 과정에서 다음 에러가 발생할 수 있다.
-  Weak references are not implemented in the version of perl - 약한 레퍼런스가 그 버전의 perl에 구현되어 있지 않음
-  
isweak나 weaken을 사용하려면 이후 버전의 perl을 사용해야 함
 
 
-  Vstrings are not implemented in the version of perl - vstring이 그 버전의 perl에 구현되어 있지 않음
-  
isvstring을 사용하려면 이후 버전의 perl을 사용해야 함
 
 
-  NAME is only available with the XS version of Scalar::Util - NAME은 XS버전의 Scalar::Util에서만 사용 가능
-  Scalar::Util 모듈은 제공 함수 대부분을 perl 구현과 C 구현 양쪽으로 제공하여 C 컴파일러에 접근할 수 없는 곳에서도 사용할 수 있도록 하고 있다. 그러나 일부 함수는 C 컴파일러를 사용하여 XS 버전을 컴파일할 수 있을 때만 제공된다.
 -  현재 해당되는 목록은 weaken, isweak, dualvar, isvstring, set_prototype
 
 
There is a bug in perl5.6.0 with UV's that are >= 1<<31. This will show up as tests 8 and 9 of dualvar.t failing
List::Util
1.7. COPYRIGHT
(생략)
2. 기타 & Comments
컴퓨터분류 Perl
 
<trackbackreceived>