出现这种情况的另一种情况是,当您加载的其他模块定义了 from_json/to_json 时。我最近多次提到的一个例子是 Dancer。如果你有一个包
package Foo;
use Dancer qw/:syntax/;
use JSON;
1;
您将收到该警告,因为(显然)具有 :syntax 导入的 Dancer 将 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//
后use JSON
,您都可以看到它是如何工作的:
package Foo;
use Dancer qw/:syntax/;
use JSON qw//;
print Dumper( JSON::from_json('{"bob":"sally"}') ); use Data::Dumper;
1;