Версия пакета: mariadb-server-perl Шаги воспроизведения: 1) Установить пакеты: # apt-get install -y mariadb-server-perl perl-DBD-MariaDB 2) Запустить службу # systemctl start mysqld 3) Создать базу данных mysql -u root -e "CREATE DATABASE test_db" 4) Запустить mytop в batch-режиме: # mytop -d test_db --prompt -b Ожидаемое поведение: запускается mytop в batch-режиме (не очищается экран при обновлении данных) Фактический результат: программа падает с ошибкой Password: Undefined subroutine &main::ReadMode called at /usr/bin/mytop line 273. Без флага -b запускается без ошибок. Такая же ошибка при добавлении "batchmode=1" в конфиг (/root/.mytop)
Воспроизводится на версии: mariadb-server-perl-11.8.7-alt1 Причина в том, что параметры -b и --prompt несовместимы между собой, но проверки этого в коде нет, это также нельзя понять из выводимого сообщения. ReadMode/ReadKey систематически защищены условием `unless $config{batchmode}` (см., например, строки 308, 379, 890), обеспечивающим корректную работу в batch-режиме без модуля Term::ReadKey. Однако в блоке обработки --prompt (строки 270-276) вызовы ReadMode(2) и ReadMode(0) указаны без этой защиты: if ($config{prompt}) { print "Password: "; ReadMode(2); chomp($config{pass} = <STDIN>); ReadMode(0); print "\n"; } В результате при одновременном использовании --prompt и --batchmode вызов ReadMode(2) выполняется в обход защиты, модуль Term::ReadKey не загружен (см. строки 204-209), и mytop падает с ошибкой "Undefined subroutine &main::ReadMode".