加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

我应该如何使用Perl URI类?

发布时间:2020-12-16 06:27:32 所属栏目:大数据 来源:网络整理
导读:我需要在Perl程序中处理一些HTTP URL,但我怀疑 URI 类应该如何帮助我. 特别是,我希望使用URI类来解析相对URL并获取它们的组件.但问题是: 我需要一个函数来处理URI对象和URI字符串作为参数(或确保只传递一个) sub foo_string_or_url { my $uri = URI-new(shi
我需要在Perl程序中处理一些HTTP URL,但我怀疑 URI类应该如何帮助我.

特别是,我希望使用URI类来解析相对URL并获取它们的组件.但问题是:

>我需要一个函数来处理URI对象和URI字符串作为参数(或确保只传递一个)

sub foo_string_or_url {
  my $uri = URI->new(shift);

这是正确的方法吗?我不太喜欢它,因为它将URI字符串化并不必要地创建新对象.
>提取组件

my $host = $uri->host;

这也是有问题的,因为并非所有URI都有主机,特别是如果有人将垃圾传递给函数,这将是die().
>解析相对URL

my $new_url = URI::URL->new($uri,$base)->abs;

IIUC,没有 – > abs,结果仍将字符串化为相对URL(并且不适用于HTTP :: Requests),我是对的吗?此外,这是否保证返回URI?

我该如何处理这些问题?可能性是

>始终使用 – > isa(‘URI’)和 – > can(“host”)

>对我来说似乎容易出错并且很难看

>根本不要使用URI类,并使用正则表达式解析URL

>我仍然宁愿使用库解决方案而不是自己调试

>在try {…} catch {…}中换行URI操作

>看第一点

使用URI类是否有一种理智,简单的方法?我没有想到的简单(在上面的列表中)?

解决方法

我认为你的问题可以概括为:参数验证很繁琐,我该怎么办呢?

>我也不喜欢它.这是开发商之间不同意见的问题,其他人说强制比切片面包更好,特别是当由Moose自动完成时.我认为只允许一种类型的程序简化了程序.此外,YAGNI适用于绝大多数情况.拒绝错误的类型,使用辅助模块,如Params::Validate/MooseX::Method::Signatures/MooseX::Declare,以避免代码示例中显示的手动检查.
>这是理想的行为.异常处理机制允许您编写适合每种情况的自定义代码.如果您认为它不美观,请将其删除,并注意让异常不受控制的后果.

use Try::Tiny;
my $host;
try {
    $host = $uri->host;
} catch {
    warn "Could not determine host for $uri. Message was: $_. Retry/abort/ignore?n";
    …
};

>是的,是的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读