【问题标题】:ERR Error compiling script (new function): user_script:2: '=' expected near 'end' , .../lib/site_perl/5.8.7/Redis.pm line 163ERR 编译脚本时出错(新函数):user_script:2: '=' 预期在 'end' 附近,.../lib/site_perl/5.8.7/Redis.pm 第 163 行
【发布时间】: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?有趣的遗产。

标签: perl lua redis


【解决方案1】:

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

试试

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2017-07-14
    • 2014-06-03
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多