Я разборе веб-страницу недвижимости, используя HTML :: TreeBuilder, и имеют следующий код:HTML :: Tree: Не удается вызвать метод «as_text» на неопределенное значение
$values{"Pcity"} = $address->look_down("_tag" => "span",
"itemprop" => "addressLocality")->as_text;
$values{"PState"} = $address->look_down("_tag" => "span",
"itemprop" => "addressRegion")->as_text;
Некоторые страницы не содержат город или штат, а также выходы анализатора с ошибкой:
Can't call method "as_text" on an undefined value
Чтобы исправить это, я использовал следующий метод:
$values{"Pcity"} = $address->look_down("_tag" => "span",
"itemprop" => "addressLocality");
if(defined($values{"Pcity"}))
{
$values{"Pcity"} = $values{"Pcity"}->as_text;
}
else
{
$values{"Pcity"} = '';
}
Он работает , но теперь вместо 1 строки у меня есть 9. И поскольку у меня много таких мест, код станет значительно больше.
Есть ли способ для оптимизации?
Это может быть написано '$ значения {Pcity} = $ а && $ a-> as_text' с минимальной разницей, что' $ значения {Pcity} 'заканчивается как 'undef' вместо пустой строки, если элемент span не найден. Но учтите, что вы никогда не должны использовать ни '' $ a', ни '$ b' нигде, кроме блока блока' sort', поскольку эти идентификаторы зарезервированы. – Borodin
в этом примере использование $ a не имеет побочных эффектов –
'' '' '' '' '' '' '' следует избегать, как само собой разумеющееся, так же, как всегда должны быть прагма 'strict' и' warnings' включены, даже если они не имеют никакого значения для данной программы. Нечего сказать, что модификация не может добавить вызов 'sort' и ввести неясные ошибки. В этом случае вы не знаете, содержит ли код OP 'sort'. Кроме того, '$ a' бесполезен как идентификатор, поскольку он не имеет смысла. – Borodin