С таким вопросом немного сложно понять, с чего начать.
qx
, на который вы ссылаетесь, является особенностью Perl. «Q *» или «Операторы типа цитирования и цитирования» описаны на справочной странице «Операторы» Perl (обычно вы используете man perlop
, чтобы прочитать это в системах с обычной установкой Perl).
В частности, qx
- это "выполнение команды в кавычках" ... которая, по сути, является альтернативной формой оператора `(обратный тик или" подстановка команды) в Perl.
Другими словами, если вы выполняете такую команду, как:
perl -e '$ foo = qx {ls}; print "\ n ### \ n $ foo \ n ### \ n"; '
... в системе с установленным Perl, тогда он должен запустить Perl, который должен оценить (-e) предоставленное вами выражение (в кавычках). Другими словами, мы пишем небольшую программу прямо в командной строке. Эта программа начинается с создания переменной, содержимое которой будет скалярным (терминология Perl для строки или числа). Мы присваиваем (оператор =, или assignment) вывод, который захватывается выполнением команды ls
для этой переменной ($ foo). После этого мы печатаем содержимое нашей переменной (независимо от того, что напечатала бы команда ls
) с ### строками перед и после этого содержимого.
Причуда оператора Perl qx
(и различных других операторов q *) заключается в том, что он позволяет вам разделять команду практически любыми символами, которые вам нравятся. Например, perl -e '$bar = qx/pwd/;'
будет захватывать вывод команды pwd
. Если вы используете любой из символов, которые обычно используются в качестве разделителей вокруг текстовых скобок, скобок, скобок и т. Д.), То команда qx
будет искать соответствующий соответствующий разделитель. Если вы используете любую другую пунктуацию (или не буквенно-цифровой символ?), То этот же символ будет и конечным разделителем. Это более позднее поведение аналогично и было вдохновлено функцией в команде «замена» из старой утилиты sed
и ed
строковых редакторов; в то время как сопоставление скобок, фигурных скобок и т. д. является новинкой Perl.
Итак, это основы того, как захватить выходные данные вашего сценария оболочки. Чтобы напечатать числа в таблице HTML, вам нужно разделить захваченный вывод на отдельные строки (сохранить их в список или массив), а затем распечатать пролог HTML (теги <table>
и <th>
(заголовок) и т. Д. on) ... они зацикливаются на серии <tr>
строк, интерполируя ваши числа в <td>>
(данные таблицы)) и затем, наконец, печатают ваш HTML-эпилог (с закрывающими тегами).
Для этого вы захотите прочитать о функции Perl print
и о " interpolation " в Perl. Это довольно сложная тема.
Это все очень грубо, и есть инструменты, которые позволяют вам подойти к генерации HTML на гораздо более высоком уровне. Также весьма сомнительно, что вы хотите обернуть выполнение сценария оболочки в сценарий Perl, поскольку вполне вероятно, что вы можете изменить сценарий оболочки для непосредственного вывода HTML (возможно, в качестве параметра, управляемого параметром командной строки или переменной среды), или что вы можете переписать сценарий оболочки на Perl. Это может потенциально исключить дополнительную работу по синтаксическому анализу выходных данных (разбиение его на строки и разделение значений из этих строк в массив, поскольку вы можете захватывать данные непосредственно в массив (или, возможно, распечатывать строки HTML) непосредственно, как вы генерируя их (однако это делает существующий сценарий оболочки).