LINUX.ORG.RU

perl модуль deprecated

 


0

1

Перловый скрипт исп-ет старый модуль Mail::Sender, но при запуске появляется сообщение: «Mail::Sender is deprecated and you should look to Email::Sender instead at ./vacation.pl line 105.»

в строке 105 указано: use Mail::Sender

можно как-то принудительно указать, что всё-таки исп-ть старый модуль вместо Email::Sender?

Он итак использует старый модуль. А вот чтобы заткнуть ворнинг о «deprecated» — надо уже подумать.

KennyMinigun ★★★★★
()

С такой постановкой вопроса, ответ только один — отредактировать этот скрипт, чтобы он использовал новый модуль. Ну или ещё варинт, выкинуть этот и написать новый.

Kilte ★★★★★
()
Ответ на: комментарий от gigantischer

Оно ж работает, просто кидает ворнинг. Что тебе еще нужно ? Хочешь убрать ворнинг - сделай что тебе написал модуль.

joy4eg ★★★★★
()
Ответ на: комментарий от gigantischer

т.е. нет в perl никакой возможности форсировать исп-ие старого модуля?

Просто загружай нужный файл модуля.

BEGIN { require '/full_path/Module_good_Version'; }

Или вообще через eval загрузить.

soomrack ★★★★★
()
Последнее исправление: soomrack (всего исправлений: 1)
Ответ на: комментарий от gigantischer

всё-равно пишет deprecated....

Вроде как и не должно мьютить, тк это не варнинг deprecated-возможностей интерпретатора, а варнинг стороннего модуля Mail::Sender.

Код с инклудом модуля, перепиши так:

{
    local $SIG{__WARN__} = undef;
    require Mail::Sender;
}

Оно создаст анонимный блок кода, в котором переопределит обработчик warnings, затем импортирует твой модуль.

outtaspace ★★★
()
Последнее исправление: outtaspace (всего исправлений: 1)
Ответ на: комментарий от outtaspace

Посмотрел код модуля, видимо и я ошибся, все еще интересней. Оно ругается через warnings::warnif:

warnings::warnif('deprecated', 'Mail::Sender is deprecated and you should look to Email::Sender instead');

Предлагаю вот такой вариант:

{
    no warnings 'redefine';
    local *warnings::warnif = sub {};
    require Mail::Sender;
}

outtaspace ★★★
()
Ответ на: комментарий от gigantischer

Значит проблемы с руками

$ perl -E 'use Mail::Sender'
Mail::Sender is deprecated and you should look to Email::Sender instead at -e line 1.
$ perl -E 'no warnings "deprecated"; use Mail::Sender'
$

Olegymous ★★★
()
Ответ на: комментарий от outtaspace

bug?

Похоже на баг
Нельзя отключить warnings::warnif в том же scope-е или в main

#!/usr/bin/perl

use feature qw/say/;

sub wtest {
  my $pkg = __PACKAGE__;
  say "($pkg) enabled? " . (warnings::enabled('deprecated')?'yes':'no');
}

package test;

sub wtest {
  my $pkg = __PACKAGE__;
  say "($pkg) enabled? " . (warnings::enabled('deprecated')?'yes':'no');
}

package main;

no warnings 'all';
wtest();          # (main) enabled? yes
test::wtest();    # (test) enabled? no

pru-mike ★★
()
Ответ на: комментарий от outtaspace

В доке же написано

if that warnings category is enabled in the calling module

А ты пытаешься в рамках одного модуля что-то тестировать

Olegymous ★★★
()
Ответ на: комментарий от Olegymous

Таки да, работает warnif.

#!/usr/bin/perl

use strict;
use warnings;
use Test::More;
use Capture::Tiny qw(capture);

plan tests => 2;

my ($stdout, $stderr) = capture {
    require Mail::Sender;
};

is $stdout, q{};
like $stderr, qr{^ Mail::Sender \s is \s deprecated}x;
#!/usr/bin/perl

use strict;
use warnings;
use Test::More;
use Capture::Tiny qw(capture);

plan tests => 2;

my ($stdout, $stderr) = capture {
    no warnings 'deprecated';
    require Mail::Sender;
};

is $stdout, q{};
is $stderr, q{};
outtaspace ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.