2014-09-24 14 views
8

To zachowanie nie jest specyficzne dla Math :: BigInt, ale następujący kod jest przerwany w ostatniej linii.Wywołanie metody nie dostarcza kontekstu skalarnego ... wydaje się dziwne

use strict; 
use warnings; 
use Math::BigInt; 

my $a = Math::BigInt->bone; 
my $b = Math::BigInt->bone; 

print ($a+$b)->bfac; 

Kod ten jednak działa dobrze:

use strict; 
use warnings; 
use Math::BigInt; 

my $a = Math::BigInt->bone; 
my $b = Math::BigInt->bone; 

print scalar($a+$b)->bfac; 

Moje pytanie brzmi ... dlaczego nie skalarne kontekst narzuca się automatycznie na lewym argumentem „->”? AFAIK, "->" działa tylko na skalarach i (wyjątkowo) na typeglobach.

+0

To ma sens. Powinienem uważniej przeczytać ostrzeżenie ... Dzięki. –

Odpowiedz

10

Trzeba jeszcze jeden zestaw parens,

print (($a+$b)->bfac); 

jako kod jest interpretowany jako,

(print ($a+$b))->bfac; 

i ostrzeżenia również dał ci print (...) interpreted as function ..

7

Need + więc to nie jest interpretowany jako argumenty do print.

print +($a+$b)->bfac; 
Powiązane problemy