我创建了基本的lua脚本,除了参数并打印其值,使用redis-cli执行它没有错误,o / p打印在日志文件中。
$ cat test.lua
redis.replicate_commands()
local var = ARGV[1]
print ( 'var ', var)
$ redis-cli --eval test.lua , A
nil
$
我想使用perl脚本运行lua脚本:
$ cat eval.pl
#!/usr/bin/perl
use strict;
use warnings;
use Redis;
my $r = Redis->new(
server => '127.0.0.1:6379',
reconnect => 3,
every => 1.5 * 1000000,
conservative_reconnect => 1,
no_auto_connect_on_new => 1,
cnx_timeout => 15,
);
eval {
$r->connect;
};
if ($@) {
print '$@ : '.$@;
}
my $result = $r->eval( "test.lua", 0, 'A' );
print "result : $result\n";
$
但是我收到了错误:
[eval] ERR错误编译脚本(新函数):user_script:2:'='预计在'end'附近,位于/../lib/site_perl/5.8.7/Redis.pm第163行< /强>
我的redis版本是1.991
错误消息的描述性不足以进行调试
第163行的Redis.pm代码是
141 sub __with_reconnect {
142 my ($self, $cb) = @_;
143
144 ## Fast path, no reconnect
145 $self->{reconnect}
146 or return $cb->();
147
148 return &try(
149 $cb,
150 catch {
151 ref($_) eq 'Redis::X::Reconnect'
152 or die $_;
153
154 $self->{__inside_transaction} || $self->{__inside_watch}
155 and croak("reconnect disabled inside transaction or watch");
156
157 scalar @{$self->{queue} || []} && $self->{conservative_reconnect}
158 and croak("reconnect disabled while responses are pending and conservative reconnect mode enabled");
159
160 $self->connect;
161 $cb->();
162 }
163 );
164 }
我使用sub eval错误的方法吗?
答案 0 :(得分:6)
检查从Redis documentation链接的Redis,似乎eval
方法将脚本内容作为第一个参数,而不是文件名。
尝试
open my $SCRIPT, '<', 'test.lua' or die $!;
my $result = $r->eval( do { local $/; <$SCRIPT> }, 0, 'A' );