muenzchen: explicit package name?

Hallo!

Ich habe mal ein eher längeres Perlscript mit "user strict" durchlaufen lassen und habe eine ellenlange Liste von Fehlern bekommen. Diese Fehler waren aber für jede Variable die gleichen nämlich

Global symbol "$k" requires explicit package name at...

was ist dieser explicit package name ?

Vielen Dank schon einmal für eure Hilfe!

  1. Hi!

    Global symbol "$k" requires explicit package name at...
    was ist dieser explicit package name ?

    Ich glaube, das willst Du nicht wirklich wissen. ;-) Viel wichtiger duerfte fuer Dich sein, dass Du alle Variablen mit
      my $k;
    oder
      my ($i, $j);
    deklarieren musst, bevor Du sie verwenden kannst. Genau dazu ist ja use strict da.

    So long

    1. doch sicher will ich wissen was ein explicit package name ist !

      *gier*

      nein, wirklich. das mein ich ernst. isses so schlimm?

      1. hi!

        doch sicher will ich wissen was ein explicit package name ist !

        Siehe perldoc perldiag[1]:

        === cut ===
            Global symbol """"%s"""" requires explicit package name
                (F) You've said "use strict vars", which indicates
                that all variables must either be lexically scoped
                (using "my"), or explicitly qualified to say which
                package the global variable is in (using "::").
        === cut ===

        "Lexical scope" ist der lexikalische Gültigkeitsbereich, d.h. der
        Block bzw. Bereich in deinem Programm, in dem eine bestimmte Variable
        gültig ist. Wird eine Variable nicht -- zb. mit my -- für einen
        bestimmten Gültigkeitsbereich deklariert, wäre dieser Bereich global,
        was bei der Verwendung von "use strict;" nicht erlaubt ist.

        bye, Frank!

        [1] notfalls unter http://www.perldoc.com/

        1. .............................................................:)

        2. Hallo,

          "Lexical scope" ist der lexikalische Gültigkeitsbereich, d.h. der
          Block bzw. Bereich in deinem Programm, in dem eine bestimmte Variable
          gültig ist. Wird eine Variable nicht -- zb. mit my -- für einen
          bestimmten Gültigkeitsbereich deklariert, wäre dieser Bereich global,
          was bei der Verwendung von "use strict;" nicht erlaubt ist.

          Es würde, um der Vollständigkeit Ehre angedeien zu lassen, auch funktionieren, wenn Du Variablen mit (z.B.) $package::variablenname ansprechen würdest, ohne diese mit  my einzuführen. So würde

          #!/usr/bin/perl -w
          use strict;
          $main::abc = 1;
          print $main::abc;

          keinen Fehler verursachen.

          Variablen ständig so zu notieren wäre dann doch etwas mühselig, aber genau das ist es, was die Fehlermeldung bezüglich 'expicit package name' eigentlich aussagt.

          Grüße
            Klaus