Задать несколько классов в процедуре HTML::Element look_down Perl?

Я использую HTML::TreeBuilder для анализа HTML.

Можете ли вы указать несколько классов в процедуре look_down?

Например, при поиске в HTML с помощью

for ( $tree->look_down( 'class' => 'postbody'))

Я также должен был искать дополнительный класс 'postprofile' в том же цикле.

Есть ли способ сделать это без необходимости использовать новый -for ( $tree->look_down( 'class' => 'postprofile' ))

Поскольку это возвращает 2 набора результатов, тогда как я хочу только один объединенный набор.

Я пытался использовать - for ( $tree->look_down( 'class' => 'postbody||postprofile')) Однако это не сработало,

Заранее спасибо.

2 ответа

Решение

Попробуйте использовать шаблон вместо строки, т.е.

$tree->look_down( 'class' => qr/^(?:postbody|postprofile)$/)

Джамбо, я не пытаюсь быть грубым, но, пожалуйста, прочитайте инструкцию. Я добавил ссылки на ваш вопрос.

Я предполагаю, что вы не читали документы, потому что не смогли их найти. Давайте рассмотрим эту проблему:

Как найти нужные вам документы

Онлайн:

  • search.cpan.org - это основной веб-сайт, используемый для поиска модулей CPAN и их документации. Здесь можно найти много вещей.

  • На сайте perldoc.perl.org имеется полная документация по отгрузке для нескольких последних версий Perl.

Командная строка:

  • perldoc показывает оглавление с перечнем различных разделов документации, которые вы можете просмотреть.

  • perldoc -f function быстрый способ поиска perlfunc и просмотра информации только об одной функции Это супер удобный краткий справочник.

  • perldoc Module::Name::Here покажет вам документацию модуля.

  • perldoc perlpod Пример чтения раздела документации, в данном случае статья о форматировании POD.

Что я читаю?

Все это замечательно, но как узнать, где искать? Я имею в виду, что у меня есть вещь под названием "look_down", которую я использую. Где документы?

В этом случае вы можете видеть, что "look_down" всегда вызывается так $somevar->look_down(blarg), Найти где $somevar происходит от. Что это за объект? В худшем случае вы обнаружили, что это результат какого-то другого вызова, теперь вам нужно найти документы для этого вызова и посмотреть, что возвращается. Но шаги одинаковы. Рекурсивно проталкивать. В конце концов вы получите my $tree = HTML::TreeBuilder->new_from_content() или что-то типа того. Теперь вы можете прочитать new_from_content документы в HTML::TreeBuilder. Эй, мы получаем объект HTML:: Tree, который является подклассом HTML::Element! Итак, мы проверяем оба класса. Вау, look_down находится в HTML::Element.

Это немного сложнее, если у вас есть подпрограммы, импортированные из других модулей. Надеюсь, автор вашего кода был достаточно внимателен, чтобы явно указать, откуда берутся его подпрограммы:

use Some::Module qw( useful_sub  confusing_sub );

Это означает, что useful_sub а также confusing_sub родом из Some::Module;

Если вам не повезло, ваш автор написал только use Some::Module; Это означает, что вы получаете все экспорты по умолчанию. Это означает, что вам нужно прочитать документы, чтобы узнать, что было импортировано.

Ради удобства обслуживания вы можете уменьшить этот кошмар, всегда указав, какие именно процедуры вы импортируете из функции. Если вы хотите импортировать НИЧТО, вы можете указать это как: use Some::Module ();

При поиске простых подимен, полезно помнить, что они могут быть реальными функциями. Так что не забывайте искать perldoc.

В заключение, я надеюсь, что вы найдете это полезным. R-ing TFM - удивительно мощная техника, а изучение того, как найти соответствующие документы, - это скрытый навык, который раскрывает всю мощь. В Perl есть куча документов, и это может быть пугающим, когда вы не знаете, где искать.

Другие вопросы по тегам