Linux - Perl: печать содержимого сценария, который я выполняю - PullRequest
0 голосов
/ 19 ноября 2018

Можно ли распечатать все содержимое сценария, который я выполняю?

Так как внутри скрипта будет много вещей, таких как вызывающие модули Perl, которые я буду вызывать во время выполнения (требуется "/ dir / file";), строки печати, которые я выполняю внутри массива (foreach (@array) ) {print "$ _ \ n";}).

Зачем мне это нужно? Для изучения генерации сценариев я делаю, особенно когда происходят ошибки. Произошла ошибка в строке 2000 (даже у меня есть только 1 тысяча строк сценария).

1 Ответ

0 голосов
/ 19 ноября 2018

Возможно, есть лучшие способы отладки скрипта (отладчик perl, использующий Carp::Always для получения трассировки стека с любыми ошибками и предупреждениями), но, тем не менее, существует как минимум два три механизма для полученияИсходный код запущенного скрипта.

  1. Поскольку $0 содержит имя файла, который выполняет perl, вы можете прочитать его.

    open my $fh, '<', $0;
    my @this_script = <$fh>;
    close $fh;
    
  2. Если скрипт имеет токен __DATA__ или __END__ в своем источнике, то Perl также устанавливает дескриптор файла DATA.Первоначально дескриптор файла DATA указывает на текст после токена __DATA__ или __END__, но фактически он открывается для всего исходного файла, поэтому вы можете seek перейти к началу этого дескриптора файла и получить доступ квесь сценарий.

    seek DATA, 0, 0;
    my @this_script = <DATA>;
    
  3. HT Grinnz: токен __FILE__ в любом исходном файле Perl ссылается на имя файла, содержащего этот токен

    open my $fh, '<', __FILE__;
    my @this_file = <$fh>;
    close $fh;
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...