我想使用 Perl 模块并将其包装到一个独立的套接字中,该套接字会将子例程从模块发布到其他程序。但是,我可能无法克服命名空间问题,因为在客户端脚本中,我仍然收到一条错误消息: RPC::Serialized::X::Application\',\'MESSAGE\' => \'No handler for 'predejPOS ' .
我的服务器脚本:
use RPC::Serialized::Server::NetServer::Single;
use RPC::Serialized::Handler::HashTree;
my $s = RPC::Serialized::Server::NetServer::Single->new({
net_server => {log_file => '', port => 20203 },
rpc_serialized => {handler_namespaces => ''},
});
$s->run;
我的客户端脚本:
use RPC::Serialized::Client::INET;
my $client = RPC::Serialized::Client::INET->new({
io_socket_inet => {PeerAddr => '127.0.0.1', PeerPort => 20203,}
});
my $result = $client->predejPOS('flu-like');
我的模块(HastTree.pm):
package RPC::Serialized::Handler::HashTree;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(predejPOS);
use base 'RPC::Serialized::Handler';
our $VERSION = '0.01';
sub predejPOS {
my %POS;
$POS{'flu-like'}='<JJ>';
return $POS{$_[0]};
};
1;
我使用的是 Windows 7,Strawberry Perl 5.12.3,并且模块位于正确的地址 (C:\PROGS\Strawberry\perl\site\lib\RPC\Serialized\Handler)。函数 predejPOS 在服务器脚本中被识别(即我可以从中打印它的结果),但我无法通过客户端-服务器通信访问它。我认为这与调用函数和调用方法之间的细微差别有关。恐怕这可能很简单,但即使经过大量的努力和谷歌搜索,我也无法让它发挥作用。
提前致谢!