Ниже приведен базовый фильтр исходного кода, который просто вставляет новую строку в исходный код Perl в точке, где он равен use
'd, а затем удаляет себя:
use warnings;
use strict;
use 5.010;
{package insert;
use Filter::Util::Call;
BEGIN {$INC{'insert.pm'}++}
sub import {
my ($class, @data) = @_;
filter_add sub {
my $status = filter_read;
if ($status) {
$_ = "@data;$_";
filter_del;
}
$status
}
}
}
my $x = 'init';
say $x; # init
use insert '$x = "hello"'; say $x; # init (should be hello)
say $x; # hello
Проблема, какв конце в комментариях показано, что любой код, следующий за конечной точкой с запятой оператора use, но все еще находящийся на той же строке, в конечном итоге компилируется перед вставленным источником.
Использую ли я Filter:: Util :: Звонить неправильно?Есть ли другой способ настроить фильтр так, чтобы он ловил первую строку?Или это всего лишь ограничение механизмов фильтрации исходного кода в Perl?