2016-05-17 18 views
0

Ich habe ein Perl-Skript erstellt, das das Switch-Modul enthält.Perl PP enthält kein Switch-Modul

hello_world.pl

use strict; 
use warnings; 
use Switch; 
use Data::Dumper; 

my $var = "Hello World\n"; 
print Dumper($var); 

wenn ich perl hello_world.pl starten funktioniert alles einwandfrei. Aber wenn ich mit pp hello_world.pl mein Skript packen und als Start ./a.out es gibt mir wieder diesen Fehler:

 
Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: CODE(0x7fb2631e6a88) /var/folders/rb/2b5sbs355n57svwzjjh7cb9c0000gn/T/par-6967676c6f62616c33/cache-710e967842eb844ab8d6fe5f46968c1b6f49e019/inc/lib /var/folders/rb/2b5sbs355n57svwzjjh7cb9c0000gn/T/par-6967676c6f62616c33/cache-710e967842eb844ab8d6fe5f46968c1b6f49e019/inc CODE(0x7fb262988de0) CODE(0x7fb262989930)) at script/hello_world.pl line 3. 
BEGIN failed--compilation aborted at script/hello_world.pl line 3 

Antwort

2
$ corelist Switch 

Data for 2016-05-09 
Switch was first released with perl v5.7.3, deprecated (will be CPAN-only) in v5.11.0 and removed from v5.13.1 

Schalter war nie eine gute Idee. Es ist ein Quellfilter, was bedeutet, dass es ein cleverer Partytrick ist, aber nicht im Produktionscode verwendet werden sollte. Aus diesem Grund hat es mehrere Versionen von Perl entfernt.

Ich vermute, dass Sie Ihr gepacktes Programm auf einer neueren Version von Perl ausführen als die unverpackte Version - eine Version, die Switch nicht mehr enthält.

Sie können Ihr Zielsystem einschalten oder Sie können herausfinden, wie Sie pp erhalten, um das Modul in das Paket aufzunehmen. Die beste Lösung besteht jedoch darin, den Code neu zu schreiben, um die Verwendung von Switch zu beenden.

+0

ich das gleiche Problem 'verwenden, indem Sie mit YAML bekommen YAML' – Bizzy

0

Sie können versuchen, die Module zu zwingen, mit -M Option enthalten, werden:

pp -M Switch -M YAML ...