Problem mit lokalen Variablen

´n abend,

ich bin dabei, Code von VBS nach CGI zu portieren, und nun habe ich ein Problem mit der Deklaration von lokalen Variablen.

In VBS haben die Variablen, die ich mit Dim innerhalb einer Sub oder Function deklariere, automatisch nur innerhalb dieser Routine Gültigkeit, und es gibt keine Konflikte zwischen gleichnamigen Variablen in unterschiedlichen Routinen oder im globalen Kontext.

Bei Perl scheint es anders zu sein. Wenn ich use strict; verwende, scheint das my nicht mehr in dieser Weise zu funktionieren. Die Deklaration bezieht sich offenbar immer auf das gesamte Skript, auch aus einer sub heraus.

SELFHTML hat nun eine Variante mit use vars($Variable); beschrieben, mit der es funktionieren soll, aber ich will ja nicht für jeden Variablenamen, den ich mehrmals lokal verwenden möchte, extra eine zusätzliche und nutzlose globale Variable einrichten!

Das local scheint (zumindest ohne use vars();) auch nicht so recht zu funktionieren, und es gefällt mir ohnehin nicht so recht, weil es dann keine wirklich lokale Variable mehr ist.

Gibt´s da irgendeine Abhilfe? Oder muß ich meine Variablen durchnumerieren, damit sie unterschiedliche Namen haben? Typisches Beispiel ist ja die Laufvariable i oder hier $i. Bei der würde z.B. die Verwendung von local überhaupt nicht funktionieren, wenn ich von einer Schleifen-Routine in eine andere springe.

Vielen Dank und viele Grüße,
Kristian

Hat sich erübrigt! - Tippfehler
Hallo,

das obige Problem hat sich erübrigt. Wäre auch zu blöd gewesen. Schuld war wieder mal ein Tippfehler:

#!/usr/bin/perl
 
use strict;
 
print chr(73) . ccc() . aaa() . 'doch' . bbb() . "!\n";
 
sub aaa
{
 my $var = reverse(' nib ');
 return($var);
}
 
sub bbb
**{**
 my $var = reverse('deolb ');
 return($var);
}
 
sub ccc
{
 my $var = reverse('hc');
 return($var);
}

Ich hatte einfach nur eine öffenende geschweifte Klammer bei einer sub vergessen … War im richtigen Code nicht so leicht zu entdecken wie in diesem Beispiel hier.

Kristian