-
- 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