[첫화면으로]Perl/Scalar-Util

마지막으로 [b]

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

1.1. 이름

Scalar::Util - 스칼라를 다루는 일반적인 유틸리티들의 모음

1.2. 개괄

    use Scalar::Util qw(blessed dualvar isweak readonly refaddr reftype tainted
                        weaken isvstring looks_like_number set_prototype);
                        # and other useful utils appearing below

1.3. 설명

Scalar::Util 모듈은 디폴트로는 어느 서브루틴도 익스포트하지 않음.

 blesses EXPR

EXPR이 bless된 레퍼런스이면 bless된 패키지의 이름을 반환. 그 외에는 undef 반환
   $scalar = "foo";
   $class  = blessed $scalar;           # undef

   $ref    = [];
   $class  = blessed $ref;              # undef

   $obj    = bless [], "Foo";
   $class  = blessed $obj;              # "Foo"

 dualvar NUM, STRING

수 컨택스트에서는 NUM값을, 스트링 컨택스트에서는 STRING을 갖는 스칼라를 반환

    $foo = dualvar 10, "Hello";
    $num = $foo + 2;                    # 12
    $str = $foo . " world";             # Hello world

 isvstring EXPR

EXPR이 vstring1이면 참을 반환

    $vs   = v49.46.48;
    $fmt  = isvstring($vs) ? "%vd" : "%s"; #true
    printf($fmt,$vs);

 isweak EXPR

EXPR이 weak reference2이면 참을 반환
    $ref  = \$foo;
    $weak = isweak($ref);               # false
    weaken($ref);
    $weak = isweak($ref);               # true
주의: 약한 레퍼런스를 복사하면 일반적인 강한 레퍼런스가 생성된다:
    $copy = $ref;
    $weak = isweak($copy);              # false

 look_like_number EXPR

EXPR이 수로 판단되면 참을 반환. Perldoc:perlapi문서의 "looks_like_number" 참고

 openhandle FH

FH가 파일핸들이고 열려 있거나, FH가 tie된 핸들이면 참을 반환. 그 외에는 undef 반환

    $fh = openhandle(*STDIN);           # \*STDIN
    $fh = openhandle(\*STDIN);          # \*STDIN
    $fh = openhandle(*NOTOPEN);         # undef
    $fh = openhandle("scalar");         # unde

 readonly SCALAR

SCALAR가 읽기 전용이면 참을 반환

    sub foo { readonly($_[0]) }

    $readonly = foo($bar);              # false
    $readonly = foo(0);                 # true

 refaddr EXPR

EXPR이 레퍼런스라면, 참조되는 값의 내부 메모리 주소 반환. 그 외에는 undef 반환

    $addr = refaddr "string";           # undef
    $addr = refaddr \$var;              # eg 12345678
    $addr = refaddr [];                 # eg 23456784

    $obj  = bless {}, "Foo";
    $addr = refaddr $obj;               # eg 88123488

 reftype EXPR

EXPR이 레퍼런스라면, 참조되는 변수의 타입을 반환. 그 외에는 undef 반환

    $type = reftype "string";           # undef
    $type = reftype \$var;              # SCALAR
    $type = reftype [];                 # ARRAY

    $obj  = bless {}, "Foo";
    $type = reftype $obj;               # HASH

 set_prototype CODEREF, PROTOTYPE

인자로 주어진 함수의 프로토타입을 지정. PROTOTYPE이 undef인 경우는 프로토타입을 삭제. CODEREF 반환

    set_prototype \&foo, '$$';

 tainted EXPR

EXPR의 결과가 오염된 것이면 참을 반환

    $taint = tainted("constant");       # false
    $taint = tainted($ENV{PWD});        # true if running under -T

 weaken REF

REF를 weak reference로 변환. 약한 레퍼런스는 자신이 참조하는 오브젝트에 대해 레퍼런스 카운트를 유지하지 않는다. 오브젝트의 레퍼런스 카운트가 0이 되면 REF는 undef으로 설정된다.
레퍼런스의 사본을 유지하되 오브젝트가 원래 DESTROY되어야 했을 시점에 안 되는 것을 방지하는 데 유용하다.
    {
      my $var;
      $ref = \$var;
      weaken($ref);                     # $ref 를 약한 레퍼런스로 변환
    }
    # $ref 는 여기서 undef이 된다.

약한 레퍼런스를 복사할 경우 복사본은 강한 레퍼런스가 되는 것에 유의하라.
    my $var;
    my $foo = \$var;
    weaken($foo);                       # $foo 는 약한 레퍼런스
    my $bar = $foo;                     # $bar 는 강한 레퍼런스
이 문제는 어떤 상황에서는 눈에 잘 들어오지 않는다. 예를 들어, 이미 제거되었을 수도 있는 오브젝트들을 참조하는 약한 레퍼런스의 리스트를 대상으로 grep()을 쓰는 경우가 있다.
    @object = grep { defined } @object;
위 코드는 이미 제거된 오브젝트에 대한 레퍼런스들을 삭제한다. 그러나 남아 있는 레퍼런스는 강한 레퍼런스가 되어 버리고, @object 배열 내에 강한 레퍼런스가 들어 있기 때문에 남은 오브젝트들은 결코 제거되지 않을 것이다.

1.4. 진단

이 모듈을 사용할 때 임포트 과정에서 다음 에러가 발생할 수 있다.

1.5. 알려진 버그

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

1.6. 참고

Perldoc:List::Util3

1.7. COPYRIGHT

(생략)

2. 기타 & Comments

이름:  
Homepage:
내용:
 


컴퓨터분류 Perl
각주:
1. 주인장도 정확히는 모르겠으나 예문을 보아하니 소프트웨어의 버전을 나타내는 형식을 의미하는 듯
2. Perl/OOP 참고
3. /List-Util

마지막 편집일: 2012-2-11 12:25 am (변경사항 [d])
1368 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기