Adi K.: use strict und trotzdem globale Variablen?!

Hallo,

Ich habe zwar im Forum gesucht, die Resultate entsprachen jedoch nicht meinen Anforderungen...

Wie kann man mit dem strict-pragma globale Variablen definieren?

Ich programmiere gerade ein CMS, welches aus verschiedenen CGIs besteht (main, blog, gb, ...). Beim beginn soll ein anderes programm gestartet werden (global.pl), welches funktionen und variablen bereit stellt, die jedes CGI benützt (datenbank-handle, konfigurations-hash). auf diese funktionen und variablen greifen sowohl global.pl, als auch die anderen CGIs zu. also sollten diese global sein.
muss ich global.pl nun mit "use" und dem ganzen exporter-zeugs einbinden, oder geht das weiterhin mit "require"?
use vars, ist ja veraltet...

Vielen Dank und Grüsse
Adi K.

  1. Wie kann man mit dem strict-pragma globale Variablen definieren?

    Du meinst Modulübergreifend. Mit our

    Ich programmiere gerade ein CMS, welches aus verschiedenen CGIs besteht

    Du meinst Module, "CGIs" gibt es nicht, CGI ist lediglich die Bezeichnung für die Art und Weise wie eine Kommunikation zwischen Server und Anwendung stattfindet.

    use vars, ist ja veraltet...

    Da wo du das her hast, müßte auch das mit our stehen.

    Allerdings ist die Lösung mit our nicht unbedingt praktisch. Ich bevorzuge oft das "export zeugs" oder du nimmst richtige globale Variabeln, in dem du das Package immer dazu schreibst, z.b. $main::variabel.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Du meinst Module, "CGIs" gibt es nicht, CGI ist lediglich die
      Bezeichnung für die Art und Weise wie eine Kommunikation zwischen
      Server und Anwendung stattfindet.

      Ja, das weiss ich eigentlich schon, aber ich habe CGI geschrieben, dass es klar ist, dass es kein .pm ist...

      Allerdings ist die Lösung mit our nicht unbedingt praktisch.

      Weshalb?

      Ich bevorzuge oft das "export zeugs"

      Hmm... Vielleicht ist das wirklich das beste...

      oder du nimmst richtige globale Variabeln, in dem du das Package

      Das habe ich gestern Abend verzweifelt versucht. Schau, ich habe es folgendermassen probiert:

      test.pl:

      use strict;  
      require 'test2.pl';  
      assign();  
      print 'shit' if not defined $test3::dbh;
      

      test2.pl:

      use strict;  
      our $dbh;  
      sub assign {  
       $dbh = 'Connected!';  
      }  
      1;
      

      naja, leider kommt immer "shit"...

      1. Hallo

        Das habe ich gestern Abend verzweifelt versucht. Schau, ich habe es folgendermassen probiert:

        test.pl:

        use strict;

        require 'test2.pl';
        assign();
        print 'shit' if not defined $test3::dbh;

        
        >   
        > test2.pl:  
        > ~~~perl
        
        use strict;  
        
        > our $dbh;  
        > sub assign {  
        >  $dbh = 'Connected!';  
        > }  
        > 1;
        
        

        naja, leider kommt immer "shit"...

        Kann ja nur "shit" kommen weil es keinen Namensraum test3 gibt, auch bei $test2::dbh würde "shit" kommen. Denn auch dieser Namensraum existiert nicht. Weil du mit $dbh mit our als globale Variable festgelegt hast kannst du sie mit $main::dbh ansprechen.

        mfg

        1. Kann ja nur "shit" kommen weil es keinen Namensraum test3 gibt, auch bei $test2::dbh würde "shit" kommen. Denn auch dieser Namensraum existiert nicht. Weil du mit $dbh mit our als globale Variable festgelegt hast kannst du sie mit $main::dbh ansprechen.

          mfg

          Vielen Dank! Darauf wäre ich leider nicht gekommen... Ich dachte eben $main::var ist synonym für $::var _und_ $var ...

          Grüsse
          Adi K.

          PS: habe noch einen tippfehler von mir gefunden:~~~perl

          print 'shit' if not defined $test3::dbh;     # sollte heissen:
          print 'shit' if not defined $test2::dbh;