Alternative zu "last" in do-Schleifen

7

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:

%Vor%

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.

    
DAG 06.12.2010, 18:13
quelle

5 Antworten

10

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.

    
caveman 06.12.2010, 18:22
quelle
16

Wickle die do "Schleife" in einen leeren Block (welcher ist eine Schleife):

%Vor%

Dies funktioniert für die letzte und Redo, aber nicht als nächstes; Platziere dafür den Block innerhalb des Do Blocks:

%Vor%     
ysth 06.12.2010 18:34
quelle
2

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:

%Vor%

Jetzt können Sie sehen, während Pascal nie auffing.

    
David W. 06.12.2010 19:03
quelle
1
  

@ "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 ...

    
lm2s 06.12.2010 18:17
quelle
1

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.

    
Bob Thompson 04.01.2013 19:35
quelle

Tags und Links