Что этот однострочный фильтр Perl делает с извлеченным XML? - PullRequest
0 голосов
/ 17 января 2011
curl -u $1:$2 --silent "https://mail.google.com/mail/feed/atom" | perl -ne 'print "\t" if //; print "$2\n" if /<(title|name)>(.*)<\/\1>/;'

Я понимаю первую часть. Он получает XML с использованием аргументов командной строки для аутентификации, а затем передает его в Perl. Но что делает бит Perl? Я знаю, что это выглядит, но это регулярное выражение?

Ответы [ 2 ]

2 голосов
/ 17 января 2011

-n: перенести программу в while (<>) { ... } (например, повторить для каждой строки).

-e: следующий код - это программа, которая должна быть выполнена.

print "\t" if //;  # if the previous regex matches this line, print a tab

print "$2\n" if /<(title|name)>(.*)<\/\1>/;
                   # if the current line starts contains
                   # <title>...</title> or <name>...</name>,
                   # print the bit between the tags, and a newline

Я не уверен, что эта программа делает что-нибудь полезное, возможно, произошла ошибка в транскрипции.Откуда вы взяли код и для чего он предназначен?

1 голос
/ 17 января 2011
print "\t" if //;
print "$2\n" if /<(title|name)>(.*)<\/\1>/;

Да, это регулярное выражение, // и /<(title|name)>(.*)<\/\1>/ являются сопоставителями регулярных выражений.Я не знаю Perl, поэтому я не уверен, для чего предназначен первый (возможно, печатает вкладку для пустых строк), но второй находит любые элементы <title> или <name> и извлекает содержимое, а затем я предполагаю, что печатает его.

...