原型不匹配错误(perl)

导入我写入我的舞者应用程序的模块时,我得到这个奇怪的错误.
Prototype mismatch: sub main::from_json: none vs ($@) at mymodule.pm line 6.
Prototype mismatch: sub main::to_json: none vs ($@) at mymodule.pm line 6.

我猜这是因为在我的模块我正在导入perl JSON模块.

一切似乎都表现不错,但我想知道这个错误/警告是什么?我似乎没有在网上找到任何东西.

解决方法

另外出现这种情况的是当你加载的其他模块定义了一个from_json / to_json.最近几次碰到的例子就是舞者.如果你有一个包
package Foo;

use Dancer qw/:Syntax/;
use JSON;

1;

你会得到那个警告,因为(显然)Dancer带有:Syntax import将一个from_json和to_json放入你的命名空间.

在这种情况下的一个快速解决方案是只是从JSON中明确导入:

package Foo;

use Dancer qw/:Syntax/;
use JSON qw//;

1;

然后在你的代码中,你将需要使用完整的包名来获取JSON的subs,如下所示:

my $hash = JSON::from_json('{"bob":"sally"}');

在这种情况下,您可以使用完整的软件包名称,这样就可以清楚你所获得的功能 – 有多个to_json / from_json的声明,所以我们来清楚一下我们的意思.

如果将以下内容放在Foo.pm中,并运行“perl Foo.pm”,使用和不使用qw //后使用JSON,您可以看到它的工作原理:

package Foo;

use Dancer qw/:Syntax/;
use JSON qw//;

print Dumper( JSON::from_json('{"bob":"sally"}') ); use Data::Dumper;

1;

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...