Один из моих проектов содержит множество простых вызовов методов. Я хотел бы, чтобы назовите их без круглых скобок, чтобы избежать беспорядка и сделать частые изменения проще.вызов метода Perl без круглых скобок
Я выполнил следующие испытания.
С скобками (очевидно, работает):
my $something = [1, 2, 3];
my $dumper = Data::Dumper->new([$something]);
$dumper->Indent(0);
say $dumper->Dump();
Теперь без круглых скобок (работает только для методов без параметров)
my $something = [1, 2, 3];
# my $dumper = Data::Dumper->new [$something]; # syntax error
my $dumper = Data::Dumper->new([$something]);
# $dumper->Indent 0; # Number found where operator expected
$dumper->Indent(0);
say $dumper->Dump; # works!
Я также протестировал косвенный синтаксис. Я знаю о его проблемах, но если это сработает, это может быть вариант. Но это не так.
sub say2 { say @_; return; }
my $something = [1, 2, 3];
my $dumper = new Data::Dumper [$something]; # works!
# Indent $dumper, 0; # No error, but doesn't do what supposed to happen
Indent $dumper(0); # works
# say Dump $dumper; # say() on unopened filehandle Dump
say2 Dump $dumper; # works
Есть ли способ вызова методов последовательно без скобок? Я не вижу реальной причины, по которой Perl не допустил бы этого, потому что нет никакой двусмысленности. Для подсетей мы используем «subs subs», возможно, что-то подобное существует для методов?
И для полноты, есть ли способ избежать «say2» в приведенном выше примере и по-прежнему звонить без круглых скобок?
Возможно, есть какие-то взломы или трюки?
Прототипы не имеют значения. Суб с параметрами можно вызывать без скобок, методы не могут. Зачем? 'say' немного странно, он принимает дескриптор файла, а не запятую. 'say Dump $ dumper;' сложно, но я думаю, что 'indent $ dumper, 0;' должен работать так, как ожидалось. Тем не менее, меня не волнует косвенный синтаксис. Мой главный вопрос остается без ответа.'$ dumper-> Отступ (0);' vs '$ dumper-> Отступ 0;'. Последнее не работает. Зачем? Понятно, что это вызов метода, что еще может быть? Без параметра Perl знает, но с ним нет. Странный. Зачем? Возможно, есть возможность взломать или обмануть? – barney765