Pregunta

¿Cuál es la razón histórica de que last se llame así en Perl en lugar de break como se llama en C?

El diseño de Perl fue influenciado por C (además de awk, sed y sh - vea la página del manual a continuación), por lo que debe haber algún razonamiento detrás de no ir con el familiar nombre en estilo C de break / last.

Un poco de historia de la página de manual de Perl 1.000 (publicada el 18 de diciembre de 1987):

  

[Perl] combina (en la opinión del autor, de todos modos) algunas de las mejores características de C, sed, awk y sh, por lo que las personas familiarizadas con esos lenguajes deberían tener poca dificultad. (Los historiadores del lenguaje también notarán algunos vestigios de csh, Pascal e incluso BASIC | PLUS).

¿Fue útil?

Solución

  

La semántica de 'break' o 'last' es   definido por el idioma (en este caso   Perl), no por ti.

     

¿Por qué no pensar en 'último' como " esto es   la última declaración para correr por el   bucle " ;.

     

Siempre me ha parecido extraño que el   La instrucción 'continuar' en 'C' inicia el   siguiente paso de un bucle. Esto es   definitivamente un uso extraño de la   concepto de "continuar". Pero es el   semántica de 'C', así que lo acepto.

     

Al intentar mapear particular   conceptos de programación en soltero   Palabras inglesas con significado existente   siempre habrá algún tipo   de rareza incompatible

Fuente

Además, Larry Wall es un poco raro. ¿Has visto su foto?

 Larry Wall
(fuente: wired.com )

Otros consejos

Espero que esto se deba a que Perl fue creado por un lingüista, no un informático. En el uso normal del inglés, el concepto de declarar que ha completado su pasada final a través de un bucle está más fuertemente conectado con la palabra "último". (" este es el último pase ") que a la palabra " break " (" break el bucle " ;? " break fuera del bucle " ;? - ni siquiera está claro cómo '' break '' se relaciona con salir del bucle) .

El término 'último' tiene más sentido cuando recuerda que puede usarlo con algo más que el control de bucle inmediato. Puede aplicarlo a bloques etiquetados uno o más niveles arriba el bloque en el que se encuentra:

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

Se lee más naturalmente para decir '' último '' en inglés cuando lo lees como " última línea si coincide ... ''.

Hay una razón adicional que puede considerar:

Último hace más que solo control de bucle.

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

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

El último como tal es un mecanismo de control de flujo general no limitado a bucles. Si bien, por supuesto, puede generalizar lo anterior como un bucle que se ejecuta como máximo 1 veces, la ausencia de un bucle para mí indica `` ¿Romper? ¿De qué estamos saliendo? & Quot;

En cambio, pienso en " last " como " Salta a la posición del last brace " ;, que es para este propósito, más semánticamente sensible.

Estaba haciendo la misma pregunta a Damian Conway sobre say . Perl 6 presentará say , que no es más que print que agrega automáticamente una nueva línea. Mi pregunta era por qué no simplemente usar echo , porque esto es lo que echo hace en Bash (y probablemente en otros lugares).

Su respuesta fue: echo es 33% más largo que say.

Él tiene un punto allí. :)

Porque va al último del bucle. Y porque Larry Wall era un tipo extraño.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top