URI-> new(“longThan248Chars:// bla”)抛出“(eval 1)第1行的标识符太长”

时间:2013-03-05 18:47:41

标签: perl uri runtime-error

我正在使用Perl规范化URL(v.5.12)并且我注意到Perl程序开始崩溃,消息“标识符太长(第1行)第1行”。通过实验,我发现当URL的scheme部分超过248个符号时,URI构造函数会抛出错误:

$ perl -e 'use URI; my $uri = URI->new("a" x 248 . "://bla");'
Identifier too long at (eval 1) line 1.

为什么会这样? 如何防止这种情况?

1 个答案:

答案 0 :(得分:4)

URI正在寻找名为

的模块
URI::aaaaaaaaaa

做什么归结为

eval "require URI::aaaaaaaaaa;"

Perl认为你疯了。

>perl -e"eval 'require '.('a' x 500); die $@;"
Identifier too long at (eval 1) line 1.

最佳解决方案是submit a patch给作者添加

return if length($scheme) > 200;

implementor


同时,您可以使用

捕获错误
my $uri = eval { URI->new( ... ) };

或者您可以预先检查该条件:

$uri_string =~ /^${URI::scheme_re}:/