我正在使用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.
为什么会这样? 如何防止这种情况?
答案 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}:/