TomC: Skalar in einem eingebundenen Skrit ändern

Hat jemand eine Idee, warum folgendes Vorhaben scheitert?

Ich habe ein Hauptskript:
##########################
#!C:/Programme/Apache Group/Apache2/Perl/bin/perl.exe -w
###!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my $skalar = "Anfangswert";

require "skalaraendern.pl";

[...]

print $skalar;

[...]
###########################

Und das eigebundene Skript skalaraendern.pl:

##########################
$skalar = "Neuer Wert";
1;
##########################

Das Hauptskript liefert als Wert für $skalar immer "Anfangswert".
Was mache ich falsch?

Gruß von TomC

  1. Hallo!
    Vielleicht mal "my $skalar" in "local $skalar" ändern?

  2. Hat jemand eine Idee, warum folgendes Vorhaben scheitert?

    Ich habe ein Hauptskript:
    ##########################
    #!C:/Programme/Apache Group/Apache2/Perl/bin/perl.exe -w
    ###!/usr/bin/perl -w

    use strict;
    use CGI::Carp qw(fatalsToBrowser);

    my $skalar = "Anfangswert";

    our $skalar = "Anfangswert";

    Struppi.

    1. our $skalar = "Anfangswert";

      Struppi.

      Danke, funktioniert wunderbar!
      Aber warum?

      Gruß von TomC

      1. Hi

        our $skalar = "Anfangswert";

        Struppi.

        Danke, funktioniert wunderbar!
        Aber warum?

        Weil 'our' eine globale Variable einleitet, my eine, die nur in der aktuellen Datei, Namensbereich usw. (was vom Prinzip das gleiche ist)funktioniert. Siehe 'perldoc -f our', 'perldoc -f my'.
        Ausserdem, kannst du dieses Skalaraendern.pl nicht in eine sub schreiben? Etwa so:

        sub skalaraendern
        {
        my $skalar = "foo bar test";
        return $skalar;
        }

        Diese Subroutine wird in so aufgerufen:
        my $skalar = skalaraendern();

        mfg Andres Freund