如何检查我是否可以在Perl中的URI对象上调用host()?

Dre*_*ens 5 perl uri

我正在遍历页面上的链接列表,为每个链接创建一个URI对象.创建URI对象时,我不知道URL是否有方案,所以当我稍后调用时$uri->host(),我有时会得到

Can't locate object method "host" via package "URI::_generic" at -e line 1.

因为URI对象是类型URI::_generic,并且没有host()属性.

我可以在使用正则表达式创建对象之前检查,或者我可以将块中的$uri->host()调用包装起来eval处理异常,但我认为必须有一个比其中任何一个更温和的方法.

Rob*_*t P 13

我的建议:在正则表达式之前使用内置语言功能.

而不是正则表达式,你可以这样做:

if ($uri->can('host')) {
    say "We're good!";
}
Run Code Online (Sandbox Code Playgroud)

......看看它是否可用.您还可以检查它的类型:

if ($uri->isa('URI::_generic')) {
    die 'A generic type - not good!' ;
}
Run Code Online (Sandbox Code Playgroud)

......并确认你有一个好的.