我在Ubuntu 15.04上安装了libsql-translator-perl并使用
运行它sqlt -f SQLite -t MySql /tmp/test.sql /tmp/out.sql
test.sql仅包含:
CREATE TABLE X (id INTEGER);
失败了
Use of uninitialized value $name in pattern match (m//) at /usr/share/perl5/SQL/Translator.pm line 610.
我查看了这个文件,它包含
sub load {
my $name = shift;
my @path;
push @path, "" if $name =~ /::/; # error here
调用堆栈显示已使用
调用它SQL::Translator::load(undef, 'SQL::Translator::Producer')
从这里
sub _load_sub {
my ($tool, @path) = @_;
my (undef,$module,$func_name) = $tool =~ m/((.*)::)?(\w+)$/;
if ( my $module = load($module => @path) ) { # <<<<<<<
my $sub = "$module\::$func_name";
return wantarray ? ( \&{ $sub }, $sub ) : \&$sub;
}
return undef;
}
我不知道Perl可以进一步取消这个。有谁知道可能会发生什么?感谢。
答案 0 :(得分:2)
错误消息告诉您$name
未定义;它设置为第一个参数,即$module
中_load_sub
的值,设置为m/((.*)::)?(\w+)$/
中第二个捕获的匹配:$tool
之前的值::
第一次出现::
,如果出现$tool
,则不确定。
因此::
不包含字符串?
;匹配模式解释了这一点(通过包含load
元字符),但perl -d
中的代码并不存在。看起来像代码中的错误。 The documentation列出了几种报告方式或验证是否已报告或修复此方法。
您可以通过 public void doSomething (List<int> myPassedList)
{
List<int> list = myPassedList.GetRange(0, myPassedList.Count);
}
运行Perl代码来调试它 - 请参阅its manual。
答案 1 :(得分:0)
MySQL的SQL :: Translator解析器被称为&#34; MySQL&#34;,而不是&#34; MySql&#34;。
sqlt -f SQLite -t MySQL /tmp/test.sql /tmp/out.sql
运行sqlt -l
将为您提供可用解析器的完整列表。
但我当然同意错误信息可能更好。值得针对此提出一个错误。