Еще раз о скобках
В Perl 6 при вызове функции запрещено ставить пробел между ее именем и открывающей скобкой. В некоторых случаях такое требование может вызвать недоумение, однако существуют случаи, когда дополнительный пробел изменяет смысл написанного:
say 3.14.WHAT; say (3.14).WHAT;
Первые две строки печатают одно и то же — действительный тип числа 3,14: Rat.
Однако, если убрать пробел, то метод WHAT оказывается примененным к результату выполнения функции say().
say(3.14).WHAT; (say(3.14)).WHAT;
Оба примера напечатают 3.14, то есть будет выполнена функция say(), а результат работы метода WHAT останется неиспользованным. Во втором случае дополнительные скобки не меняют семантику, но делают код более прозрачным.
what, parentheses, function, invoke — 15 апреля 2007
WHAT
Метод WHAT возвращает название класса, к которому принадлежит объект.
Метод применим как к переменным предопределенных типов, так и к переменным, которые являются экземплярами пользовательских классов.
Например:
class A
{
}
my A $a;
say $a.WHAT;
Вызов $a.WHAT вернет строку A, поскольку переменная $a как раз и является экземпляром этого класса.
Следует иметь в виду, что класс переменной не обязательно остается неизменным на протяжении работы программы. Например:
my $var = 1; say WHAT $var; $var = 1.2; say WHAT $var; $var = "1.2"; say WHAT $var;
Три обращения к методу WHAT напечатают соответственно Int, Rat и Str.