Size: a a a

2020 November 30

SZ

Sergey Zhmylove in Modern::Perl
Mihail Dvornikov
Пакет Merge принимает имя файла и по его типу запускает разные обработчики (пакеты).
Каждый обработчик это sub которая возвращает строку?
источник

MD

Mihail Dvornikov in Modern::Perl
Sergey Zhmylove
Каждый обработчик это sub которая возвращает строку?
Да, внутри у каждого обработчика свои обработчики XML::Twig.
источник

SZ

Sergey Zhmylove in Modern::Perl
Mihail Dvornikov
Да, внутри у каждого обработчика свои обработчики XML::Twig.
Тогда не будет утечек
источник

MD

Mihail Dvornikov in Modern::Perl
Мне не нравится, что функции находятся внутри main().
источник

SZ

Sergey Zhmylove in Modern::Perl
Mihail Dvornikov
Мне не нравится, что функции находятся внутри main().
Ну убери их оттуда
источник

MD

Mihail Dvornikov in Modern::Perl
XML::Twig->new( twig_handlers => { header => \&header, section1 => \&section1, ...} );
Обработчики должны видеть общие переменные внутри пакета (имя файла, статистику), поэтому требуется общий блок, например main().
источник

MD

Mihail Dvornikov in Modern::Perl
Все плохо, но что изменить неизвестно? :)
источник

SZ

Sergey Zhmylove in Modern::Perl
Я не понимаю твой вопрос. Напиши пример кода на perlbanjo, если хочешь, а я покажу как сделать.
источник

SZ

Sergey Zhmylove in Modern::Perl
Mihail Dvornikov
Все плохо, но что изменить неизвестно? :)
Но возможно тебе надо это: https://perlbanjo.com/37437ac432
источник

MD

Mihail Dvornikov in Modern::Perl
источник

SZ

Sergey Zhmylove in Modern::Perl
Ты хочешь куда-то вынести sub { my ( $t, $section ) ... ?
источник

ММ

Максим Максимов... in Modern::Perl
Mihail Dvornikov
Задача вызвать модуль, он создаст новый файл, закроет его и вернет новое имя файла. Тут есть ссылки на функции.
use File::Temp qw/ tempfile tempdir /;
источник

MD

Mihail Dvornikov in Modern::Perl
Sergey Zhmylove
Ты хочешь куда-то вынести sub { my ( $t, $section ) ... ?
Для нескольких обработчиков XML::Twig в одном пакете нужны общие переменные, например $fout - вывод в файл и другие. В качестве обработчиков есть анонимные функции и обычные в зависимости от размера их кода. Я привел свой текст, мне не нравится конструкции вида sub main{  sub header{} }.
Сейчас все работает, сомнения были в возможности утечки памяти. Еще есть мысль сделать не в виде пакета, а в виде класса Mergedrule30.
источник

SZ

Sergey Zhmylove in Modern::Perl
Что такое класс?
источник

VG

Vadim Goncharov in Modern::Perl
помещение в школе такое
источник

MD

Mihail Dvornikov in Modern::Perl
my $m30 = App::Mergedrule30->new();
источник

SZ

Sergey Zhmylove in Modern::Perl
Mihail Dvornikov
my $m30 = App::Mergedrule30->new();
Не понимаю, как это изменит твою ситуацию :)
источник

SZ

Sergey Zhmylove in Modern::Perl
В смысле, у тебя уже так сделано
источник

SZ

Sergey Zhmylove in Modern::Perl
Только функция называется не new, а main
источник

MD

Mihail Dvornikov in Modern::Perl
Так оставить?
источник