Pavel Gulchouck (gul_kiev) wrote in ru_perl,
Pavel Gulchouck
gul_kiev
ru_perl

print 100.101.102

Почему perl -e 'print 100.101.102' выводит 'def'?
Понятно, что 100, 101 и 102 - это ASCII-коды символов 'd', 'e' и 'f', но почему произошло такое преобразование, почему это не то же самое, что perl -e 'print 100 . 101 . 102', как было бы ожидаемо? Или perl -e 'print 100.101 . 102' - тоже понятно.

Скорее всего, где-то в доке об этом написано, но не могу найти, так что просто покажите, не пинайте сильно.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments
Спасибо.
Потому что, блин, КАВЫЧИТЬ НАДО

Если вы не кавычите, то вы отдаете право
пёрловому мозгу решать что и как интерпретировать,
и в какие глубины дефолтов оно провалится..

НЕПРАВИЛЬНО:
искать что это значит в документации

ПРАВИЛЬНО:
закавычить и кавычить всегда, не убивая свое и
чужое время на поиски цепочек дефолтов.

perl -e 'print "100.101.102"'
perl -e 'print q{100.101.102}'
Спасибо, но вопрос был в другом. В первом комменте дан исчерпывающий ответ.

Да и в самом вопросе я, вроде бы, достаточно корректно сформулировал: мне был бы понятен результат, аналогичный
100 . 101 . 102
(т.е. строка "100101012") или результат, аналогичный
100.101 . 102
(т.е. "100.101102", конкатенация дробного и целого чисел, преобразованных к строке), но был непонятен результат "def".

Благо, в отличие от C++, в перле undefined behavior не слишком распространён, поэтому хотелось найти то место в документации, которое описывает парсинг такого токена. И оно, конечно, нашлось.

А что такое "поиски цепочки дефолтов"?