Funktionsparameter
Bernhard Peissl
- perl
Hi PERL-Profis !
Ich hab mich grad wiedermal dumm und deppert geärgert: Folgendes Problem:
Ich rufe eine Funktion mit mehreren Parametern auf, und möchte die Anzahl der übergebenen Parameter abfragen mit:
// $laenge = @_;
Jetzt habe ich zwei Funktionen, deren Parameter-Anzahl ich mit diesem Statement abfrage. Und ich habe gemerkt, dass wenn ich $laenge my() definiere, die Funktion nicht abgearbeitet wird, wenn ich das my() hingegen weglasse, dann klappts!
Woran kann das liegen, ist mir nämlich schleierhaft!
liebe Grüsse
Bernhard
Hi,
Jetzt habe ich zwei Funktionen, deren Parameter-Anzahl ich mit diesem Statement abfrage. Und ich habe gemerkt, dass wenn ich $laenge my() definiere, die Funktion nicht abgearbeitet wird, wenn ich das my() hingegen weglasse, dann klappts!
dazu wäre ein Stück des Codes ganz praktisch, sowie ggf. die Ausgabe von perl -w und use strict.
Cheatah
Hi Cheatah!
Von dir hab ich bisher immer was gelernt :-)
Also mal sehen was heute daraus wird, aber ich bin recht zuversichtlich ;-)
dazu wäre ein Stück des Codes ganz praktisch,
Den sollsst du haben:
// sub parse4Textarea {
// $laenge = @_; # so gehts
// my($laenge)= @_; # so gehts nicht
// for ($i=0; $i<$laenge; $i++) {
// $_[$i] =~ s/<br>/\n/g; #line Nr.137
// $_[$i] =~ s/</[/g; #line Nr.138
// [...]
// }
// }
Aufruf mit:
// parse4Textarea($param1,$param2, ... );
sowie ggf. die Ausgabe von perl -w
Auch damit kann ich dienen ;-(
Hier die Warnings mit my():
// Argument "Dieser Kurs dient zur Wiederholung und Vertiefung des be..." isn't numeric in numeric lt (<) at zeigeDetail.pl line 136.
// Argument "Bitte nehmen Sie einen Taschenrechner zum Kurs mit!" isn't numeric in numeric lt (<) at zeigeDetail.pl line 136.
Die Parameter die Übergeben werden sind Strings!
Aber mit @array wird doch die Anzahl der Elemente zurückgegeben oder?
Kann man sich im DOS-Fenster irgendwie den Output im Ganzen ansehen, oder muss man da jedes mal so schnell es geht den >Pause< Knopf drücken, um zu sehen was der Interpreter mir auswirft, wenn es mal länger als eine Seite ist ?
und use strict.
was macht strict?
Das passiert mir echt selten: es funktioniert ja, aber ich frage mich wieso! Normalerweise ist der erste Satzteil immer einer wo das Wort "nicht" oder "nein" vorkommt ;-)
liebe Grüsse
Bernhard
Hi Bernhard!
// sub parse4Textarea {
// $laenge = @_; # so gehts
// my($laenge)= @_; # so gehts nicht
Jetzt wird mir's klar. Die Anzahl der Elemente wird von einem Array genau dann zurueckgegeben, wenn es in einem skalaren Kontext ausgewertet wird. Das ist in der oberen Zeile der Fall; dort willst Du etwas an ein Skalar zuweisen, das heisst "ich will ein Skalar haben!", und das ist eben ein skalarer Kontext.
In der unteren Zeile fasst Du $laenge aber in Klammern ein, und damit hast Du dort eine Liste stehen, und deshalb wird @_ im Listenkontext ausgewertet. D.h. was rechts stehet, wird an die Liste links zugewiesen. Da links nur ein "Zielelement" (ich nenne es mal so, $laenge ist gemeint) steht, wird nur das erste Listenelement kopiert (was eine Zeichenkette ist). Spaeter in der Schleife fuehrst Du dann einen numerischen Vergleich durch, ... der Rest ist Dir sicher klar. Also, einfach die Klammern weglassen, die braucht man nur, wenn man mehrere Vars auf einmal my-en will.
Kann man sich im DOS-Fenster irgendwie den Output im Ganzen ansehen, oder muss man da jedes mal so schnell es geht den >Pause< Knopf drücken, um zu sehen was der Interpreter mir auswirft, wenn es mal länger als eine Seite ist ?
Wenn Du ein vernuenftiges DOS-Fenster hast... Meines ist 1000 Zeilen hoch, das kann man unter WinNT einstellen, bei Win95 aber nicht. Vielleicht hilft Dir auch
perl zeuchs.pl | more
ist aber nicht so schoen.
und use strict.
was macht strict?
Dich zwingen, 'my' hinzuschreiben. ;-) Damit kannst Du keine undeklarierten Variablen verwenden, was Dich Schreibfehler schnell finden laesst.
So long
Hallo Calocybe!
Ich habs ja gesagt, jetzt bin ich wieder ein Stück schlauer ;-)
Da links nur ein "Zielelement" (ich nenne es mal so, $laenge ist
gemeint) steht, wird nur das erste Listenelement kopiert (was
eine Zeichenkette ist). Spaeter in der Schleife fuehrst Du dann
einen numerischen Vergleich durch, ... der Rest ist Dir sicher klar.
Ja :-)
Also, einfach die Klammern weglassen, die braucht man nur, wenn
man mehrere Vars auf einmal my-en will.
Ich hab gedacht man braucht eine Klammer!
Tja, falsch gedacht :-(
Wenn Du ein vernuenftiges DOS-Fenster hast... Meines ist 1000
Zeilen hoch, das kann man unter WinNT einstellen, bei Win95 aber
nicht.
Ich weiss :-(
Vielleicht hilft Dir auch
perl zeuchs.pl more
ist aber nicht so schoen ...
... und gibt auch nur die Resultat-Seite in kleinen Stücken zerhackt
aus. Soll heissen wenn ich "Huhu" ausgebe und dabei z.B.: 3000
Warnings produziere, dann rauschen die flott vorbei, und das more
gibt mir genug zeit um mein "Huhu" zu analysieren, was mir dann
allerdings wiederum ziemlich wurscht ist :-(
was macht strict?
Dich zwingen, 'my' hinzuschreiben. ;-) Damit kannst Du keine
undeklarierten Variablen verwenden, was Dich Schreibfehler
schnell finden laesst.
Guter Tip!
So long
Na hoffentlich nicht zu lange ;-)
liebe Grüsse
Bernhard
Hallo Bernhard,
Vielleicht hilft Dir auch
perl zeuchs.pl more
ist aber nicht so schoen ...... und gibt auch nur die Resultat-Seite in kleinen Stücken [...]
Du kannst auch die ausgabeumleitung dazu benutzen:
perl zeuchs.pl >x.x
und dann den File x.x in ruhe in einem deiner editoren untersuchen.
Oder Du nimmst ein der vielen freeware-kommandschells, welche auch unter win9x mehr als 25 Zeilen puffern.
BTW:
my($laenge) = scalar @_;
funktioniert auch.
Grüße
Klaus
Hallo Klaus!
Du kannst auch die ausgabeumleitung dazu benutzen:
perl zeuchs.pl >x.x
Bin begeistert :-)
Genau sowas hab ich gesucht!
liebe Grüsse,
Bernhard
Hallo Bernhard,
[viel mit Mühe Geschriebenes, das durch Calocybes Posting überflüssig geworden ist ;-))]
Kann man sich im DOS-Fenster irgendwie den Output im Ganzen ansehen, oder muss man da jedes mal so schnell es geht den >Pause< Knopf drücken, um zu sehen was der Interpreter mir auswirft, wenn es mal länger als eine Seite ist ?
Ultraedit (http://www.ultraedit.com) bietet afaik Funktionen, um den Output eines Programms abzufangen. Bestimmt gibt es auch andere Shells, deren Output scrollbar ist (?). Ob es sonst irgendwie geht, hab` ich selbst noch nicht rausgefunden ;-)
was macht strict?
Wie hat einer der Stammposter mit dem großen C am Anfang mal gesagt (sinngemäß): "Verwende es und staune" ;-) (das wollte ich aber doch noch loswerden *g*)
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html
Hallo Alex!
[viel mit Mühe Geschriebenes, das durch Calocybes Posting
überflüssig geworden ist ;-))]
Trotzdem danke für die Mühe!
Ultraedit (http://www.ultraedit.com) bietet afaik
Funktionen, um den Output eines Programms abzufangen.
Ich könnte ja mal eine Liste mit alles Editoren posten, die sich schon auf meiner Platte tummeln, es ist eine Menge !!!
was macht strict?
Wie hat einer der Stammposter mit dem großen C am Anfang mal
gesagt (sinngemäß): "Verwende es und staune" ;-)
Es gibt hier zwei grosse C's, und beide haben sich an diesem Thread auch wieder beteiligt. Aber dem Wortlaut nach zu urteilen schätze ich mal es war das C, dessen ausgeschriebener Name ein wenig an die bekannte TV-Serie Daktari und einen seiner "Darsteller" erinnert ;-)
liebe Grüsse
Bernhard
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html
Hab ich schon ;-)