Людям нравится perl, они пишут довольно сложные программы и модули, выкладывают их, создают соц.сеть для перл-разрабов, «субботники» по уборке модулей и т.д. Что будет с перл6 поглядим, да. А вот как умер перл5 - всем бы так жить.
Все правильно пишет. Глянь вакансии по перлу. И именно не веб. Удивишься, но на нем почти никто уже не пишет. Да, веб-морды у всяких рег.ру под каталистом... пока есть перл-разрабы. Потом, как главный их свалит будут искать человека год-два. А потом решат ну иво нафиг, да перепишут на рельсах или еще лучше на ерланге (дядя такой придет и продаст yaws + свои плагины к нему) и все будет летать :)
Даже за кордоном говорят руби, но вы недоделанные фанаты чистоты заимствованных слов до маразма дрожите над тем, чтобы слова переходили в максимально родной форме, до перегибания палок.
Я бы предпочёл «==» вместо «eq», ну да ладно. Видимо, это tim toady.
Это не tim toady, это такой способ указания куда приводить типы (eq - операнды строки, == - операнды числа). Иначе будет как в js:
bash$ node
> var x = 4
undefined
> var y = "4"
undefined
> x == y
true
> x+2 == y+2
false
>
Или как в Питоне - у него тупо 4 != «4». Ещё бы объявление переменных с явным указанием типа добавить :)
Впрочем, почему-то идея «приводящих» операторов нигде, кроме перла, не прижилась. Может, неизбежная поначалу путаница слишком многих отпугивает. Не знаю...
Тут мне, как питонисту, завидно. Хотя, для питона тоже пилят системы проверки типов.
идея «приводящих» операторов нигде, кроме перла, не прижилась
Мне тоже она не нравится. Перл всё цепляется за строки, но мир гораздо больше чем потоки текста. А написать str(4) == «4» не так уж сложно, зато не нужен новый оператор на каждый тип данных. Я вообще склоняюсь к тому что чем меньше неявного тем лучше. И люблю компактное «ядро» языка без кучи keywords, operators, итп.
Но это моё имхо, миллионы перловиков со мной не согласны :).
Я так на питоне я вообще не пишу. Мне даже не сколько тип данных важен сколько смысл этого кода. Вот что за магическое «3»? Что хранится в row (не типы данных типа int, float, str, а, скажем, num_packets, performance_ratio, user_name)?
Я бы хотел вот такой код:
num_posts[user.name]
Где user.name это, скажем, named tuple. Т.е. tuple у которого доступ к полям возможен через осмысленные атрибуты, а не через цифровые индексы.
Если так писать, то язык практически не важен. В том же Modern Perl код очень приятно выглядит, не вызывая проблем с чтением/сопровождением. При этом, тип данных не теряется из виду, как в случае с питоном.
А написать str(4) == «4» не так уж сложно, зато не нужен новый оператор на каждый тип данных.
это ты хорошо сузил преобразования типов только до сравнений. Но в том же перле, например, когда нужно обрабатывать много разнородного текста, то заколебёшься в каждой операции приводить типы.
Но в том же перле, например, когда нужно обрабатывать много разнородного текста, то заколебёшься в каждой операции приводить типы.
Что тут приводить, если речь идет о тексте?
Если речь идет о «разнородных» данных, то для того, чтобы их можно было обрабатывать, нужно иметь общий интерфейс над ними. В пистоне поэтому и популярен так называемый duck typing.
О каких типах идёт речь? Строки, цифры и массивы? Но я использую ООП во все поля, мне примитивных типов мало. Да и, как я уже сказал, грамотное именование переменных даёт гораздо больше.
обрабатывать много разнородного текста, то заколебёшься в каждой операции приводить типы.
У меня никогда не было проблем с «заколёбыванием». Можно пример где «питон сосёт»? И что за есть «разнородный текст»?
Что если я хочу матрицу? Или у меня кастомный list, делающий что-нибудь ещё по обращению к каждому элементу? В python синтаксис один и тот же благодаря __getitem__ и __setitem__. А что в perl когда я хочу сделать свой тип коллекций?
Или у меня кастомный list, делающий что-нибудь ещё по обращению к каждому элементу?
просто массив.
В python синтаксис один и тот же благодаря __getitem__ и __setitem__
ну да, и нихрена не понятно что есть что. А в перле понятно что:
# это матрица
$matrix[ $row ][ $column ];
# это массив, где нулевой аргумент - функция, которую вызываем:
&{ $array[0] }
# есть еще такой синтаксис:
$array[0]->( args );
А что в perl когда я хочу сделать свой тип коллекций?
Что именно понимается под массивом? Только встроенный тормозной аналог списков или есть аналоги numpy? И если есть — как там реализуется доступ к элементам?
ну да, и нихрена не понятно что есть что.
Если оно крякает как хэшмэп — это хэшмэп. Если крякает как список — это список. Если крякает как оба — это ещё лучше.
Контексты и переменные по умолчанию - очень классная вещь, которая сокращает код:
while (<STDIN>) {
# обрезать \r\n, если только это не комментарий или пустая строка
chomp unless /^#/ or not length;
/parse condition/ && do {}
/another condition/ && do {}
/between range/ ... /parse/ && do {}
# и т.д.
}
# прибавить всем зарплату
s/\d+/\1+500/e for @{ $office{21} };
# или озаглавить улицы, добавить сокращение "ул."
s/^./\U\1/, s/^.*/ул. \1/ for @adresses;
Вот, человеку понадобилось обратиться к одному значению двумя способами. А это чем отличается? А не предвзят ли ты часом? ;)
Ну почему, почему у тебя типы сводится к двум контейнерам и «скаляру»?
не только, есть и другие. В перл они описываются очевидно. А в питон нет. Об этом и разговор. Я согласен с тобой что грамотное именование способно эту проблему решить.
Вот, человеку понадобилось обратиться к одному значению двумя способами
Чтобы получить более удобный в некоторых случаях вид tuple. Tuple, если что — нечто вроде List из перла, но tuple можно юзать практически везде, где пролезет list (а вот list — аналог перлового Array). Соответственно, tuple иммутабельны и могут быть использованы как ключ хэша. А в перле так слабо?