Size: a a a

2020 November 30

IB

Ivan Bessarabov in Modern::Perl
почему -E 'say 123' в командной строке запускать — это безопасно, а то же самое в файле — не безопасно
источник

SZ

Sergey Zhmylove in Modern::Perl
Ivan Bessarabov
почему -E 'say 123' в командной строке запускать — это безопасно, а то же самое в файле — не безопасно
Потому что
источник

SZ

Sergey Zhmylove in Modern::Perl
Перл когда парсит шебанг, он должен выпарсить оттуда указанные опции (и включить их).
В интерпретаторе реализован строковый парсер для этого (там же не getopt или типа того). Этот строковый парсер используется в нескольких местах, в т.ч. при парсинге окружения, в котором эти опции небезопасны
источник

SZ

Sergey Zhmylove in Modern::Perl
Понятно, что в шебанге могли бы это дело разрешить, но они просто не стали делать отдельный костыль для этого :)
источник

AK

Andrey Karepin in Modern::Perl
а не оболочка ли выполняет строку указанную в шебанг?
источник

SZ

Sergey Zhmylove in Modern::Perl
Andrey Karepin
а не оболочка ли выполняет строку указанную в шебанг?
Не всё так тривиально
источник

SZ

Sergey Zhmylove in Modern::Perl
И именно поэтому шебанг вида '#!perl' это провал
источник

MD

Mihail Dvornikov in Modern::Perl
package Merge;
use Merge30;
my $new_filename = Merge30:main();

package Merge30;
sub main {
   my $var1 = 1;
   my fh_out = open();
   my $t = XML::Twig->new(twig_handlers => { section => sub{ $var1++; print $fh_out "text"; ... } } );
}

package Merge30;
sub main {
   my $var1 = 1;
   my $t = XML::Twig->new(twig_handlers => { section => \&section} );
   sub section { ... };
}

Приложение на Dancer2. Создаю другой xml-файл и делаю вычисления. Поместил функции и переменные внутрь main().Будут ли утечки памяти в таком варианте? Как лучше сделать?
источник

SZ

Sergey Zhmylove in Modern::Perl
Mihail Dvornikov
package Merge;
use Merge30;
my $new_filename = Merge30:main();

package Merge30;
sub main {
   my $var1 = 1;
   my fh_out = open();
   my $t = XML::Twig->new(twig_handlers => { section => sub{ $var1++; print $fh_out "text"; ... } } );
}

package Merge30;
sub main {
   my $var1 = 1;
   my $t = XML::Twig->new(twig_handlers => { section => \&section} );
   sub section { ... };
}

Приложение на Dancer2. Создаю другой xml-файл и делаю вычисления. Поместил функции и переменные внутрь main().Будут ли утечки памяти в таком варианте? Как лучше сделать?
Merge30:main() оригинально
источник

SZ

Sergey Zhmylove in Modern::Perl
Mihail Dvornikov
package Merge;
use Merge30;
my $new_filename = Merge30:main();

package Merge30;
sub main {
   my $var1 = 1;
   my fh_out = open();
   my $t = XML::Twig->new(twig_handlers => { section => sub{ $var1++; print $fh_out "text"; ... } } );
}

package Merge30;
sub main {
   my $var1 = 1;
   my $t = XML::Twig->new(twig_handlers => { section => \&section} );
   sub section { ... };
}

Приложение на Dancer2. Создаю другой xml-файл и делаю вычисления. Поместил функции и переменные внутрь main().Будут ли утечки памяти в таком варианте? Как лучше сделать?
А ещё у тебя будет multiple redefinition для main в пакете Merge30
источник

SZ

Sergey Zhmylove in Modern::Perl
Утечки памяти в перл будут только если ты будешь забывать где-то ссылки
источник

MD

Mihail Dvornikov in Modern::Perl
Задача вызвать модуль, он создаст новый файл, закроет его и вернет новое имя файла. Тут есть ссылки на функции.
источник

SZ

Sergey Zhmylove in Modern::Perl
Mihail Dvornikov
Задача вызвать модуль, он создаст новый файл, закроет его и вернет новое имя файла. Тут есть ссылки на функции.
Если нужно вернуть имя файла, то верни его как строку
источник

SZ

Sergey Zhmylove in Modern::Perl
Если нужен объект, то локально созданные функции (sub section) будут для каждого объекта новые
источник

SZ

Sergey Zhmylove in Modern::Perl
И не будут удалены пока живёт объект
источник

SZ

Sergey Zhmylove in Modern::Perl
Отдельный пакет -- это вообще не важно
источник

SZ

Sergey Zhmylove in Modern::Perl
Пакеты это просто способ разделения областей видимости
источник

MD

Mihail Dvornikov in Modern::Perl
Сейчас возвращается строка с новым именем файла. Для каждого типа файла  создан пакет, чтобы отделить логику. Сейчас правильно такое содержание или нужно через классы делать вместо пакетов?
источник

SZ

Sergey Zhmylove in Modern::Perl
Mihail Dvornikov
Сейчас возвращается строка с новым именем файла. Для каждого типа файла  создан пакет, чтобы отделить логику. Сейчас правильно такое содержание или нужно через классы делать вместо пакетов?
Я честно не понимаю твой вопрос.
Если бы бы показал код, было бы понятнее.
Код выше -- некорректный
источник

MD

Mihail Dvornikov in Modern::Perl
Пакет Merge принимает имя файла и по его типу запускает разные обработчики (пакеты).
источник