- 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...
inkanus-gray 27.01.2014 09:43 # +8
http://ideone.com/m8JwDu
bormand 27.01.2014 10:24 # +3
Ну тут хоть use warnings спас.
inkanus-gray 27.01.2014 12:58 # +3
anonimb84a2f6fd141 27.01.2014 16:36 # −6
anonimb84a2f6fd141 27.01.2014 16:34 # +4
kegdan 30.01.2014 04:03 # −1
удваивается
chtulhu 27.01.2014 17:29 # 0
bormand 27.01.2014 20:07 # 0
roman-kashitsyn 27.01.2014 20:10 # +3
Я не согласен - создатель пхп не преследовал злых целей. Тёмная сторона обычно за сокращение энтропии, а не за её экспоненциальный рост.
bormand 27.01.2014 20:11 # +3
kegdan 30.01.2014 04:05 # 0
No Fear
la-la-la la-la-la
Destination Darkness
anonimb84a2f6fd141 27.01.2014 20:01 # +1
bormand 27.01.2014 20:09 # 0
Ну с этим в перле получше, чем в php. Здесь нет корейского рандома: == всегда кастует в числа, eq всегда в строки. И спутать их очень трудно - баги начинают лезть на первом же сравнении, а не через 5 лет эксплуатации.
anonimb84a2f6fd141 30.01.2014 03:36 # 0
Dummy00001 27.01.2014 23:34 # 0
false if !defined($x)
if string: is not empty
if number: is not zero
if reference: always true
Lure Of Chaos 28.01.2014 00:00 # +1
в первом случае парсим стринг, приводя к числу...
в втором - делаем из него бул, который истина для любой непустой строки
Elvenfighter 28.01.2014 00:02 # +1
http://ideone.com/2rdGte
И это реально юзается в DBI: http://search.cpan.org/~timb/DBI-1.631/DBI.pm#execute
bormand 28.01.2014 05:32 # 0
Они бы хоть договорились насчет значения.
dionys 28.01.2014 11:26 # 0
bormand 28.01.2014 11:39 # 0
http://search.cpan.org/~timb/DBI-1.631/DBI.pm#ping
dionys 28.01.2014 11:47 # 0
bormand 28.01.2014 11:58 # 0
Не знаю, не люблю я пёрл за тысячи мелочей, которые почти каждая функция или оператор в себе таят. Юзаю его только для мелочи, когда текстовички обработать надо или в базу залить. Может быть тем, кто с этим постоянно работает это и привычно.
dionys 28.01.2014 12:20 # 0
Про любовь же рассуждать бессмысленно. Ты либо знаешь инструмент и тебе удобно его использовать. Либо не знаешь, что приводит к проблемам.
bormand 28.01.2014 12:41 # 0
Ну вот я его знаю на уровне достаточном для простых заливалок-разбиралок. И для них он действительно удобен.
> "а хрен бы его знал" не будет 0
Будет :(
http://ideone.com/UeVR2h
Или там еще какие-то тонкости есть?
dionys 28.01.2014 12:52 # +1
Надо понимать, что без use strict; use warnings; Perl сделает всё, чтобы твой код отработал. Но за это надо платить.
Если написать в приведённом коде use strictures; то он вообще упадёт, а не просто выдаст предупреждения.
bormand 28.01.2014 13:12 # 0
bormand 28.01.2014 13:21 # 0
Будет ли BEGIN { unshift(@INC, "."); } адекватным решением, или же лучше просто переименовать модуль, или же стоит увеличить вложенность, переименовав Config.pm в MyProject/Config.pm? Или есть какой-то другой способ справиться с этой траблой?
dionys 28.01.2014 13:45 # +1
Можно предложенные тобой способы использовать. Можно записать use lib '.'; в скрипте или использовать опцию perl -I. script.pl.
Мне более правильным кажется создание собственного пространства имён, т. е. MyProject/Config.pm. Но вообще, по обстоятельствам.
bormand 28.01.2014 13:54 # 0
Да, вот это и интересно было.
> Можно предложенные тобой способы использовать. Можно записать use lib '.'; в скрипте или использовать опцию perl -I. script.pl.
Спасибо ;)
> Мне более правильным кажется создание собственного пространства имён, т. е. MyProject/Config.pm
Ага, мне тоже кажется, что это самый безопасный вариант. По крайней мере с ним я не потеряю доступ к системным модулям, одноименным с моими.
Elvenfighter 29.01.2014 00:21 # 0
Большая сила -- большая ответственность. Use strict use warnings, Luke.
Elvenfighter 28.01.2014 00:14 # 0
kegdan 30.01.2014 04:07 # 0
1024-- 30.01.2014 04:22 # 0
kegdan 30.01.2014 05:14 # 0
1024-- 30.01.2014 14:01 # −1
Я ещё понимаю, когда кто-то недоволен, когда "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) и ликуют.
3.14159265 30.01.2014 16:48 # +1
сишкоцари (собирающие без ворнингов) и прочие яваскриптеры ищут где у них одно равно вместо джвух.
>>isClosed == false
Бульщит можно где-угодно написать.
1024-- 30.01.2014 17:18 # 0
Потому в жс сделали три равно, чтобы при ошибке было тоже сравнение.
И конечно же, написав "!counter" можно спасти себя от "counter = 0".
> Бульщит
a == ежедневное_специфическое_значение ничем не лучше
bormand 30.01.2014 05:37 # 0
O_o. А nil и false это истина? Хуяссе принцип наименьшего удивления.
kegdan 30.01.2014 05:46 # 0
А в руби 0 = это true . В руби все true кроме nil и false
наверное нужно спать больше 4 часов)
kegdan 30.01.2014 10:25 # −1
kegdan 30.01.2014 18:08 # 0
Elvenfighter 06.02.2014 01:14 # +4
MAPTbIwKA 10.11.2019 03:19 # 0