Я хочу использовать Devel::Declare
для ввода нескольких строк кода Perl. Однако Devel::Declare::set_linestr()
не может иметь дело с несколькими строками.
Обычно я хотел бы объединить несколько операторов вместе как одну строку. Эти утверждения должны быть в отдельных строках, чтобы сохранить номера строк для целей сообщения об ошибках. Это необходимо решить эту ошибку в методе:: Подписи и эта связанная ошибка. Я открыт для альтернативных решений.
Например, метод:: Signatures в настоящее время включает этот код...
use Method::Signatures;
func hello(
$who = "World",
$greeting = get_greeting($who)
) {
die "$greeting, $who";
}
... в это...
func \&hello; sub hello { BEGIN { Method::Signatures->inject_scope('') }; my $who = (@_ > 0) ? ($_[0]) : ( get_greeting($who)); my $greeting = (@_ > 1) ? ($_[1]) : ( "Hello"); Method::Signatures->too_many_args_error(2) if @_ > 2;
die "$greeting, $who";
}
die $who
после этого сообщает строку 4 вместо строки 7.
Я бы хотел, чтобы это было вместо этого (или, возможно, с участием #line
).
func \&hello; sub hello { BEGIN { Method::Signatures->inject_scope('') };
my $who = (@_ > 0) ? ($_[0]) : ( "World");
my $greeting = (@_ > 1) ? ($_[1]) : ( get_greeting($who));
Method::Signatures->too_many_args_error(2) if @_ > 2;
die "$greeting, $who";
}
Не только это верно воспроизводит номера строк, если get_greeting
сжимает, он будет сообщать, что был вызван из правильной строки.