Скрытие предупреждений, относящихся к преднамеренному коду в Perl

У меня есть несколько предупреждений, подобных следующему, которые часто появляются, когда Perl интерпретирует мой код:

 Smartmatch is experimental at /home/user/www/cgi-bin/safari/lib/SAFARI/Data.pm line 395.

И несколько из того, где я переопределяю подпрограмму модуля CPAN, содержащую ошибки:

 Subroutine Net::Amazon::S3::Client::Object::put_part redefined at /usr/local/share/perl5/FaithTree/Backup.pm line 65.

Оба они являются преднамеренными вещами в коде. Я нашел Smartmatch прекрасным инструментом, который я намеренно использую без каких-либо проблем, и я отменил эти подпрограммы именно потому, что они не работали должным образом в вышестоящем модуле. Есть ли «правильный» способ сказать Perl не показывать такие предупреждения? Если в них все еще есть потребность, есть ли правильный способ хотя бы обуздать их, чтобы они не перегружали журналы сервера?

Я прочитал еще один вопрос, который я мог бы использовать use experimental qw(smartmatch switch);, чтобы скрыть предупреждение Smartmatch. Но я менее уверен, что делать с предупреждением о переопределении.

Обратите внимание, что если вы пытаетесь исправить модуль в модуле, вы должны изменить его только для своих целей, а затем вернуть исходный код, чтобы это не повлияло на другой код. Демо

Schwern 23.12.2022 01:05

Я не уверен, что назвал бы Smartmatch «замечательным инструментом».

TLP 23.12.2022 01:11

@TLP Есть ли причина избегать смарт-матча? Это конечно кажется полезным..

Timothy R. Butler 23.12.2022 03:39

@demo Патч на самом деле находится в приложении - я просто поместил его в собственное пространство имен модулей, чтобы его можно было установить с помощью MakeMaker. Одно из исправлений уже отправлено вверх по течению; Мне также нужно отправить еще один отчет об ошибке. Спасибо!

Timothy R. Butler 23.12.2022 03:40

@ TimothyR.Butler «Есть ли причина избегать смарт-матча?» --- тьфу, да; об этом много написано. Я предполагаю, что вы, вероятно, используете несколько основ, которые ясны, интуитивно понятны и не слишком сложны, и неудивительно, что это нравится. Не вдаваясь во все остальные подробности, главная проблема в том, что она почти наверняка будет изменена, и, вероятно, довольно сильно, и, возможно, до неузнаваемости — или того хуже. Таким образом, весь код, который его использует, должен был бы измениться.

zdim 23.12.2022 06:09

Я не могу не подчеркнуть, что, отключив обязательное «экспериментальное» предупреждение, вы, как кодер, берете на себя полную ответственность за полный или странный случайный сбой вашего кода в будущем выпуске perl.

Dave Mitchell 23.12.2022 17:26

@TimothyR.Butler Smartmatch не делает ничего, чего нельзя было бы сделать без smartmatch. Ваш реальный вопрос должен быть «Как мне заставить мой код работать без Smartmatch», а не гораздо худшая альтернатива «Как мне скрыть предупреждения от экспериментальных функций».

TLP 23.12.2022 23:05

@TLP Я полагаю, я должен исследовать это. Я нахожу это очень полезным для поиска массивов, в первую очередь.

Timothy R. Butler 24.12.2022 00:36

Smartmatch недавно был объявлен устаревшим разработчиками Perl. Его планируется полностью удалить из Perl в Perl 5.42. См. nntp.perl.org/group/perl.perl5.porters/2022/12/msg265180.htm‌​l.

Ed Sabol 26.12.2022 18:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
9
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
use experimental qw(feature ...);

использовать экспериментальные функции без предупреждений. Чтобы подавить другие предупреждения, запустите свой код с включенной прагмой no warnings ..., как описано в perldoc

no warnings 'redefine';
sub Someone::Elses::Package::my_monkey_patch_func { ... }

@c = (1, 2, undef, 4);
print join(";", @c);   # emits warning
{
    no warnings 'uninitialized';
    print join(":", @c); # warning suppressed
}

Обратите внимание, что вы захотите применить это no warnings к этой единственной строке, иначе оно будет применяться ко всей остальной части файла. { no warnings 'redefine'; sub ... }.

Schwern 23.12.2022 00:59

Другие вопросы по теме