Laut dem Perl-Handbuch für last
( Ссылка ) kann last
nicht sein verwendet, um aus do {}
loops auszubrechen, erwähnt aber keine Alternative. Das Skript, das ich führe, hat diese Struktur:
und ich bin mir ziemlich sicher, dass er zum Ende der Schleife gehen möchte, aber die aktuelle Subroutine verlässt, also muss ich entweder die last
ändern oder die ganze Schleife umgestalten, wenn es einen besseren Weg gibt jemand kann empfehlen.
do BLOCK while (EXPR)
ist lustig in diesem Fall ist nicht wirklich eine Schleifenstruktur. Also, last, next und redo sollen dort nicht verwendet werden. Beseitigen Sie die letzte und passen Sie die EXPR an, um den Wert false zu ermitteln, wenn diese Situation gefunden wird.
Schalte auch strict ein, was dir zumindest eine Warnung geben sollte.
Nie ein Fan von do / while-Schleifen in Perl. Die do
ist nicht wirklich eine Schleife, weshalb last
nicht ausbrechen wird. In unserer alten Pascal
benommenheit konnte man eine Schleife in der Mitte nicht verlassen weil das wäre falsch nach dem weisen Niklaus "Ein Eingang / ein Ausgang" Wirth. Daher mussten wir eine Exit-Flagge erstellen. In Perl würde es in etwa so aussehen:
Jetzt können Sie sehen, während Pascal nie auffing.
@ "http://perldoc.perl.org/functions/last.html": last kann nicht zum Beenden eines Blocks verwendet werden, der einen Wert wie eval {}, sub {} oder do {} zurückgibt, und sollte nicht zum Beenden einer Operation grep () oder map () verwendet werden.
Also, benutze einen booleschen Wert in 'while ()' und setze ihn dort wo du 'last' hast ...
Warum nicht einfach eine while-Schleife verwenden?
%Vor%Sie müssen möglicherweise Ihre Logik etwas ändern, um der Tatsache Rechnung zu tragen, dass Ihr Test am Anfang statt am Ende Ihrer Schleife steht, aber das sollte trivial sein.
Übrigens, Sie können tatsächlich aus einer Pascal-Schleife ausbrechen, wenn Sie Delphi verwenden, und Delphi DID fangen für eine Weile an, bis Microsoft sich die .NET-Sprachen ausgedacht hat.
Tags und Links perl control-flow do-loops