Загрузка модуля Perl - Защита от: возможно, вы забыли загрузить «Bla»?

При запуске perl -e "Bla-> new" , вы получите эту хорошо известную ошибку:

Can't locate object method "new" via package "Bla"
(perhaps you forgot to load "Bla"?)

Произошла на днях в серверном процессе Perl по моей недосмотру. Существует несколько сценариев, и в большинстве из них есть соответствующие операторы use .Но был один скрипт, который выполнял Bla-> new в sub blub в строке 123, но пропускал , используя Bla вверху, и когда он был запущен одним щелчком мыши без каких-либо других сценариев, использующих Bla , предварительно загруженных серверным процессом, а затем бац!

Изолированное тестирование сценария было бы очевидным способом защиты от этой конкретной ошибки, но, увы, код зависит от огромной среды. Знаете ли вы другой способ защиты от этого недосмотра?

Обновление

Вот один пример того, как PPI (несмотря на свои достоинства) ограничен в своем представлении на Perl:

use strict;
use HTTP::Request::Common;

my $req = GET 'http://www.example.com';
$req->headers->push_header( Bla => time );

my $au=Auweia->new;

__END__
PPI::Token::Symbol          '$req'
PPI::Token::Operator        '->'
PPI::Token::Word            'headers'
PPI::Token::Operator        '->'
PPI::Token::Word            'push_header'

PPI::Token::Symbol          '$au'
PPI::Token::Operator        '='
PPI::Token::Word            'Auweia'
PPI::Token::Operator        '->'
PPI::Token::Word            'new'

Установка заголовка и присваивая синтаксическому анализу Auweia-> new то же самое. Так что я не уверен, как можно опираться на такой шаткий фундамент. Я думаю, проблема в том, что Auweia также может быть подпрограммой; perl.exe не может определить до времени выполнения.

Дальнейшее обновление

Хорошо, из поучительных комментариев @ Schwern ниже я узнал, что PPI - это просто токенизатор, и вы можете использовать его, если принимаете его ограничения.

5
задан Lumi 13 November 2011 в 13:20
поделиться