Когда вы пробуете печатать объект, например: say $x, Perl 6 вызывает метод gist. Этот метод определен для всех встроенных типов — где-то он вызывает метод Str, где-то perl, а где-то формирует особое представление.
Рассмотрим, как можно воспользоваться этим методом, чтобы сделать свой вариант печати объекта:
class X { has $.value; method gist { '[' ~ $!value ~ ']' } } my $x = X.new(value => 42); say $x; # [42] $x.say; # [42]
При обращении к say программа печатает число в квадратных скобках: [42].
Обратите внимание, что при интерполяции в строке, заключенной в двойные кавычки, вызывается другой метод — Str:
say $x.Str; # X<140586830040512> say "$x"; # X<140586830040512>
Если вам требуется кастомная интерполяция, переопределяйте и метод Str:
class X { has $.value; method gist { '[' ~ $!value ~ ']' } method Str { '"' ~ $!value ~ '"' } } my $x = X.new(value => 42); say $x; # [42] $x.say; # [42] say $x.Str; # "42" say "$x"; # "42"