【发布时间】:2017-11-15 07:58:22
【问题描述】:
我已经创建了基本的 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
错误信息描述性不够,无法调试
Redis.pm 在第 163 行的代码是
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 的方式是否错误?
【问题讨论】:
-
Perl 5.8.7 来自十二年前。为什么要这样对自己?
-
@DaveCross, :( 是的,我知道,但我正在开发旧产品
-
使用 Lua 和 Redis?有趣的遗产。