10. Приемы отладки в Perl 6

Добрый вечер. Сегодняшний разговор будет о том, какими приемами можно пользоваться, чтобы смотреть значения переменных по ходу выполнения программы.

Интерактивную отладку мы рассматривать не будем, а коснемся только возможностей Perl 6 для удобного вывода переменных на печать.

say

Самое простое — функция say или одноименный метод, которые печатают простые объекты в довольно удобном виде:

my $str = 'Hello, World';
my $int = 42;
my $rat = ¾;
my @array = <alpha beta>;
my %hash = GB => 'London', FR => 'Paris';

say $str;   # Hello, World
say $int;   # 42
say $rat;   # 0.75
say @array; # [alpha beta]
say %hash;  # {FR => Paris, GB => London}

$str.say;   # Hello, World
$int.say;   # 42
$rat.say;   # 0.75
@array.say; # [alpha beta]
%hash.say;  # {FR => Paris, GB => London}

Этот же метод вполне пригоден и для классов:

class C {
    has $.x;
}
my $c = C.new(x => 10);

say $c; # C.new(x => 10)
$c.say; # C.new(x => 10)

perl

Чуть более изысканно — вызывать метод perl, возвращающий строку, которая теоретически является валидным кодом на Perl 6. Посмотрим, как это работает на примере тех же объектов:

say $str.perl;   # "Hello, World"
say $int.perl;   # 42
say $rat.perl;   # 0.75
say @array.perl; # ["alpha", "beta"]
say %hash.perl;  # {:FR("Paris"), :GB("London")}

say $c.perl;     # C.new(x => 10)

dd

В Rakudo Perl 6 (но не в самом языке Perl 6) есть функция dd, которая может использоваться в двух качествах. Во-первых, как дампер объектов:

dd $str;   # Str $str = "Hello, World"
dd $int;   # Int $int = 42
dd $rat;   # Rat $rat = 0.75
dd @array; # Array @array = ["alpha", "beta"]
dd %hash;  # Hash %hash = {:FR("Paris"), :GB("London")}
dd $c;     # C $c = C.new(x => 10)

Обратите внимание, что все переменные были созданы без ограничения на тип данных, но dd печатает и тип фактически находящихся в переменных данных.

Если же вызвать dd без аргументов, то она скажет, где находится. Например:

sub add($x, $y) {
    dd;             # sub add($x, $y)
    return $x + $y;
}

dd;                 # block <init>()
say add(1, 2);      # 3

WHAT

Метод WHAT — один из самых простых способов интроспекции объектов, он возвращает название типа данных (или класса), хранящихся в переменной:

say $str.WHAT;   # (Str)
say $int.WHAT;   # (Int)
say $rat.WHAT;   # (Rat)
say @array.WHAT; # (Array)
say %hash.WHAT;  # (Hash)
say $c.WHAT;     # (C)

Пока на сегодня все. До завтра!

5 thoughts on “10. Приемы отладки в Perl 6”

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *