Siechfred: Gültigkeitsbereich von Variablen

Beitrag lesen

in dem nachfolgenden Programm1 ist in der Unterroutine die Variable "fehlerausgabe" vorhanden und korrekt. [...] Wenn ich die Routine wie im Programm2 auslagere, so ist die Variable "fehlerausgabe" nicht vorhanden., warum?

Du meinst die Subroutine. Wenn du eine Sub ansprechen willst, die nicht zum Namensraum des aufrufenden Scriptes gehört, musst du den Namensraum nennen:

use Foo;  
Foo::bar('baz');

fehlerausgabe.pm

sub fehlerausgabe {
#    print "$sprache=$sprache *";
#    exit ($_[2]);
#   }

  
Und so wird das nix. Du deklarierst $sprache im Hauptskript, damit ist diese Variable in fehlerausgabe.pm nicht existent, wenn du sie nicht explizit übergibst. Zudem musst du deinem Package einen Namen geben, um Zugriff auf die Subroutinen dieses Paketes zu erhalten:  
  
~~~perl
package Fehlerausgabe;  
use strict;  
  
sub Ausgabe {  
  print shift;  
}  
  
1;

Im Einsatz:

use strict;  
use Fehlerausgabe;  
  
my $var = 'foo';  
Fehlerausgabe::Ausgabe($var);

Es gibt noch solche schönen Sachen wie den Exporter, Beispiele gibt's in SELFHTML. Ansonsten gäbe es da auch noch do.

Siechfred

--
Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.