2009-04-29 3 views
4

$!과 같이 문자열 컨텍스트와 숫자 컨텍스트에서 다른 값을 반환하고 싶습니다. wantarray를 사용하여리스트 또는 스칼라 컨텍스트에 있는지를 확인할 수 있지만 순수한 Perl에서는 어떤 스칼라 컨텍스트를 결정할 수 있습니까? 나는 XS에도 답이 있다고 가정하고, 순수한 Perl에서는 그것을 할 수 없다면 그 답을 기꺼이 받아 들일 것이다. Scalar::Util 모듈다른 스칼라 컨텍스트에서 다른 값을 반환하는 개체는 어떻게 만듭니 까?

답변

13

체크 아웃, 특히 dualvar() 기능 :

use Scalar::Util qw(dualvar); 

my $scalar = dualvar 10, "Hello"; 
my $twelve = $scalar + 2;   # $twelve = 12 
my $greeting = $scalar . " world"; # $greeting = "Hello world" 

Scalar::Util 코어 배포판의 일부이며, 어디서나 펄이 사용 가능한해야합니다.

+0

감사합니다. 나는 정말로 다시 코어를 통과해야합니다. 잊었거나 결코 알지 못했던 좋은 것들이 너무 많습니다. –

2

유용 할 수있는 경우 (로마 숫자 일 수도 있음) 제안 할 수 있지만 정수와 문자열 속성이있는 개체를 만드는 것이 좋습니다. 적절한 컨텍스트에서 적절한 속성을 사용하십시오.

이렇게하면 '과부하 사용'으로 작업을 오버로드 할 수있는 유연성이 향상됩니다. Roman Numerals 예제에서 dualvar는 2 개의 로마 숫자를 함께 추가 할 때까지 작동합니다.

관련 문제