- 1
- 2
- 3
- 4
- 5
- 6
if ("0 but true" == 0) {
print "Zero! ";
}
if ("0 but true") {
print "But true...";
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−159
if ("0 but true" == 0) {
print "Zero! ";
}
if ("0 but true") {
print "But true...";
}
The current default implementation always returns true without actually doing anything. Actually, it returns "0 but true" which is true but zero. That way you can tell if the return value is genuine or just the default.
http://ideone.com/8FzrUI
Zero! But true...
http://ideone.com/m8JwDu
Ну тут хоть use warnings спас.
удваивается
Я не согласен - создатель пхп не преследовал злых целей. Тёмная сторона обычно за сокращение энтропии, а не за её экспоненциальный рост.
No Fear
la-la-la la-la-la
Destination Darkness
Ну с этим в перле получше, чем в php. Здесь нет корейского рандома: == всегда кастует в числа, eq всегда в строки. И спутать их очень трудно - баги начинают лезть на первом же сравнении, а не через 5 лет эксплуатации.
false if !defined($x)
if string: is not empty
if number: is not zero
if reference: always true
в первом случае парсим стринг, приводя к числу...
в втором - делаем из него бул, который истина для любой непустой строки
http://ideone.com/2rdGte
И это реально юзается в DBI: http://search.cpan.org/~timb/DBI-1.631/DBI.pm#execute
Они бы хоть договорились насчет значения.
http://search.cpan.org/~timb/DBI-1.631/DBI.pm#ping
Не знаю, не люблю я пёрл за тысячи мелочей, которые почти каждая функция или оператор в себе таят. Юзаю его только для мелочи, когда текстовички обработать надо или в базу залить. Может быть тем, кто с этим постоянно работает это и привычно.
Про любовь же рассуждать бессмысленно. Ты либо знаешь инструмент и тебе удобно его использовать. Либо не знаешь, что приводит к проблемам.
Ну вот я его знаю на уровне достаточном для простых заливалок-разбиралок. И для них он действительно удобен.
> "а хрен бы его знал" не будет 0
Будет :(
http://ideone.com/UeVR2h
Или там еще какие-то тонкости есть?
Надо понимать, что без use strict; use warnings; Perl сделает всё, чтобы твой код отработал. Но за это надо платить.
Если написать в приведённом коде use strictures; то он вообще упадёт, а не просто выдаст предупреждения.
Будет ли BEGIN { unshift(@INC, "."); } адекватным решением, или же лучше просто переименовать модуль, или же стоит увеличить вложенность, переименовав Config.pm в MyProject/Config.pm? Или есть какой-то другой способ справиться с этой траблой?
Можно предложенные тобой способы использовать. Можно записать use lib '.'; в скрипте или использовать опцию perl -I. script.pl.
Мне более правильным кажется создание собственного пространства имён, т. е. MyProject/Config.pm. Но вообще, по обстоятельствам.
Да, вот это и интересно было.
> Можно предложенные тобой способы использовать. Можно записать use lib '.'; в скрипте или использовать опцию perl -I. script.pl.
Спасибо ;)
> Мне более правильным кажется создание собственного пространства имён, т. е. MyProject/Config.pm
Ага, мне тоже кажется, что это самый безопасный вариант. По крайней мере с ним я не потеряю доступ к системным модулям, одноименным с моими.
Большая сила -- большая ответственность. Use strict use warnings, Luke.
Я ещё понимаю, когда кто-то недоволен, когда "1.0" равно "1.00000000000000001" или когда "[1,2,3]" равно Array(1,2,3) -- тут два операнда и происходящее часто не соответствует здравому смыслу.
Но приведение к bool - это не баг, а фича, которая способствует краткой и понятной записи.
Пока жабофаги пишут if (counter == 0 || remained != 0 && next != null && isClosed == false), сишкоцари любуются на простое и понятное if (!counter || remained && next && !isClosed) и ликуют.
сишкоцари (собирающие без ворнингов) и прочие яваскриптеры ищут где у них одно равно вместо джвух.
>>isClosed == false
Бульщит можно где-угодно написать.
Потому в жс сделали три равно, чтобы при ошибке было тоже сравнение.
И конечно же, написав "!counter" можно спасти себя от "counter = 0".
> Бульщит
a == ежедневное_специфическое_значение ничем не лучше
O_o. А nil и false это истина? Хуяссе принцип наименьшего удивления.
А в руби 0 = это true . В руби все true кроме nil и false
наверное нужно спать больше 4 часов)