我应该如何使用Perl URI类?
我需要在Perl程序中处理一些HTTP URL,但我怀疑该类应该如何帮助我 特别是,我希望使用我应该如何使用Perl URI类?,perl,oop,url,Perl,Oop,Url,我需要在Perl程序中处理一些HTTP URL,但我怀疑该类应该如何帮助我 特别是,我希望使用URI类来解析相对URL并获取它们的组件。然而,问题是: 我需要一个函数来处理URI对象和URI字符串作为参数(或者确保只传递一个) 这是正确的方法吗?我不太喜欢它,因为它将URI字符串化,并不必要地创建新对象 提取成分 my $host = $uri->host; 这也是有问题的,因为并非所有的URI都有主机,特别是如果有人将垃圾传递给函数,这将die() 解析相对URL my $new_ur
URI
类来解析相对URL并获取它们的组件。然而,问题是:
URI
对象和URI字符串作为参数(或者确保只传递一个)
这是正确的方法吗?我不太喜欢它,因为它将URI
字符串化,并不必要地创建新对象my $host = $uri->host;
这也是有问题的,因为并非所有的URI
都有主机,特别是如果有人将垃圾传递给函数,这将die()
my $new_url = URI::URL->new($uri, $base)->abs;
IIUC,如果没有->abs
,结果仍然会字符串化到相对URL(并且对HTTP::Request
s不起作用),对吗?此外,是否保证返回URI
- 始终使用isa('URI')和can(“主机”)
- 对我来说,似乎容易出错而且丑陋
- 根本不要使用
类,而是使用正则表达式解析urlURI
- 我仍然宁愿使用库解决方案,也不愿调试自己的解决方案
- 在
try{…}catch{…}
- 看到第一点了吗
使用
URI
类是否有一种明智、简单的方法?一些我没有想到的简单问题(在上面的列表中)?我想你的问题可以概括为:参数验证很乏味,我该怎么办
use Try::Tiny;
my $host;
try {
$host = $uri->host;
} catch {
warn "Could not determine host for $uri. Message was: $_. Retry/abort/ignore?\n";
…
};
唯一没有回答的问题是“我应该如何处理这些问题?”,答案是“始终呼叫abs”。如果您已经有了一个绝对URI,那么它不会做任何事情。
use Try::Tiny;
my $host;
try {
$host = $uri->host;
} catch {
warn "Could not determine host for $uri. Message was: $_. Retry/abort/ignore?\n";
…
};