ERR 编译脚本时出错(新函数):user_script:2: '=' 附近需要 'end',.../lib/site_perl/5.8.7/Redis.pm 第 163 行

我创建了一个基本的 lua 脚本,接受一个参数并打印其值,使用 redis-cli,它没有出错并且在日志文件中打印出结果。

$ 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 的方式不正确吗?

点赞
用户1030675
用户1030675

Redis链接的Redis文档中,似乎eval方法将脚本内容作为第一个参数,而不是文件名。

尝试

open my $SCRIPT, '<', 'test.lua' or die $!;
my $result = $r->eval( do { local $/; <$SCRIPT> }, 0, 'A' );
2017-06-13 13:47:21