Size: a a a

2020 September 02

ВР

Василий Степанович Р... in Modern::Perl
Во прикол!

Процедуру sub function никто обычным способом не вызывал, но программа работает так, как будто эта процедура отработала. :-)

Наверно это потому, что процедура sub function в модуле вызвана в процедуре, названной словом INIT поди? 🤔
источник

W

Warstone in Modern::Perl
Andrei Protasovitski
Из документации (ну и проверил я сам):
An END code block is executed as late as possible, that is, after perl has finished running the program and just before the interpreter is being exited, even if it is exiting as a result of a die() function. 

То есть, оно не вызовется, пока процесс не умрёт. INIT — самато! :)
Я там написал что дальше сами разберетесь. Считалось что тому кому надо пойдет и прочтетпро эти функции и выберет себе нужное.
источник

SZ

Sergey Zhmylove in Modern::Perl
Warstone
Все что надо - это перепилить import
Ты про перепилить импорт?
источник

W

Warstone in Modern::Perl
Я не понял этого вопроса
источник

SZ

Sergey Zhmylove in Modern::Perl
Либо я не до конца понимаю задачу (не вникал), либо без init/check не обойтись. Import вызывается после компиляции, но остальной проект ещё не скомпилен
источник

SZ

Sergey Zhmylove in Modern::Perl
Переслано от Warstone
Так все что ты рассказал не требует INIT или CHECK
источник

SZ

Sergey Zhmylove in Modern::Perl
Переслано от Warstone
Все что надо - это перепилить import
источник

SZ

Sergey Zhmylove in Modern::Perl
Переслано от Warstone
Ну и END в конце
источник

W

Warstone in Modern::Perl
Там был чат на тему "как это сделать", а потом оказалось что этого не надо судя по тому что рассказывали
источник

SZ

Sergey Zhmylove in Modern::Perl
Warstone
Там был чат на тему "как это сделать", а потом оказалось что этого не надо судя по тому что рассказывали
Аааа
источник

SZ

Sergey Zhmylove in Modern::Perl
Andrei Protasovitski
Наверное, мой пример не очень корректный. Там был модуль для кронждобов. Он засекал время выполнения, экспортировал всякие команды для лога. Помимо прочего, в скрипте можно было определить функцию args, которая возвращала список аргументов командной строки, их типы и описания. Потом эти аргументы можно было вытащить по param('name'), а из описаний выскакивала подсказка Usage:.
Типа ты пишешь свою job. Внутри делаешь use magicmodule; и из-за этого у тебя автоматически появляются param("name") и usage при запуске без аргументов? А информация берется из твоей sub args?
источник

AP

Andrei Protasovitski in Modern::Perl
Sergey Zhmylove
Типа ты пишешь свою job. Внутри делаешь use magicmodule; и из-за этого у тебя автоматически появляются param("name") и usage при запуске без аргументов? А информация берется из твоей sub args?
Да.
Я уже сделал.
источник

SZ

Sergey Zhmylove in Modern::Perl
Andrei Protasovitski
Да.
Я уже сделал.
А каким способом ты инжектишь код из модуля в "#сюда"?

use module;
sub args {}
sub mysub {}
#сюда
источник

AP

Andrei Protasovitski in Modern::Perl
Ну, use Exporter 'import'; @EXPORT = @my_functions;.
источник

SZ

Sergey Zhmylove in Modern::Perl
Andrei Protasovitski
Ну, use Exporter 'import'; @EXPORT = @my_functions;.
Функции -- да, в стэш сунуть и все
источник

SZ

Sergey Zhmylove in Modern::Perl
А как код инжектнуть?
источник

SZ

Sergey Zhmylove in Modern::Perl
Типа тебе ж надо будет проверить, что @ARGV==0 и дальше по списку
источник

AP

Andrei Protasovitski in Modern::Perl
Нет, такого требования нет. Usage выводится, если параметры неправильные.
источник

SZ

Sergey Zhmylove in Modern::Perl
Andrei Protasovitski
Нет, такого требования нет. Usage выводится, если параметры неправильные.
Хм, ясно. Так-то легко. А вот как сделать инъекцию кода...
источник

AP

Andrei Protasovitski in Modern::Perl
А для чего? Я юзкейс не понимаю.
источник