Por que é 'última' chamada 'última' em Perl?
-
06-07-2019 - |
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)
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
Além disso, Larry Wall é meio estranho. Você já viu a foto dele?
(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.