Как я могу иметь переменные утверждения в Perl? - PullRequest
7 голосов
/ 21 июня 2009

Как я могу проверить, что переменная имеет определенное значение в Perl? Есть ли команда, чтобы остановить выполнение скрипта для поиска некоторых его переменных?

Интересно, смогу ли я использовать Pythonic практику вставки:

    assert 0, (foo, bar)

для отладки сценариев без использования отладчика?

Ответы [ 6 ]

12 голосов
/ 21 июня 2009

Быстрый поиск CPAN предлагает Carp :: Assert .

8 голосов
/ 21 июня 2009

См. Карп :: Assert :

use Carp::Assert;

$next_sunrise_time = sunrise();

# Assert that the sun must rise in the next 24 hours.
assert(($next_sunrise_time - time) < 24*60*60) if DEBUG;

# Assert that your customer's primary credit card is active
affirm {
    my @cards = @{$customer->credit_cards};
    $cards[0]->is_active;
};
5 голосов
/ 21 июня 2009
3 голосов
/ 21 июня 2009

В PerlMonks имеется скрипт, который вводит метод быстрого подтверждения.

Скорость важна, поскольку Perl интерпретируется, и любые встроенные проверки влияют на производительность (в отличие от простых макросов C, например)


Я не уверен, будут ли эти вещи использоваться напрямую.


Хорошо! Это то, что я искал - PDF Предупреждение: Test-Tutorial.pdf . Test::Harness используется для написания тестов модуля Perl.

1 голос
/ 14 марта 2012
if ( $next_sunrise_time > 24*60*60 ) { warn( "assertion failed" ); } # Assert that the sun must rise in the next 24 hours.

Вы можете сделать это, если у вас нет доступа к Perl 5.9, который требуется для Carp :: Assert .

1 голос
/ 21 июня 2009
$var_to_check =~ /sometest/ or die "bad variable!";

Я склонен добавлять подобные вещи в мой код, а затем использовать поиск и замену, чтобы избавиться от них (в рабочем коде).

Кроме того, ' eval ' может использоваться для запуска раздела кода и обнаружения ошибок и может использоваться для создания функциональности обработки исключений. Если вы утверждаете, что значение не равно 0, возможно, вы хотите создать исключение и обработать этот случай особым образом?

...