Pergunta

Qual é a razão histórica para que last é chamado que em Perl em vez de break como é chamado em C?

O projeto do Perl foi influenciado por C (além de awk, sed e sh - consulte a página homem abaixo), então deve ter havido algum raciocínio por trás não vai com o estilo C familiarizado nomeação de pausa / última <. / p>

Um pouco de história do Perl 1.000 (lançado em 18 de Dezembro de 1987) página de man:

[Perl] colheitadeiras (em opinião do autor, pelo menos) alguns dos melhores características do C, sed, awk e sh, para que as pessoas familiarizadas com esses idiomas devem ter pouca dificuldade com isso. (Historiadores idioma também vai observar alguns vestígios do CSH, Pascal, e até mesmo BASIC |. PLUS)

Foi útil?

Solução

A semântica de 'break' ou 'última' são definido pela linguagem (neste caso Perl), não por você.

Por que não pensar de 'última' como "isso é a última declaração de correr para o laço".

Sempre me pareceu estranho que o 'Continue' declaração em 'C' inicia o passagem seguinte de um laço. Isto é definitivamente um uso estranho da conceito de "continuar". Mas é a semântica de 'C', então eu aceitá-lo.

Ao tentar mapear especial programação conceitos em única palavras inglesas com significado existente há sempre vai ser algum tipo de descasamento entre oddity

Fonte

Além disso, Larry Wall é meio estranho. Você já viu a foto dele?

Larry Wall
(fonte: wired.com )

Outras dicas

Espero que isso é porque Perl foi criado por um linguista, não um cientista da computação. Em uso normal Inglês, o conceito de declarar que você tenha concluído o seu passe final através de um loop é mais fortemente ligada à palavra "último" ( "esta é a última passar") do que à palavra " quebrar"( " pausa do loop pausa fora do circuito"? "?" - nem mesmo é claro como "break" é destinado a se relacionar com sair do loop).

O termo 'última' faz mais sentido quando você lembrar que você pode usá-lo com mais do que apenas o controle looping imediata. Você pode aplicá-lo em blocos de uma rotulado ou mais níveis acima o bloco está em:

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

Ele lê mais naturalmente a dizer "último" em Inglês quando você lê-lo como "última linha se ele corresponde ...".

Há uma razão adicional que você pode querer considerar:

Última faz mais do que controle de laço apenas.

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

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

última, como tal, é um mecanismo geral de controlo de fluxo não limitado de voltas. Embora, é claro, você pode generalizar a acima como um loop que é executado no máximo 1 vezes, a ausência de um loop para me indica "Break? O que estamos romper?"

Em vez disso, eu penso "last" como "Ir para a posição do última cinta", que é para este fim, mais semanticamente sensata.

Eu estava fazendo a mesma pergunta para Damian Conway sobre say. Perl 6 introduzirá say, que é nada mais do que print que automaticamente adiciona uma nova linha. A minha pergunta foi por que não simplesmente usar echo, porque é isso que echo faz em Bash (e provavelmente em outros lugares).

Sua resposta foi: echo é 33% maior do que say

.

Ele tem um ponto lá. :)

Porque ele vai para o último do loop. E porque Larry Wall era um cara estranho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top