Can't find Unicode property definition "=" at ./hoge.pl line 92, <> line 4016.
と言われた。
if (m{^http://w+\.google\..+?/\w+?\?.*?\b(?:as_)?(?:ep)?q=([^&]+)}) {
には "=" が含まれている。
でも、これをコマンドラインからワンライナーで実行しても何もエラーが出ない。
CPAN のドキュメントでは、正規表現中で "\p" を使おうとしているはずだから、それをエスケープしろとか言っている。
http://search.cpan.org/%7Ergarcia/perl-5.9.3/pod/perldiag.pod#Can%27t_find_Unicode_property_definition_%22%s%22
でも "\p" なんてこの正規表現の中にはないし……
……実は 92 行目じゃなくて、その下の方(98 行目でした)にある
} elsif (m{^http://search.yahoo\..+?/search\?\p=([^&]+)}) {
という正規表現が問題だった。これは誤りで、正しくは以下:
} elsif (m{^http://search.yahoo\..+?/search\?p=([^&]+)}) {
この "\p" が悪さをしていたというわけ。
教訓は……
- if-elsif-else の条件文中にエラーがある場合、どの行にエラーがあっても、報告される行は "if" の行だったりすることがあるらしい。
- "Can't find Unicode property definition XXXX at ..." というエラーが出た場合、どの行で報告されているかは関係なしに "\p" で検索をかけろ。