Perl/Scalar-Util 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/Scalar-Util 는 읽기 전용 페이지입니다.
== # perldoc Scalar::Util 정리 == 원문: http://search.cpan.org/~gbarr/Scalar-List-Utils-1.23/lib/Scalar/Util.pm === # 이름 ==== Scalar::Util - 스칼라를 다루는 일반적인 유틸리티들의 모음 === # 개괄 ==== {{{#!vim perl use Scalar::Util qw(blessed dualvar isweak readonly refaddr reftype tainted weaken isvstring looks_like_number set_prototype); # and other useful utils appearing below }}} === # 설명 ===
Scalar::Util
모듈은 디폴트로는 어느 서브루틴도 익스포트하지 않음. blesses EXPR : EXPR이 bless된 레퍼런스이면 bless된 패키지의 이름을 반환. 그 외에는 undef 반환 {{{#!vim perl $scalar = "foo"; $class = blessed $scalar; # undef $ref = []; $class = blessed $ref; # undef $obj = bless [], "Foo"; $class = blessed $obj; # "Foo" }}} dualvar NUM, STRING : 수 컨택스트에서는 NUM값을, 스트링 컨택스트에서는 STRING을 갖는 스칼라를 반환 {{{#!vim perl $foo = dualvar 10, "Hello"; $num = $foo + 2; # 12 $str = $foo . " world"; # Hello world }}} isvstring EXPR : EXPR이 vstring
이면 참을 반환 {{{#!vim perl $vs = v49.46.48; $fmt = isvstring($vs) ? "%vd" : "%s"; #true printf($fmt,$vs); }}} isweak EXPR : EXPR이 weak reference
이면 참을 반환 {{{#!vim perl $ref = \$foo; $weak = isweak($ref); # false weaken($ref); $weak = isweak($ref); # true }}} : 주의: 약한 레퍼런스를 복사하면 일반적인 강한 레퍼런스가 생성된다: {{{#!vim perl $copy = $ref; $weak = isweak($copy); # false }}} look_like_number EXPR : EXPR이 수로 판단되면 참을 반환. Perldoc:perlapi""문서의 "looks_like_number" 참고 openhandle FH : FH가 파일핸들이고 열려 있거나, FH가 tie된 핸들이면 참을 반환. 그 외에는 undef 반환 {{{#!vim perl $fh = openhandle(*STDIN); # \*STDIN $fh = openhandle(\*STDIN); # \*STDIN $fh = openhandle(*NOTOPEN); # undef $fh = openhandle("scalar"); # unde }}} readonly SCALAR : SCALAR가 읽기 전용이면 참을 반환 {{{#!vim perl sub foo { readonly($_[0]) } $readonly = foo($bar); # false $readonly = foo(0); # true }}} refaddr EXPR : EXPR이 레퍼런스라면, 참조되는 값의 내부 메모리 주소 반환. 그 외에는 undef 반환 {{{#!vim perl $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 반환 {{{#!vim perl $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 반환 {{{#!vim perl set_prototype \&foo, '$$'; }}} tainted EXPR : EXPR의 결과가 오염된 것이면 참을 반환 {{{#!vim perl $taint = tainted("constant"); # false $taint = tainted($ENV{PWD}); # true if running under -T }}} weaken REF : REF를 weak reference로 변환. 약한 레퍼런스는 자신이 참조하는 오브젝트에 대해 레퍼런스 카운트를 유지하지 않는다. 오브젝트의 레퍼런스 카운트가 0이 되면 REF는 undef으로 설정된다. : 레퍼런스의 사본을 유지하되 오브젝트가 원래 DESTROY되어야 했을 시점에 안 되는 것을 방지하는 데 유용하다. {{{#!vim perl { my $var; $ref = \$var; weaken($ref); # $ref 를 약한 레퍼런스로 변환 } # $ref 는 여기서 undef이 된다. }}} : 약한 레퍼런스를 복사할 경우 복사본은 강한 레퍼런스가 되는 것에 유의하라. {{{#!vim perl my $var; my $foo = \$var; weaken($foo); # $foo 는 약한 레퍼런스 my $bar = $foo; # $bar 는 강한 레퍼런스 }}} : 이 문제는 어떤 상황에서는 눈에 잘 들어오지 않는다. 예를 들어, 이미 제거되었을 수도 있는 오브젝트들을 참조하는 약한 레퍼런스의 리스트를 대상으로
grep()
을 쓰는 경우가 있다. {{{#!vim perl @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 === # 참고 === Perldoc:List::Util""
=== # COPYRIGHT === (생략) == # 기타 & Comments ==
----
---- [[컴퓨터분류]] [[Perl]]
Perl/Scalar-Util
페이지로 돌아가기 |
다른 수정본 보기