Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> О скалярных значениях в булевом контексте, это должен помнить каждый :о) 
:(
    Опции темы
Bulat
Дата 4.6.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(nitr @ 4.6.2008,  12:15)
Bulat, как-то странно ;)
Код

#!perl
print "0.0";

Цитата
0.0

Ну дык, в данном случае мы не используем булевскую функцию, т.е. не происходит действия - приведение к типу int поэтому и вывод такой ;)

Добавлено через 4 минуты и 13 секунд
nitr, да и сдается мне, что в твоем примере выводится не число "0.0", а строка содержащая "0.0" smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
nitr
Дата 4.6.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Bulat, правильно подметили smile Весь пост про это всё ;)


--------------------
PM   Вверх
ginnie
Дата 4.6.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата

Ну дык, в данном случае мы не используем булевскую функцию, т.е. не происходит действия - приведение к типу int поэтому и вывод такой ;)


Уважаемый Bulat, открою Вам секрет: в Perl в булевом контексте не происходит приведение к целому типу. Если бы это происходило, то "0.0" и "00" были бы false.

Код

warn int('00') ? 'true' : 'false';


Это сообщение отредактировал(а) ginnie - 4.6.2008, 13:12


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Bulat
Дата 4.6.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



ginnie, обрати внимание как ты задаешь скаляр, и вспомни еще раз мои предыдущие три примера smile

Добавлено через 5 минут и 12 секунд
про переменные в перл

например
Цитата

Все данные в Perl это скаляры, массивы скаляров и хеши скаляров. Скалярные переменные могут содержать числа, строки и ссылки. Преобразование числа - строки происходит автоматически по умолчанию.


Т.е. преобразование происходит независимо от того в булевском контексте или нет. При этом всегда smile

Добавлено через 6 минут и 18 секунд
Цитата

Все данные в Perl это скаляры, массивы скаляров и хеши скаляров. Скалярные переменные могут содержать числа, строки и ссылки. Преобразование числа - строки происходит автоматически по умолчанию. Скаляр может иметь только одно единственное значение, хотя это может быть ссылка на массив скаляров. Так как Perl сам преобразовывает числа в строки и наоборот, то программисту нет необходимости думать о том, что возвращает функция.

В Perl не существует типов "строка" или "число" или "файл" или что-то еще. Это контекстно зависимый полиморфный язык для работы с текстами.

Скаляр имеет логическое значение "TRUE" (истина), если это не нулевая строка или число не равное 0. 


Даже так, весь абзац smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
ginnie
Дата 4.6.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Bulat, мы об одном говорим, или о разном?

в примерах

Код

warn '00' ? 'true' : 'false';
warn 00 ? 'true' : 'false';
warn 0 ? 'true' : 'false';
warn '0' ? 'true' : 'false';
warn '0.0' ? 'true' : 'false';
warn 0.0 ? 'true' : 'false';
warn '' ? 'true' : 'false';
warn undef ? 'true' : 'false';


никаких преобразований строк в числа, дробных чисел в целые и наоборот не происходит. Происходит только интерпретация этих значений в true и false.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Bulat
Дата 4.6.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(ginnie @  4.6.2008,  13:59 Найти цитируемый пост)
никаких преобразований строк в числа, дробных чисел в целые и наоборот не происходит. Происходит только интерпретация этих значений в true и false. 


Ок. тогда объясни мне как происходит интерпретация в true или false. Исходя из твоей логики smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
ginnie
Дата 4.6.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Bulat, я с этого и начал топик. Дальше ты сказал про интуицию и началась дисскусия...  smile 


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Bulat
Дата 4.6.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



ginnie, ок, тогда взглянем на твой код по иному
Код

my $a = '00';
warn $a ? 'true' : 'false';
print $a, "\n";
$a = 00;
warn $a ? 'true' : 'false';
print $a, "\n";
$a = 0;
warn $a ? 'true' : 'false';
print $a, "\n";
$a = '0';
warn $a ? 'true' : 'false';
print $a, "\n";
$a = '0.0';
warn $a ? 'true' : 'false';
print $a, "\n";
$a = 0.0;
warn $a ? 'true' : 'false';
print $a, "\n";
$a = '';
warn $a ? 'true' : 'false';
print $a, "\n";


Цитата

true at C:\hh.pl line 105.
00
false at C:\hh.pl line 108.
0
false at C:\hh.pl line 111.
0
false at C:\hh.pl line 114.
0
true at C:\hh.pl line 117.
0.0
false at C:\hh.pl line 120.
0
false at C:\hh.pl line 123.






--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
ginnie
Дата 4.6.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Bulat, какие выводы из полученного результата можно сделать?



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Bulat
Дата 4.6.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



ginnie, что в $a перед строкой warn $a ? 'true' : 'false'; и после. Разве нет никаких изменений??


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
gcc
Дата 11.10.2008, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Цитата(KSURi @ 12.9.2008,  00:26)

Поэтому я делаю
Код

my $value = $cgi->param('value') || undef;

Но кстати, стоит отметить, что CGI.pm возвращает '' (пустую строку), если параметр в запросе присутствует, но значение у него пустое. А вот если параметра в запросе вообще нет, то тогда вернет undef 


defined($value) вместо undef...?

Это сообщение отредактировал(а) gcc - 11.10.2008, 07:52
PM WWW ICQ Skype GTalk Jabber   Вверх
KSURi
Дата 11.10.2008, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Ээ, чего? Привидите полный пример кода с комментарием, а то я что-то не догадался...


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
gcc
Дата 11.10.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



может возвращать пустую строку ''
можно сделать еще так $value = $cgi->param('value'); if (defined($value)) { print "не пустая";}

Это сообщение отредактировал(а) gcc - 11.10.2008, 10:49
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 8.8.2009, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



я написал вот так:

Код

sub begin : Private {
    my ( $self, $c ) = @_;

   while (my ($key,$value) = each (%{$c->request->params} )) {
     $value ||= ''; 
    $c->request->params->{$key} = $value;
   }   
}


нужно ли еще что-то фильтровать?

Это сообщение отредактировал(а) gcc - 8.8.2009, 02:29
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 14.8.2009, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



подскажите, если я получаю из СУБД int значение 1 или 0

как тут нужно писать правильный?

можно ли так

Код

$int
!$int


Код

$int == 0
$int == 1


в чем разница между этими записями? я видел что пишут $int == 1, но если стоит 0, то это будет в любом cлучае FALSE? даже если там и undef?

Это сообщение отредактировал(а) gcc - 14.8.2009, 02:18
PM WWW ICQ Skype GTalk Jabber   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.