Forums Neueste Beiträge
 

Fehlersuche im Skript

26/03/2013 - 16:05 von Ying Gan | Report spam
Ich mache gerade 2 Übungen, bei denen ich jeweils den Fehler/ die Fehler im Skript suchen soll. Die Lösung dazu verstehe ich überhaupt nicht. Kann mir da bitte jemand weiterhelfen? Danke!

Übung 1:
while ($i <= $#liste) {
$str = @novel[$i++];
push @ergebnis, reverse $str;
}

Lösung zu Übung 1:
Der Array-Zugriffsausdruck ist
hier in Wahrheit ein Array-Segment. Sie erhalten hier daher keinen String, sondern ein Array mit einem einzigen Element. Perl- Warnungen fangen diesen Fehler ab.

Doch selbst wenn Sie diesen Fehler beheben, wird der String nicht umgekehrt. Denn in der dritten Zeile wird reverse in einem Listenkontext aufgerufen und der String dadurch als einelementige Liste interpretiert. Stellen Sie reverse mit der scalar-Funktion in skalaren Kontext.




Übung 2:
while ($pos < (length $str) and $pos != -1) {
$pos = index($str, $such, $pos);
if ($pos != -1 ) {
$count++;
}
}

Lösung zu Übung 2:
Irgendwo in der Schleife müssen Sie die aktuelle Position erhöhen, sonst findet die Schleife immer denselben Substring an immer derselben Stelle, wieder und wieder - endlos.


 

Lesen sie die antworten

#1 Thomas PointedEars Lahn
26/03/2013 - 17:01 | Warnen spam
Ying Gan wrote:

Übung 1:
while ($i <= $#liste) {
$str = @novel[$i++];
push @ergebnis, reverse $str;
}

Lösung zu Übung 1:
Der Array-Zugriffsausdruck ist
hier in Wahrheit ein Array-Segment. Sie erhalten hier daher keinen String,
sondern ein Array mit einem einzigen Element. Perl- Warnungen fangen
diesen Fehler ab.

Doch selbst wenn Sie diesen Fehler beheben, wird der String nicht
umgekehrt. Denn in der dritten Zeile wird reverse in einem Listenkontext
aufgerufen und der String dadurch als einelementige Liste interpretiert.
Stellen Sie reverse mit der scalar-Funktion in skalaren Kontext.

was damit genau gemeint ist:(



$ perl -e 'use warnings; @a = ("foo", "bar"); print @a[0] . "";'
Scalar value @a[0] better written as $a[0] at -e line 1.
foo

$ perl -e 'use warnings; @a = ("foo", "bar"); print join(",", @a[0, 1]) .
"";'
foo,bar

Jetzt klar?

Übung 2:
while ($pos < (length $str) and $pos != -1) {
$pos = index($str, $such, $pos);
if ($pos != -1 ) {
$count++;
}
}

Lösung zu Übung 2:
Irgendwo in der Schleife müssen Sie die aktuelle Position erhöhen, sonst
findet die Schleife immer denselben Substring an immer derselben Stelle,
wieder und wieder - endlos.

verstehe:(



Was genau verstehst Du auch nach dem Lesen der Dokumentation noch nicht?

Vielleicht solltest Du Deine (anscheinend) ersten Programmiererfahrungen
auch nicht gerade mit einer doch recht kryptischen (aber auch sehr
màchtigen) Sprache wie Perl machen. Derzeit wird deshalb in der Lehre
Python verwendet, früher war es Java, davor (Turbo) Pascal/Delphi und davor
BASIC.

PointedEars

Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.

Ähnliche fragen