Как отладить Perl в оболочке bash - PullRequest
0 голосов
/ 27 ноября 2011

Я отлаживаю программу Perl, запущенную скриптом bash. Поскольку сценарий Perl состоит из огромного количества модулей Perl и должен предоставлять чрезвычайно сложные параметры, поэтому оболочка bash здесь определенно необходима.

Из-за этого ограничения в моем случае я не могу использовать Perl-отладчик, что, я думаю, является самым простым способом. Затем я перехожу к старому доброму printf. Но, даже несмотря на то, что я добавляю printf s из одного места в другое в разных модулях, ничего не выводится на терминал, где я запускаю оболочку bash.

Итак, я хотел бы, чтобы вы сначала объяснили, почему я не могу получить какую-либо информацию для печати из внутренних скриптов Perl и как решить мою проблему в этом случае для отладки программы Perl.

Ответы [ 2 ]

4 голосов
/ 27 ноября 2011

объясните, почему я не могу получить информацию о печати из внутренних скриптов Perl

Предположительно, ваш bash-скрипт поглощает вывод.

Выясните, что делает bash, и вызовите perl напрямую с теми же аргументами и переменными окружения.

0 голосов
/ 27 ноября 2011

Quick Bash Hack

Должна быть возможность перенаправить STDOUT и STDERR в файл:

# Inside the bash script
perl myScript.pl 1>perl_log.out 2>perl_log.err

Quick Perl Hack

Rollотладочный вывод для вывода на печать:

use constant debug_flag => 1; # At top of script(s)

{  my $debug_handle;

    sub debug {

        return unless debug_active;  # Only prints debug msgs if debug active

        unless ( $debug_handle ) {   # Initialize debug log

            open $debug_handle, '>', 'perl_log.out' or die $!;
        }

        print $debug_handle @_, "\n";
    }
}

# call with 'debug'

debug ( 'Array length : ', scalar @array );

Лучшие практики Perl

use Log::Log4perl;  # Wonderful logging module

и

use Carp;
local $SIG{__DIE__} = \&Carp::confess;  # Print out stack traces...
local $SIG{__WARN__} = \&Carp::cluck;   # ... when using die and warn

Qualm

Лучше избегать printf, когда это возможно, и использовать print вместо .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...