> Говоря про Perl, в нем все есть строка, либо число. В зависимости
> от _контекста_ Perl выбирает, что взять за основу: число или строку. Тут уже выше упоминали RTFM:
In Perl, the operator determines what operation is performed, independent
of the type of the operands. For example "$x + $y" is always a numeric
addition, and if $x or $y do not contain numbers, an attempt is made to
convert them to numbers first.
This is in contrast to many other dynamic languages, where the operation
is determined by the type of the first argument. It also means that Perl
has two versions of some operators, one for numeric and one for string
comparison. For example "$x == $y" compares two numbers for equality, and
"$x eq $y" compares two strings.
Хотя типизация в перловке предмет долголетних споров и про то, что у перла все же сильная типизация, упоминают намного более авторитетные источники, чем анонимы опеннета. Как впрочем и наоборот.
>>Argument "0 but tru" isn't numeric in numeric eq (==) at -e line 1
> Что ты этим хотел доказать? Ты хоть понимаешь что это варнинг генерируется
> в рантайме? А в Python вообще все зашибись: http://ideone.com/uPfqlK
И что? В питоне тоже все генерируется в рантайме. Динамическая типизация, как она есть.
> Т.о. чтобы защитить код от подобной ошибки ты должен явно объяснять Perl,
> что тебе нужно сравнивать числа:
> shell> perl -le 'print 0 == 0 + "0 but true"'
> shell> 1 # операция валидна
Опять же, выше упоминали RTFM вместе со ссылочкой на код. Конкретно "0 but true" грязный хак на уровне интерпретатора, поэтому приводить его в качестве примера не очень удачная мысль.
> Строка 0 + $string <-- классический хинт/хак для пояснения Perl, что надо
> все воспринимать как числа.
Это не хинт и не хак. Это особенность грамматики/ЯП. Cм.
> In Perl, the operator determines what operation is performed, independent
> of the type of the operands.
===
> shell> perl -le 'use strict; use warnings; my $num = 123; print
> index $num, "a";'
> shell> -1
> Упс, Perl не выпленул варнинг, что работаем не со строкой. Ай-ай, надо
> срочно накатать плаксивое письмо, чтобы добавили варнинг на этот счет! Мало
> в Perl идиотских варнингов напихали!
Это, извините, полиморфизм и не говорит ни о чем. Вроде как даже в хаскеле прокатывает.
ЗЫ: кстати, есть определенное подозрение, что анонимов на опеннете значительно > 2