Eine andere Situation, in der dies auftritt, ist, wenn ein anderes Modul, das Sie geladen haben definiert eine von_json/to_json. Ein Beispiel, das ich kürzlich ein paar Mal getroffen habe, ist Dancer. Wenn Sie ein Paket mit
package Foo;
use Dancer qw/:syntax/;
use JSON;
1;
haben Sie diese Warnung erhalten, weil sie (scheinbar) Tänzer mit: Syntax Import eine from_json und to_json in Ihren Namensraum setzt.
Eine schnelle Lösung in dieser Situation ist nur explizit nichts von JSON importieren:
package Foo;
use Dancer qw/:syntax/;
use JSON qw//;
1;
Dann in Ihrem Code Sie die vollständigen Paketnamen verwenden, müssen JSON der U-Boote zu bekommen, wie folgt aus:
my $hash = JSON::from_json('{"bob":"sally"}');
In einer Situation wie dieser, aber Sie wollen die volle Paketnamen verwenden so klar es ist, die Sie funktionieren, wenn es darum - es gibt mehrere Erklärungen von to_json/from_json, also lassen Sie uns ganz klar sein, welches wir bedeuten.
Wenn Sie die folgenden in Foo.pm und laufen mit „perl Foo.pm“ setzen, mit und ohne die qw//
nach dem use JSON
, können Sie sehen, wie es funktioniert:
package Foo;
use Dancer qw/:syntax/;
use JSON qw//;
print Dumper(JSON::from_json('{"bob":"sally"}')); use Data::Dumper;
1;
Sie tun, indem "das JSON-Modul importieren" bedeutet "pre-Deklarieren der Subroutinen from_json und to_json"? Mit etwas wie 'sub from_json;'? – TLP
nein Ich meine ich benutze die Kopfzeile "JSON verwenden;" in meinem Modul, die eine Datei namens mymodule.pm (mit einem Paket mit dem gleichen Namen) ist. Dann importiere ich diese Moduldatei von meiner Anwendungsdatei mit "use mymodule;". – pepper
Ich verstehe nicht wirklich, warum diese Frage abgelehnt wurde. Scheint mir vollkommen vernünftig. – pepper