我应该如何使用 Perl URI 类?

2024-05-03

我需要在 Perl 程序中处理一些 HTTP URL,但我怀疑应该如何处理URI https://metacpan.org/module/URI类帮助我。

特别是,我想使用URI用于解析相对 URL 并获取其组件的类。然而,问题是:

  1. 我需要一个可以同时使用两者的函数URI对象和 URI 字符串作为参数(或确保只传递一个)

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

    这是正确的做法吗?我不太喜欢它,因为它使URI并不必要地创建新对象。

  2. 提取组件

    my $host = $uri->host;
    

    这也是有问题的,因为并不是所有的URIs 有主机,特别是,如果有人将垃圾传递给该函数,这将die().

  3. 解析相对 URL

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

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

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

  • Use ->isa('URI') and ->can("host") all the time
    • 对我来说似乎容易出错而且丑陋
  • Don't use URI class at all and parse URLs using regexes
    • 我仍然宁愿使用库解决方案而不是调试我自己的解决方案
  • Wrap URI operations in try { ... } catch { ... }
    • 看第一点

有没有一种明智的、万无一失的方法来使用URI课程?我没有想到的简单的事情(在上面的列表中)?


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

  1. 我也不喜欢它。其他人说,这是开发人员之间意见不同的问题强制比切片面包更好,尤其是由 Moose 自动完成时。我认为只允许一种类型可以简化程序。此外,YAGNI 适用于绝大多数情况。拒绝错误的类型,使用辅助模块,例如参数::验证 http://search.cpan.org/~drolsky/Params-Validate-1.06/lib/Params/Validate.pm/MooseX::方法::签名 http://search.cpan.org/~ilmari/MooseX-Method-Signatures-0.37/lib/MooseX/Method/Signatures.pm/MooseX::声明 http://search.cpan.org/~flora/MooseX-Declare-0.35/lib/MooseX/Declare.pm为了避免代码示例中所示的手动检查。

  2. 这是期望的行为。异常处理机制允许您编写适合每种情况的自定义代码。如果您认为它不美观,请将其删除并注意让异常不受控制的后果。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何使用 Perl URI 类? 的相关文章

  • 获取URL查询字符串参数

    从格式如下的 URL 查询字符串获取参数的 所需代码较少 的方法是什么 www mysite com category subcategory myqueryhash 输出应该是 myqueryhash 我知道这种方法 www mysite
  • python编写的类爬虫抛出属性错误

    用 python 编写一些代码后 我陷入了深深的麻烦 我是按照 Python 中的 OOP 设计编写代码的新手 我在代码中使用的 xpath 是完美的 当通过 page crawler 类的实例运行 info grabber 类中的 pas
  • MailChimp 取消订阅 URL 中每个参数的用途是什么?

    在以下 URL 中 从列表中取消订阅用户 http xxxxx us2 list manage com unsubscribe u 87f537bccxx35e53a1890e0d9 id 40dcxx6cd6 e c4aaxx1dd6 c
  • 这可以一行完成吗?

    我像这样提取MAC地址 my tmp split domain 123 123 123 123 at 00 11 22 33 44 55 ether on eth0 my vip tmp 3 但不使用临时变量可以完成吗 是的 它可以 my
  • 继承php中的属性

    我有一个超类 其中包含用于设置它们的属性和方法 class Super private property function construct set this gt property set 然后我有一个需要使用该属性的子类 class
  • 无法从角度路由器获取路径或 url

    我无法从 ActivatedRoute 或 Router 导入中获取 URL 或路径 它为路径 输出空白 为 URL 输出 我记得使用的是工作版本 唯一捕获正确路由的是Router events 我也无法订阅ActivatedRoute 中
  • OOP JavaScript - 创建自定义 Div 对象

    我刚刚开始使用 JavaScript 进行 OOP 我想创建一个自定义 面板 这是我到目前为止所拥有的 function ShinyPanel css attributes this container document createEle
  • 如何在两个类之间共享数据

    Question 有没有一种方法可以让两个类同时相互继承 背景 我目前正在开发一个 Socket Server 项目 在这个项目中 我有两个课程 一个Server类 以及一个GUI班级 他们的目的是不言自明的 但是 我显然需要让两个班级相互
  • 有哪些基于对象的 shell?

    我打算写一个面向对象的shell 基于Python 我已经有很多想法了 但在实现它之前 我想通过一些现有的 shell 来激发我的灵感 我所说的面向对象的基本意思是 参数不仅仅是字符串数组 而且是对象数组 返回值也是一个对象 不仅有 std
  • url 与 SameAs (schema.org)

    使用之间有什么实际区别url https schema org URL vs sameAs https schema org sameAsschema org 中的属性 我正在向包含数百万页面的大型互联网网站添加微数据信息 使用正确的标签非
  • 如果我们在实体类的getter和setter中添加逻辑是不是不好的设计

    JAVA 8 我有一个 POJO 类 class User private String name private String password Getters Setters 我将使用它作为实体类 在 getter setter 中pa
  • 如何在 django 模板中将名称反转为绝对 url?

    url url name 给出一个相对名称 我怎样才能做类似的事情 absolute url url name 这样它就会返回带基数的 url 包括端口 如果存在 有不同的解决方案 编写您自己的模板标签并使用 HttpRequest bui
  • 在Python中将字典转换为以键作为对象名称的对象

    我有一本这样的字典 d item1 Hi 150 495 item2 Hola 590 40 我想将其转换为对象 如果可能的话递归地 我有一堂课 class Item def init self thetuple self greeting
  • 如何在 Perl 中使用 use strict 一次一行处理多行字符串?

    我正在尝试找出 PBP 批准的正确方法来一次一行处理多行字符串 许多 Perl 编码人员建议将多行字符串视为文件句柄 除非您在脚本中使用 use strict 否则它可以正常工作 然后 您会收到编译器发出的警告 提示在使用严格引用时无法使用
  • 迭代哈希数组

    我编写了下面的例程 迭代哈希值 0 7 并打印出每个哈希值中特定键的值 我需要获取每个哈希中 b4 的值 我想取消 0 7 当存在不同数量的哈希值时使用更智能的东西 例如 有时只有 2 个 也可能有 160 个 my out decode
  • 我应该使用课程吗? (Python)

    我正在尝试编写一个包含一些数学函数的小型 Python 模块 例如 它可能包含如下函数 def quad x a b c return a x 2 b x c 您可能会注意到它包含几个参数 即a b c 除了变量x 现在 如果我将其放入文件
  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定
  • Perl 非贪婪

    我遇到非贪婪正则表达式 regex 的问题 我已经看到有关于非贪婪正则表达式的问题 但它们没有回答我的问题 Problem 我正在尝试匹配 lol 锚点的 href Note 我知道这可以通过 Perl HTML 解析模块来完成 我的问题是
  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • PHP 接口有属性吗?

    PHP 中的接口有属性 还是只有方法 您可以在 DocBlock 中为接口声明属性 然后 IDE 将提示接口的这些属性 PhpStorm 会这样做 但这不会强制在实现类中实际实现这些字段 例如 property string passwor

随机推荐