HTML::TreeBuilder を使用して不動産の Web ページを解析しており、次のコードがあります。
$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 行になっています。このような場所がたくさんあるので、コードはかなり大きくなります。
最適化する方法はありますか?