У меня есть следующий код инициализации в апплете на панели задач:
use Gtk3 -init;
use Glib::Object::Introspection;
eval {
Glib::Object::Introspection->setup(
basename => 'Notify',
version => '0.7',
package => "MyProgram::Notify",
);
};
if ($@) {
say "no notify because setup failed: $@";
$use_notify = 0;
} else {
MyProgram::Notify->init();
}
Этот код основан на fdpowermon, но, похоже, взяты более или менее из примеров обработки исключений в POD Glib:: Объект::Самоанализ.
Но perlcritic (на уровне 3) по этому поводу спорит:
Return value of eval not tested at line …
Поэтому я попытался переписать это с помощью Try::Tiny:
use Gtk3 -init;
use Glib::Object::Introspection;
use Try::Tiny;
try {
Glib::Object::Introspection->setup(
basename => 'Notify',
version => '0.7',
package => "MyProgram::Notify",
);
} catch {
say "no notify because setup failed: $@";
$use_notify = 0;
} finally {
if (!$@) {
MyProgram::Notify->init();
}
}
Но затем perl возражает:
Can't locate object method "new" via package MyProgram::Notify::Notification
Хотя я вижу, что особенно блок finally
не является реальным улучшением, я не понимаю, почему использование Try::Tiny имеет такое значение в отношении пакета, созданного Glib::Object::Introspection.
Или есть лучший способ, чем Try::Tiny, сделать этот код более элегантным и читабельным, оставив perlcritic
довольным?
eval
, закрывающими};
иif ($@)
, прежде чем жаловаться. Вы должны идти по perlcritic и по суровому уровню? - person zdim   schedule 28.01.2017