Argument in sub kriegen

Hallo Leute!

Ich habe hier eine kleine sub, wo ich den Fehler kriege, „$name“ würde nicht initialisiert verwendet, das aber erst in der dritten Zeile, das in der zweiten geht noch (??).

sub makeH
{
 my $name = $\_[0];
 my $fiUpper = join (uc($name), "\_H\n"); # hier kein Fehler
 my $content = "// $name.h\n". # ERROR: $name nicht init. - jetzt auf einmal?
 "#ifndef $fiUpper".
 "#define $fiUpper".
 "".
 "#endif // $fiUpper"
 ;
 # globale Vars, sind init:
 my $saveTo = join('/', $path, $project, $name, ".h");
 makeFile ($saveTo, $content);
}

Ich habe die Init von „$name“ dann auch so probiert,

my $name = scalar @\_;
# oder
my $name = shift @\_;

aber bringt nichts.

Ich habe dann „$name“ durch „$fiUpper“ ersetzt, dann ging es seltsamer Weise. Das ist nun aber keine Lösung. Was kann ich da machen?

lG
Martin B

Hallo,

Ich habe hier eine kleine sub, wo ich den Fehler kriege,
„$name“ würde nicht initialisiert verwendet, das aber erst in
der dritten Zeile, das in der zweiten geht noch (??).

Das kann ich nicht nachvollziehen. Wenn ich die ersten paar Zeilen ausführe und Warnungen aktivieren bekomme ich keine.

Kannst du uns bitte ein kleines, lauffähiges Script geben, das tatsächlich die Warnungen produziert, die du meinst?

Grüße,
Moritz

Hallo Moritz

Kannst du uns bitte ein kleines, lauffähiges Script geben, das
tatsächlich die Warnungen produziert, die du meinst?

Hier bitte:
http://members.aon.at/amando1957/perl/makeCpp.pl.html

In der „sub makeH“.

lG
Martin B

Hallo,

Hier bitte:
http://members.aon.at/amando1957/perl/makeCpp.pl.html

Ich sehe nicht, wo im Haupprogramm $name seinen Wert herbekommen soll, also ist es wohl undef.

Wenn du ‚use strict;‘ benutzt (und es nicht auskommentierst) und deine Variablen deklarierst, dann sind solche Fehler noch einfacher zu finden.

Aus mir unerklärlichen Gründen scheint uc(undef) keine Warnung auszugeben.

Grüße,
Moritz

Grüße,
Moritz

1 Like

Hallo Moritz

Ich sehe nicht, wo im Haupprogramm $name seinen Wert
herbekommen soll, also ist es wohl undef.

Umpff, der Fehler ist gar nicht in der „makeH“, der ist schon weiter oben.
Hier wird die „makeH“ aufgerufen und der Wert übergeben (dachte ich), aber $name wird ja hier schon nicht initialisiert oder deklariert:

foreach (@files)
{
 makeH($name); 
}

Richtig wäre das wohl so:

foreach (@files)
{
 makeH($\_); # $\_ = the each filename
}

(Neufassung hochgeladen)

Das waere schon etwas. Die beschriebenen Warnungen sind jetzt weg, ich kriege statt dessen die Warnung aus der „makeFile“, kann die Datei nicht öffnen, nur mit dem Pfad von „$path“, ohne etwas angehaengt.

Wenn du ‚use strict;‘ benutzt (und es nicht auskommentierst)

…kriege ich gleich für jede Var

requires explicit package name

Verstehe ich erst recht nicht. Ein use Any::stuck_out_tongue:ackage ist ja nur ein Thema, wenn auch etwas daraus benutzt wird.

lG
Martin B

http://members.aon.at/amando1957/perl/makecpp.pl.html

Hallo,

Richtig wäre das wohl so:

foreach (@files)
{
makeH($_); # $_ = the each filename
}

Oder

for my $name (@files) {
 makeH($name);
}

Wenn du ‚use strict;‘ benutzt (und es nicht auskommentierst)

…kriege ich gleich für jede Var

requires explicit package name

Verstehe ich erst recht nicht.

Das bedeutet so viel „Die Variable musst du deklarieren“, also mit ‚my $variable;‘.

Wenn du die Variablen deklarierst und ‚use strict‘ benutzt, dann beschwert sich der Compiler über den Fehler, den du vorhin begangen hast.

http://members.aon.at/amando1957/perl/makecpp.pl.html

404 not found.

Grüße,
Moritz

1 Like

Wenn du ‚use strict;‘ benutzt (und es nicht auskommentierst)

…kriege ich gleich für jede Var

requires explicit package name

Verstehe ich erst recht nicht. Ein use Any::stuck_out_tongue:ackage ist ja nur
ein Thema, wenn auch etwas daraus benutzt wird.

bitte zu „use strict“ unbedingt das hier lesen:

http://wiki.perl-community.de/bin/view/Wissensbasis/…

Das sollte deine Fragen dazu beantworten.
Jedenfalls nützt strict gar nichts, wenn man es ins Script
schreibt, aber ein Kommentarzeichen davorsetzt.
Je früher du lernst, strict-kompatibel zu programmieren, desto besser.

1 Like

.-…euch beiden, ich werde mich gleich mal rein hängen, :smile:

lG
Martin B