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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> true или false по строкам ;) 
V
    Опции темы
 
Что выводит этот код, true или false?
true [ 8 ]  [100.00%]
false [ 0 ]  [0.00%]
Всего проголосовавших: 8
В этом опросе возможны множественные ответы
Гости не могут голосовать 
Materium
Дата 29.12.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: нет
Всего: 2



Как вы думаете, что выведет следующий скрипт:

Код

$a="0.00" + 0;
$b=\$a;
   if ($b) {
print "true";
   } else {
print "false";
   }


и почему?

Это сообщение отредактировал(а) Materium - 30.12.2006, 15:27
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
nitr
Дата 30.12.2006, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ссылка на скаляр есть не нуль smile

Добавлено @ 00:52 
Но неверно задано, не что возвращает, а что выведет эта программа smile

Добавлено @ 00:53 
Materium, причём тут CGI-программирование?


--------------------
PM   Вверх
Materium
Дата 30.12.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: нет
Всего: 2



Верно я уже када создал всё это понял. Что не то написал и не там. ))) пусть Короб2001 переведёт.
nitr а без ссылки что выведет?
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
korob2001
Дата 30.12.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Код

# В следующей строке, переменная $a содержит значение false (0), так как Perl преобразует
# сначала строку "0.00" в число, лишние нули отбрасываются в итоге получается выражение $a = 0 + 0
$a="0.00" + 0;

# Создаём ссылку на скаляр, переменная $b теперь содержит тип сылки и адрес в памяти, по которому 
# хранитсы ложное значение. Выглядит это примерно так: SCALAR(0x225c5c), что не равно false.
$b=\$a;


if ($b) {
   print "true";  # вывод делает именно этот print
} else {
   print "false";
}


Это сообщение отредактировал(а) korob2001 - 30.12.2006, 15:51


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Materium
Дата 30.12.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: нет
Всего: 2



С монстрами Perl тяжело спорить, я конечно эти примеры беру не от того что пока вумный, а из кэмэла Лари.
Но Короб маленькая загвоздка кажется всё же появилась. ;)))
Дело в том что "0.00" не является false, это не нулевая строка. По крайней мере кэмэл Лари 3 издание описывает Perl 5.6, может в других реализациях будет иначе, хотя думается вряд ли. Я на практике примерчик не проверял, проверю сегодня обязательно. "0.00" должно быть true, как он пишет!!!
Код

выражение $a="0.00" + 0; 

является false из-за приведения к сложению, только поэтому "0.00" преобразуется в число.
без + 0; строка должна быть true!
Ссылка хранит адрес переменной поэтому конечно true

Добавлено @ 17:16 
Хотя может быть ты это и имел виду выше
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
korob2001
Дата 30.12.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Цитата(Materium @  30.12.2006,  14:15 Найти цитируемый пост)

Дело в том что "0.00" не является false, это не нулевая строка

Абсолютно верно, но читай коментарии и увидешь как это true, быстро преобразовывается в false.

Цитата(korob2001 @  30.12.2006,  12:50 Найти цитируемый пост)
# сначала строку "0.00" в число, лишние нули отбрасываются в итоге получается выражение $a = 0 + 0


PS: без + 0 строка так и осталась бы строкой.




Это сообщение отредактировал(а) korob2001 - 30.12.2006, 17:33


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
nitr
Дата 30.12.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Materium, вот тебе простейший пример smile)) Это я и имел ввиду smile
Код

#!perl
$a=0;
if($a) {
    print "is true\n";
} else {
    print "is false\n";
}
$b=\$a;
if($b) {
    print "is true\n";
} else {
    print "is false\n";
}

;)


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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