0

Perl (v. 5.12) を使用して URL を正規化していますが、Perl プログラムが「(eval 1) 行 1 の識別子が長すぎます」というメッセージでクラッシュし始めたことに気付きました。URI実験を通じて、URL のスキーム部分が 248 シンボルを超えると、コンストラクターがエラーをスローすることがわかりました。

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

なぜこうなった?これを防ぐ方法は?

4

1 に答える 1

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.

最善の解決策は、作成者にパッチを提出して追加することです。

return if length($scheme) > 200;

implementor


それまでの間、次のいずれかを使用してエラーをキャッチできます

my $uri = eval { URI->new( ... ) };

または、その状態を事前に確認できます。

$uri_string =~ /^${URI::scheme_re}:/
于 2013-03-05T19:06:10.160 に答える