Существуют две синтаксические формы вызова как методов класса, так и методов объекта.
Первая форма имеет вид:
method class_or_object, parameters
например,
$somebody = new Staff, {"имя"=>"Анна"}; # метод класса
showdata $somebody, "имя","фамилия"; # метод объекта
showdata {"имя"=>"Мария","возраст"=>18}; # метод объекта
showdata new Staff "возраст"; # метод объекта
showdata setdata hew Staff, {"имя"=>"Глеб"}, "имя"; # метод объекта
Данная форма представляет собой обычный вызов функции, который может быть вложенным в другой вызов. Первым аргументом функции является ссылка (для методов объекта) или/им^Гпакета (для методов класса).
В приведенном примере первая строка содержит вызов конструктора new, в котором первым (и единственным) аргументом является имя пакета.
Вторая строка содержит вызов метода объекта, в котором первым аргументом является объект-ссылка.
В третьей строке первый аргумент задается при помощи блока {}, возвращающего ссылку на анонимный хеш-массив. Данный хеш-массив не будет объектом, так как он не объявлен объектом класса staff при помощи функции bless о, но синтаксически такая конструкция возможна.
В четвертой строке метод объекта вызывается с двумя аргументами. Первым аргументом является ссылка, возвращаемая конструктором new (), вторым — строка "возраст".
В пятой строке конструктор new создает объект, который передается в качестве первого аргумента методу setdata. Вторым аргументом метода setdata является ссылка на анонимный хеш-массив {"имя"=>"Глеб"). Метод showdata в качестве первого аргумента использует ссылку, возвращаемую методом setdata, а в качестве второго аргумента — строку "имя".
Вторая форма обращения к методу имеет вид
class_or_obj ect ->method(parameters)
Например, предыдущие вызовы могут быть записаны также в виде:
$somebody = Staff->new(("имя"=>"Анна"});