基于Reverse DNS lookup in perl我试图在NGINX中创建一个变量,所以我可以使用它来识别搜索引擎,但我有很多这样的错误:
2016/06/16 21:10:33 [错误] 25853#0:* 519 call_sv(“sub {return scalar gethostbyaddr(inet_aton($ remote_addr),AF_INET); })失败: “Undefined subroutine& main :: inet_aton在(eval 3)第1行调用。”
添加到我的http块中:
perl_require Socket.pm;
perl_set $test_rdns "sub { return scalar gethostbyaddr(inet_aton($remote_addr), AF_INET); }";
请帮忙,我找不到解决这个问题的关键。
答案 0 :(得分:0)
我不确切知道perl_require
到底是做什么的,但我认为它与Perl的require
函数有关,而且当你使用require
时需要警惕的是它不会调用包的import
方法,也不会将默认的导出函数和符号加载到调用包中。
结果是您必须在Perl调用中使用合格的符号名称
perl_set $test_rdns "sub { return scalar gethostbyaddr(Socket::inet_aton($remote_addr), \
Socket::AF_INET); }";
或者您必须致电Socket
的{{1}}方法
import
(第二个建议没有经过测试,根据nginx对perl的库目录和搜索路径的影响,可能无效)