Подтвердить что ты не робот

Почему "последний" называется "последним" в Perl?

Какова историческая причина того, что last называется в Perl, а не break, поскольку он вызывается в C?

На дизайн Perl повлиял C (в дополнение к awk, sed и sh - см. справочную страницу ниже), поэтому, должно быть, были некоторые соображения позади того, что вы не идеализировали название C-стиля break/last.

Немного истории из Perl 1.000 (выпущена 18 декабря 1987 года):

[Perl] сочетает (по мнению автора, в любом случае) некоторые из лучших особенностей C, sed, awk и sh, поэтому люди, знакомые с этими языками, должны иметь с ним небольшие трудности. (Языковые историки также заметят некоторые остатки csh, Pascal и даже BASIC | PLUS.)

4b9b3361

Ответ 1

Семантика 'break' или 'last' определяется языком (в данном случае Perl), а не вами.

Почему бы не думать о "последнем" как о "этом последнем операторе, выполняемом для цикла".

Мне всегда казалось странным, что оператор continue в C запускает следующий проход цикла. Это определенно странное использование понятия "продолжить". Но это семантика "С", поэтому я принимаю это.

При попытке отобразить конкретные концепции программирования в единичные английские слова с существующим значением всегда возникает какая-то странная странность

Источник

Кроме того, Ларри Уолл немного странный. Вы видели его фотографию?

Larry Wall
(источник: wired.com)

Ответ 2

Я ожидаю, что это потому, что Perl был создан лингвистом, а не ученым-компьютером. В обычном английском языке концепция объявления того, что вы завершили свой последний проход через цикл, более тесно связана со словом "последний" ( "это последний проход" ), чем с словом "break" ( "break the loop" "вырваться из цикла"? - он даже не ясно, как "разрыв" предназначен для выхода из цикла).

Ответ 3

Термин "последний" имеет больше смысла, когда вы помните, что вы можете использовать его не только с помощью непосредственного управления циклом. Вы можете применить его к помеченным блокам одного или нескольких уровней выше блок находится в:

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

Более естественно читать "последним" на английском языке, когда вы читаете его как "последняя строка, если он соответствует...".

Ответ 4

Это дополнительная причина, которую вы, возможно, захотите рассмотреть:

Последний делает больше, чем просто управление контуром.

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

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

Последний как таковой является общим механизмом управления потоком, не ограниченным циклами. Конечно, вы можете обобщить приведенное выше как цикл, который выполняется не более 1 раза, отсутствие петли для меня означает "Разрыв? Из чего мы вырвались?"

Вместо этого я думаю о "last" как "Перейти к позиции последней скобки", которая для этой цели более семантически разумна.

Ответ 5

Я задал тот же вопрос Дамиан Конвей о say. Perl 6 представит say, который не более чем print, который автоматически добавляет новую строку. Мой вопрос: почему бы просто не использовать echo, потому что это то, что echo делает в Bash (и, возможно, в другом месте).

Его ответ был: echo на 33% длиннее say.

У него есть точка.:)

Ответ 6

Потому что он переходит к последнему из цикла. И поскольку Ларри Уолл был странным парнем.