ERR错误编译脚本(新函数):user_script:2:'='预计在'end'附近,... / lib / site_perl / 5.8.7 / Redis.pm第163行

时间:2017-06-13 13:37:30

标签: perl lua redis

我创建了基本的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错误的方法吗?

1 个答案:

答案 0 :(得分:6)

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

尝试

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