5 Stimmen

Perl : Konstante & erfordern

Ich habe eine Konfigurationsdatei (config.pl) mit meinen Konstanten:

#!/usr/bin/perl
use strict;
use warnings;
use Net::Domain qw(hostname hostfqdn hostdomain domainname);

use constant URL => "http://".domainname()."/";
use constant CGIBIN => URL."cgi-bin/";
use constant CSS => URL."html/css/";
use constant RESSOURCES => URL."html/ressources/";
...

Und ich würde diese Konstanten gerne in index.pl verwenden, also beginnt index.pl mit :

#!/usr/bin/perl -w
use strict;
use CGI;
require "config.pl";

Wie verwendet man URL, CGI... in index.pl?
Danke,
Tschüss


EDITAR
Ich habe eine Lösung gefunden:
config.pm

#!/usr/bin/perl
package Config;
use strict;
use warnings;
use Net::Domain qw(hostname hostfqdn hostdomain domainname);

use constant URL => "http://".domainname()."/";
use constant CGIBIN => URL."cgi-bin/";
1;

index.pl

BEGIN {
    require "config.pm";
}
print Config::URL;

Ende

3voto

Eric Strom Punkte 39363

Was Sie hier tun wollen, ist ein Perl-Modul einzurichten, aus dem Sie exportieren können.

Fügen Sie Folgendes in "MyConfig.pm" ein:

#!/usr/bin/perl
package MyConfig;
use strict;
use warnings;
use Net::Domain qw(hostname hostfqdn hostdomain domainname);

use constant URL => "http://".domainname()."/";
use constant CGIBIN => URL."cgi-bin/";
use constant CSS => URL."html/css/";
use constant RESSOURCES => URL."html/ressources/";

require Exporter;
our @ISA = 'Exporter';
our @EXPORT = qw(hostname hostfqdn hostdomain domainname URL CGIBIN CSS RESSOURCES);

Und sie dann zu benutzen:

use MyConfig;  # which means BEGIN {require 'MyConfig.pm'; MyConfig->import} 

Durch die Einstellung @ISA a Exporter im MyConfig Paket zu erstellen, richten Sie das Paket so ein, dass es erbt von Exporter . Exporter bietet die import Methode, die implizit von der use MyConfig; Linie. Die Variable @EXPORT enthält die Liste der Namen, die Exporter standardmäßig importieren sollte. Es gibt viele andere Optionen in der Dokumentation von Perl und in der Dokumentation für Ausführer

2voto

yibe Punkte 3789
BEGIN {
    require "config.pl";
}
print URL;

o

require "config.pl";
print URL();

2voto

Axeman Punkte 29362
BEGIN { require "config.pl"; }

Und Sie müssen am Ende der erforderlichen Quelle einen true-Wert zurückgeben. Normalerweise:

1; 

Obwohl ich das bei bestimmten Modulen getan habe:

print "My::Mod included...\n";

als letzte Anweisung in der Datei. Und print gibt immer dann ein true zurück, wenn ein einzelnes Zeichen gedruckt wird.

Véase require .


Fehlersuche

  • Es könnte sich um ein Verzeichnisproblem handeln. Die .pl Datei muss sich in @INC oder durch einen Pfad zur Datei geändert.

Versuchen Sie dies:

perl -Mconfig.pl -e 1

Wenn er fehlschlägt, sehen Sie sich die Fehlermeldung an. Auf jeden Fall sollten Sie mit Strict und Warnungen mehr erhalten als mit "Oops, it failed".

0voto

Dancrumb Punkte 24965

Sie können keine bloßen Wörter verwenden, wenn Sie use strict .

Ein Bareword ist im Wesentlichen ein Variablenname, ohne Sigel ( $,@,%,&,* ).

Ich schlage vor, einen Blick auf die Readonly Modul auf CPAN zum Erstellen von Konstanten.

En use constant pragma hat einen Haufen geheimnisvoller Magie am Laufen, die zu schwer zu debuggenden Code führen kann, wenn man nicht vorsichtig ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X