导入我写入Dancer应用程序的模块时,我收到了这个奇怪的错误.
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.
Run Code Online (Sandbox Code Playgroud)
我想这是因为在我的模块中我正在导入perl JSON模块.
一切似乎都表现不错,但我想知道这个错误/警告到底是什么?我似乎无法在网上找到任何关于它的信息.
mso*_*uth 14
出现这种情况的另一种情况是,您加载的其他模块定义了from_json/to_json.最近我打过几次的一个例子是Dancer.如果你有一个包
package Foo;
use Dancer qw/:syntax/;
use JSON;
1;
Run Code Online (Sandbox Code Playgroud)
您将收到该警告,因为(显然)舞者使用:syntax import将from_json和to_json放入您的命名空间.
在这种情况下的一个快速解决方案是只显式地从JSON导入:
package Foo;
use Dancer qw/:syntax/;
use JSON qw//;
1;
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中,您将需要使用完整的包名来获取JSON的subs,如下所示:
my $hash = JSON::from_json('{"bob":"sally"}');
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,你想要使用完整的软件包名称,这样就可以清楚你得到了哪些函数 - 有多个to_json/from_json声明,所以让我们非常清楚我们的意思.
如果你把下面的Foo.pm与"perl的Foo.pm"运行,使用和不使用qw//后use JSON,你可以看到它是如何工作的:
package Foo;
use Dancer qw/:syntax/;
use JSON qw//;
print Dumper( JSON::from_json('{"bob":"sally"}') ); use Data::Dumper;
1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8613 次 |
| 最近记录: |