Domanda

Qual è la ragione storica per cui last viene chiamato in Perl piuttosto che break come viene chiamato in C?

Il design di Perl è stato influenzato da C (oltre a awk, sed e sh - vedi la pagina man in basso), quindi ci deve essere stato qualche ragionamento dietro non andare con la familiare denominazione in stile C di break / last.

Un po 'di storia dalla pagina man Perl 1.000 (rilasciata il 18 dicembre 1987):

  

[Perl] combina (secondo l'opinione dell'autore, comunque) alcune delle migliori caratteristiche di C, sed, awk e sh, quindi le persone che hanno familiarità con quelle lingue dovrebbero avere poche difficoltà con esso. (Gli storici linguistici noteranno anche alcune vestigia di csh, Pascal e persino BASIC | PLUS.)

È stato utile?

Soluzione

  

La semantica di 'break' o 'last' sono   definito dalla lingua (in questo caso   Perl), non da te.

     

Perché non pensare a 'last' come " questo è   l'ultima istruzione da eseguire per   ciclo ".

     

Mi è sempre sembrato strano che il   L'istruzione "continue" in "C" avvia il file   prossimo passaggio di un ciclo. Questo è   sicuramente uno strano uso di   concetto di "continua". Ma è il   semantica di "C", quindi la accetto.

     

Provando a mappare particolari   concetti di programmazione in singolo   Parole inglesi con significato esistente   ci sarà sempre un qualche tipo   di stranezza non corrispondente

Fonte

Inoltre, Larry Wall è un po 'strano. Hai visto la sua foto?

 Larry Wall
(fonte: wired.com )

Altri suggerimenti

Mi aspetto che ciò sia dovuto al fatto che Perl è stato creato da un linguista, non da un informatico. Nell'uso normale dell'inglese, il concetto di dichiarare di aver completato il passaggio finale attraverso un ciclo è più fortemente collegato alla parola "last" (" questo è l ' ultimo passaggio ") rispetto alla parola " break " (" interrompi il ciclo " ;? " interrompi fuori dal ciclo " ;? - non è nemmeno chiaro come si intende che "interrompi "" si riferisce all'uscita dal ciclo) .

Il termine 'ultimo' ha più senso quando ricordi che puoi usarlo con più del semplice controllo di loop immediato. Puoi applicarlo ai blocchi etichettati di uno o più livelli sopra il blocco in cui si trova:

 LINE: while( <> ) {
      WORD: foreach ( split ) {
           last LINE if /^__END__\z/;
           ...
           }
      }

Si legge più naturalmente per dire "ultimo" in inglese quando lo leggi come " ultima riga se corrisponde ... " ;.

C'è un motivo in più che potresti prendere in considerazione:

Last fa molto di più del semplice controllo in loop.

sub hello {
  my ( $arg ) = @_; 

  scope: { 
      foo(); 
      bar(); 
      last if $arg > 4; 
      baz(); 
      quux(); 
  }
}

Ultimo in quanto tale è un meccanismo generale di controllo del flusso non limitato ai circuiti. Mentre, naturalmente, puoi generalizzare quanto sopra come un loop che viene eseguito al massimo 1 volte, l'assenza di un loop per me indica "Break? Da cosa stiamo uscendo? & Quot;

Invece, penso a " last " come " Vai alla posizione del ult parentesi graffa " ;, che è a questo scopo, più semanticamente sensibile.

Stavo facendo la stessa domanda a Damian Conway riguardo a dire . Perl 6 introdurrà dire , che non è altro che stampa che aggiunge automaticamente una nuova riga. La mia domanda era: perché non usare semplicemente echo , perché questo è ciò che echo fa in Bash (e probabilmente altrove).

La sua risposta è stata: echo è più lungo del 33% rispetto a say.

Ha un punto lì. :)

Perché va all'ultimo del ciclo. E perché Larry Wall era un tipo strano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top