Permalink
Browse files

4 files of Russian translation by students

  • Loading branch information...
1 parent 6be7037 commit ee2c7c857fff608aaa02fc142f606bc357a6f753 @fxzuz fxzuz committed Dec 14, 2011
View
533 2011.06.20_padre_on_strawberry_perl/russian.sbv
@@ -0,0 +1,533 @@
+0:00:05.360,0:00:08.910
+Привет, и снова добро пожаловать на мой канал.
+
+0:00:08.910,0:00:11.330
+Это особенный скринкаст, потому что это — объявление
+
+0:00:11.330,0:00:16.370
+о выходе нового установщика Padre для Strawberry для Windows.
+
+0:00:16.370,0:00:20.400
+Изначально, когда я затеял это, я не знал, что будет дальше,
+
+0:00:20.400,0:00:25.970
+но в прошлом месяце я решил выпускать этот пакет раз в месяц.
+
+0:00:25.970,0:00:29.120
+Но из-за некоторых превосходных нововведений
+
+0:00:29.120,0:00:32.100
+я понял, что не могу больше ждать,
+
+0:00:32.100,0:00:37.450
+и поэтому захотел выпустить его, так что теперь вы можете загрузить и использовать его.
+
+0:00:37.450,0:00:42.660
+Я собираюсь показать вам пару вещей, которые в этом дистрибутиве будут новыми.
+
+0:00:42.660,0:00:47.560
+Так что вы можете решить, интересны ли эти вещи вам, и опробовать их.
+
+0:00:47.560,0:00:50.070
+Для начала — о том, как получить этот дистрибутив.
+
+0:00:50.070,0:00:54.500
+Вы можете зайти на веб-сайт Padre, padre.perlide.org,
+
+0:00:54.500,0:00:58.400
+на главной странице будет рекламный текст,
+
+0:00:58.400,0:01:02.380
+но, скорее всего, вам он не будет интересен, потому что вы знаете, чего хотите.
+
+0:01:02.380,0:01:07.320
+Так что кликните на ссылку загрузки, и там будет
+
+0:01:07.320,0:01:11.790
+список прилагающихся пакетов и модулей.
+
+0:01:11.790,0:01:15.660
+Здесь находится информация о выпуске, впрочем, вы о ней не беспокоитесь,
+
+0:01:15.660,0:01:20.070
+для вас важнее вот эта ссылка; нажимаете на неё,
+
+0:01:20.070,0:01:25.180
+и тогда можете загрузить собственно дистрибутив, сам установщик.
+
+0:01:25.180,0:01:30.770
+Он довольно большой, 75 мегабайт, но он содержит множество вещей.
+
+0:01:30.770,0:01:34.780
+Итак, вы загрузили его, кликнули несколько раз и установили его,
+
+0:01:34.780,0:01:37.700
+сделали всё то же, что обычно в Windows,
+
+0:01:37.700,0:01:43.750
+можете открыть меню «Пуск» (Start), «Все программы» (All programs), и в меню будет пункт «Strawberry Perl»,
+
+0:01:43.750,0:01:46.280
+вероятно, в зависимости от того, что вы выбрали,
+
+0:01:46.280,0:01:49.600
+и внутри вы увидите много новых значков.
+
+0:01:49.600,0:01:53.280
+Это не новость для тех, кто использует обычный Strawberry Perl,
+
+0:01:53.280,0:01:55.870
+но в предыдущей версии Padre для Strawberry
+
+0:01:55.870,0:01:58.280
+многих значков не было, так что это новинка.
+
+0:01:58.280,0:02:02.450
+А некоторые значки, на самом деле, новые для всех,
+
+0:02:02.450,0:02:07.230
+в частности, подпапка с играми (Games). В ней будут три значка.
+
+0:02:07.230,0:02:13.310
+Средний — ссылка на веб-сайт SDL Perl.
+
+0:02:13.310,0:02:16.620
+Это технология, с применением которой написаны игры.
+
+0:02:16.620,0:02:22.510
+А здесь — «Frozen Bubble». «Frozen Bubble» — известная игра, изначально написанная на Perl;
+
+0:02:22.510,0:02:26.680
+это оригинальный код, новая его версия,
+
+0:02:26.680,0:02:29.160
+о да, она запускается.
+
+0:02:29.160,0:02:34.260
+Как видите и слышите, здесь можно нажать «Enter», затем ещё раз «Enter»,
+
+0:02:34.260,0:02:38.910
+и можно изменить, что угодно.
+
+0:02:38.910,0:02:47.010
+Здесь вы управляете с помощью стрелок и сбиваете эти шары, и они падают — прекрасная игра.
+
+0:02:47.010,0:02:55.020
+Я довольно умелый игрок. Да, в этом я хорош, видите? Хм, следующий уровень.
+
+0:02:55.020,0:02:59.110
+Я могу так играть довольно долго, и вам, возможно, тоже очень понравится,
+
+0:02:59.110,0:03:05.770
+но я хотел бы показать вам что-то другое, так что я выхожу из игры. Пока-пока.
+
+0:03:05.770,0:03:10.030
+Итак, я вышел из игры и хотел бы продемонстрировать вам другую игру.
+
+0:03:10.030,0:03:16.690
+Другая игра тоже здесь. Она называется «Zumbis».
+
+0:03:16.690,0:03:20.850
+Вы - эта красноголовая девочка, и за вами гонятся зомби,
+
+0:03:20.850,0:03:24.500
+вы должны от них отстреливаться, или они вас съедят.
+
+0:03:24.500,0:03:28.000
+Самое весёлое — это... о, да, они меня съели.
+
+0:03:28.000,0:03:32.200
+Помимо того, что вы — красноголовая девочка и за вами идут зомби,
+
+0:03:32.200,0:03:34.300
+игра написана на португальском.
+
+0:03:34.300,0:03:36.500
+Так что вам придётся привыкнуть к этому.
+
+0:03:36.500,0:03:39.500
+Но я думаю, после зомби это будет для вас нормально.
+
+0:03:39.500,0:03:42.700
+Выход из игры — ещё одно приключение,
+
+0:03:42.700,0:03:45.400
+потому что вы не можете просто нажать «Escape», это не сработает.
+
+0:03:45.400,0:03:47.500
+Вам придётся нажать «Enter», чтобы начать игру заново,
+
+0:03:47.500,0:03:51.400
+и лишь потом можно уже нажать «Escape» и выйти из игры.
+
+0:03:51.400,0:03:53.400
+Так что это будет весело для всех.
+
+0:03:53.400,0:03:57.200
+А если вы захотите внести изменения, у неё открытый исходный код,
+
+0:03:57.200,0:04:02.900
+так что вы можете зайти на репозиторий Github и начать исправлять её, кто его знает?
+
+0:04:02.900,0:04:03.800
+Кто знает?
+
+0:04:03.800,0:04:08.800
+У вас может получиться прекрасная игра в итоге. Может быть, она будет на английском,
+
+0:04:08.800,0:04:12.300
+или на венгерском, или ещё на каком-нибудь языке.
+
+0:04:12.300,0:04:14.000
+Что ещё здесь есть?
+
+0:04:14.000,0:04:17.800
+Как я упоминал, есть интересная особенность Padre.
+
+0:04:17.800,0:04:22.400
+Намечается выход новой версии Padre,
+
+0:04:22.400,0:04:25.100
+0.86 выйдет совсем скоро, через пару дней.
+
+0:04:25.100,0:04:29.300
+У неё будет новая возможность, большой сюрприз для всех,
+
+0:04:29.300,0:04:31.100
+кто использует Perl в течение последних четырёх лет,
+
+0:04:31.100,0:04:34.500
+потому что долго большим недостатком Padre было то,
+
+0:04:34.500,0:04:41.100
+что у нас не было корректной подсветки синтаксиса для «defined or», вышедшего в версии 5.10.
+
+0:04:41.100,0:04:49.000
+Причиной было то, что мы использовали виджет редактора Scintilla и его модуль подсветки,
+
+0:04:49.000,0:04:51.200
+и мы использовали очень старую его версию...
+
+0:04:51.200,0:04:58.500
+длинная история, это было реализовано через привязки к WX и тому подобное, и поэтому
+
+0:04:58.500,0:05:01.300
+у нас не было корректной подсветки синтаксиса.
+
+0:05:01.300,0:05:07.400
+Недавно Ахмад Завави (Ahmad Zawawi) совершил подвиг,
+
+0:05:07.400,0:05:09.700
+создав непосредственную привязку к Scintilla
+
+0:05:09.700,0:05:15.200
+(это называется wxScintilla в Perl), и внёс изменения в Perl.
+
+0:05:15.200,0:05:21.400
+Так что Padre, который выйдет в версии 0.86, позволит использовать её.
+
+0:05:21.400,0:05:25.700
+Поскольку она ещё не вышла, я решил, в связи с тем, что это важная особенность...
+
+0:05:25.700,0:05:31.800
+я портировал её для старых версий, и добавил к выпускам Padre 0.86, 0.84,
+
+0:05:31.800,0:05:38.400
+она никогда не выходила публично, только в репозиториях,
+
+0:05:38.400,0:05:41.400
+но она прилагается к этому дистрибутиву.
+
+0:05:41.400,0:05:44.400
+Итак, в ближайшие дни, если хотите это испробовать,
+
+0:05:44.400,0:05:45.300
+у вас единственная возможность сделать это.
+
+0:05:45.300,0:05:48.800
+Поэтому вперёд, загружайте. Как же это работает?
+
+0:05:48.800,0:05:54.400
+Вы запускаете Padre, и когда вы открыли редактор,
+
+0:05:54.400,0:06:00.400
+открываете какие-нибудь сценарии Perl. Например, возьмём этот скрипт из папки с примерами
+
+0:06:00.400,0:06:02.300
+и откроем его.
+
+0:06:02.300,0:06:05.800
+На самом деле, меня не интересует, что там.
+
+0:06:05.800,0:06:10.100
+То, что я хотел написать - этот «defined or»,
+
+0:06:10.100,0:06:12.500
+который, как вы видите, подсвечен.
+
+0:06:12.500,0:06:15.000
+Я надеюсь, вы заметили, что подсветка не работает нормально.
+
+0:06:15.000,0:06:17.200
+Сначала она чёрная, затем красная —
+
+0:06:17.200,0:06:20.600
+она не понимает, что мы говорим о переменной, заданной с помощью «defined or».
+
+0:06:20.600,0:06:24.900
+Итак, мы должны включить новую подсветку Scintilla.
+
+0:06:24.900,0:06:27.400
+С этой целью заходим в меню «Сервис» (Tools),
+
+0:06:27.400,0:06:28.300
+«Настройки» (Preferences),
+
+0:06:28.300,0:06:32.200
+но для этого нет отдельного флажка, насколько я знаю.
+
+0:06:32.200,0:06:33.900
+Поэтому заходим в «Дополнительные настройки» (Advanced...),
+
+0:06:33.900,0:06:38.400
+вводим «Scintilla»,
+
+0:06:38.400,0:06:39.200
+начинаем ввод
+
+0:06:39.200,0:06:41.800
+и попадаем как раз на нужную опцию.
+
+0:06:41.800,0:06:46.400
+Как вы видите, установлено значение False, по умолчанию оно не используется.
+
+0:06:46.400,0:06:51.400
+Включаю опцию, устанавливаю на True, сохраняю, и она всё ещё не работает,
+
+0:06:51.400,0:06:57.500
+потому что вам нужно перезапустить Padre, чтобы эти изменения вступили в силу.
+
+0:06:57.500,0:07:06.400
+Итак, я закрываю Padre, и, перезапуская его, как и прежде,
+
+0:07:06.400,0:07:09.400
+я ненавижу то, что она не запоминает правильно
+
+0:07:09.400,0:07:11.500
+последний открытый файл,
+
+0:07:11.500,0:07:15.400
+так что я захожу в «Недавние файлы» (Recent Files) и открываю этот файл,
+
+0:07:15.400,0:07:21.600
+и, как вы видите, подсветка синтаксиса работает верно.
+
+0:07:21.600,0:07:28.100
+Кстати, если вам тоже не нравится, что Padre не открывает файл, открытый перед закрытием программы,
+
+0:07:28.100,0:07:30.600
+ещё раз зайдите в «Сервис»,
+
+0:07:30.600,0:07:31.900
+«Настройки»,
+
+0:07:31.900,0:07:33.500
+и здесь есть пункт «Открывать файлы» (Open files),
+
+0:07:33.500,0:07:35.700
+который как раз задаёт то, что нам и надо.
+
+0:07:35.700,0:07:40.100
+Каждый раз при запуске Padre открывается новый файл («new»), но вы можете указать
+
+0:07:40.100,0:07:44.900
+«last», который будет открывать последние файлы, которые были открыты;
+
+0:07:44.900,0:07:48.100
+есть также управление сеансами, но я не хочу сейчас вдаваться в это,
+
+0:07:48.100,0:07:52.000
+потому что это не то, о чём мы говорим.
+
+0:07:52.000,0:07:56.500
+В любом случае, это действительно хорошая особенность Padre,
+
+0:07:56.500,0:07:59.200
+что она может верно подсвечивать синтаксис.
+
+0:07:59.200,0:08:01.200
+Так что добро пожаловать в Perl 5.10!
+
+0:08:01.200,0:08:04.300
+Великолепно.
+
+0:08:04.300,0:08:05.700
+Что ещё?
+
+0:08:05.700,0:08:08.200
+Есть пара других особенностей — зайдём обратно на веб-сайт,
+
+0:08:08.200,0:08:12.500
+потому что там есть список вещей, которые являются новыми.
+
+0:08:12.500,0:08:17.000
+Они указаны в информации о выпуске, дайте мне вспомнить... да,
+
+0:08:17.000,0:08:19.200
+CPAN::Reporter. CPAN::Reporter,
+
+0:08:19.200,0:08:23.900
+и этот модуль с непроизносимым названием —
+
+0:08:23.900,0:08:27.500
+набор инструментов, позволяющий вам
+
+0:08:27.500,0:08:31.200
+отправлять отчёты о проверках тестировщикам CPAN.
+
+0:08:31.200,0:08:36.000
+Этот веб-сайт, как вы, возможно, знаете, содержит отчёты тестировщиков CPAN.
+
+0:08:36.000,0:08:41.000
+Есть люди, которые устанавливают модули CPAN и отправляют отчёты.
+
+0:08:41.000,0:08:46.600
+Отчёты собираются здесь и вы можете их видеть, это замечательно.
+
+0:08:46.600,0:08:52.700
+Итак, чтобы включить это, вам нужно установить различные модули.
+
+0:08:52.700,0:08:54.600
+Они уже прилагаются к этому дистрибутиву.
+
+0:08:54.600,0:09:01.300
+Вам нужно настроить и включить их,
+
+0:09:01.300,0:09:03.600
+и отчёты будут отправляться от вашего имени.
+
+0:09:03.600,0:09:06.500
+Если вы зайдёте на веб-сайт cpantesters.org
+
+0:09:06.500,0:09:08.500
+и прокрутите вниз,
+
+0:09:08.500,0:09:13.500
+здесь есть раздел под названием «Стань тестировщиком» (Become a tester), который ссылается на вики.
+
+0:09:13.500,0:09:18.500
+Я не буду сейчас вдаваться в детали, вероятно, об этом будет отдельный скринкаст,
+
+0:09:18.500,0:09:24.900
+но вы можете зайти туда и прочитать, как настроить модули, и тогда вы сможете начать отправлять отчёты о тестировании.
+
+0:09:24.900,0:09:27.300
+Это будет замечательно, мы скажем вам «спасибо».
+
+0:09:27.300,0:09:28.400
+Что ещё?
+
+0:09:28.400,0:09:29.100
+О, да, итак,
+
+0:09:29.100,0:09:33.300
+Text::CSV_XS считывает и пишет файлы CSV.
+
+0:09:33.300,0:09:37.500
+Net::Telnet — на случай, если вы захотите подключиться к незащищённой Unix-машине.
+
+0:09:37.500,0:09:42.400
+Повсеместно есть маршрутизаторы, мосты и прочее,
+
+0:09:42.400,0:09:45.600
+что можно настройть через интерфейс telnet.
+
+0:09:45.600,0:09:51.200
+И во многих случаях вам он понадобится для тестирования или настройки этих устройств,
+
+0:09:51.200,0:09:54.100
+так что Net::Telnet — прекрасный модуль для этого.
+
+0:09:54.100,0:09:58.400
+App::cpanoutdated, на самом деле, позволяет мне проверять,
+
+0:09:58.400,0:10:03.500
+какие модули нужно обновить к следующему выпуску,
+
+0:10:03.500,0:10:06.600
+но его может использовать любой желающий. Это инструмент командной строки,
+
+0:10:06.600,0:10:10.700
+который покажет вам, какие модули в вашей системе устарели.
+
+0:10:10.700,0:10:18.500
+Template::Toolkit поможет мне или кому-либо другому
+
+0:10:18.500,0:10:23.800
+написать более сложные приложения или веб-приложения.
+
+0:10:23.800,0:10:28.100
+Dancer, который был включён ранее,
+
+0:10:28.100,0:10:31.000
+в этой версии был обновлён.
+
+0:10:31.000,0:10:34.700
+Dancer поставляется с действительно простой
+
+0:10:34.700,0:10:38.400
+системой шаблонов, в которой нет даже циклов и тому подобного.
+
+0:10:38.400,0:10:40.700
+И теперь, когда у вас установлен Template::Toolkit,
+
+0:10:40.700,0:10:45.000
+довольно легко начать писать сложные веб-приложения на этом дистрибутиве.
+
+0:10:45.000,0:10:47.100
+Win32::GuiTest: —
+
+0:10:47.100,0:10:54.300
+хороший модуль, который позволит вам написать любые типы автоматизации для приложений для рабочего стола.
+
+0:10:54.300,0:10:59.100
+Он позволяет кликнуть или переместить курсор,
+
+0:10:59.100,0:11:02.100
+разумеется, автоматически, вам не надо трогать мышь
+
+0:11:02.100,0:11:03.800
+или нажимать клавиши на клавиатуре.
+
+0:11:03.800,0:11:08.900
+Кроме того, вы можете автоматизировать задачи. Модуль может быть использован для тестирования,
+
+0:11:08.900,0:11:11.900
+автоматической установки или для других подобных вещей.
+
+0:11:11.900,0:11:14.100
+И, как я упомянул, здесь есть SDL
+
+0:11:14.100,0:11:17.300
+и пара предустановленных игр.
+
+0:11:17.300,0:11:22.500
+Пара модулей была обновлена — в общем-то, это всё.
+
+0:11:22.500,0:11:26.500
+Я очень надеюсь, что некоторые из вас опробуют это...
+
+0:11:26.500,0:11:30.300
+загрузят, испытают и отправят отзыв.
+
+0:11:30.300,0:11:31.500
+Как вам новый дистрибутив?
+
+0:11:31.500,0:11:36.400
+Лишь бы в нём не оказалось много новых ошибок.
+
+0:11:36.400,0:11:38.500
+Надеюсь, что вам понравился этот скринкаст.
+
+0:11:38.500,0:11:40.000
+До встречи в следующий раз!
View
1,138 2011.06.29_building_blog_with_dancer/russian.sbv
@@ -0,0 +1,1138 @@
+0:00:03.630,0:00:07.430
+Привет и добро пожаловать на канал. В этот раз
+я собираюсь потратить пятнадцать минут
+
+0:00:07.430,0:00:09.919
+и создать небольшой движок для блога.
+
+0:00:09.919,0:00:10.950
+Я собираю использовать
+
+0:00:10.950,0:00:14.959
+Perl Dancer в качестве фреймворка
+который можно найти здесь:
+
+0:00:14.959,0:00:16.439
+perldancer.org
+
+0:00:16.439,0:00:21.849
+и конечно же Padre
+и Padre на Strawberry
+
+0:00:22.869,0:00:24.499
+И всё это под Windows.
+
+0:00:24.499,0:00:29.410
+Нам нужно... Давайте запустим
+Strawberry Perl ... Padre
+
+0:00:29.410,0:00:34.030
+Нам нужен редактор и когда мы его открываем
+то получаем пустую страницу.
+
+0:00:34.030,0:00:40.850
+Dancer поставляется с приложениями для командной строки
+которые позволяют создать скелет приложения.
+
+0:00:40.850,0:00:43.430
+Для этого нужно
+
+0:00:43.430,0:00:45.690
+Запустить
+
+0:00:45.690,0:00:50.130
+cmd и поменять каталог
+
+0:00:50.130,0:00:51.110
+на рабочий
+
+0:00:51.110,0:00:56.160
+Я собираюсь создать скелет приложения,
+я набираю "dancer -a" и
+
+0:00:56.160,0:00:58.480
+имя приложения
+
+0:00:58.480,0:01:00.380
+которому я дал имя Dwimmer
+
+0:01:02.330,0:01:04.560
+как какого-нибудь... мага
+или что-то в этом роде
+
+0:01:04.560,0:01:08.040
+Итак, я назову приложение
+Dwimmer
+
+0:01:09.050,0:01:12.970
+При запуске этого скрипта создастся
+подкаталог для
+
+0:01:12.970,0:01:18.400
+приложения и различных файлов
+которые являются скелетом приложения.
+
+0:01:18.400,0:01:23.680
+Если зайти в этот каталог и набрать perl bin
+
+0:01:23.680,0:01:24.640
+и имя
+
+0:01:24.640,0:01:29.750
+app.pl и запустить приложение.
+Это дейтвие запустит скелет
+
+0:01:29.750,0:01:35.750
+Можно зайти в браузер и набрать localhost:3000
+
+0:01:35.750,0:01:40.040
+и мы получаем стандартную страницу
+которую создал для нас Dancer.
+
+0:01:40.040,0:01:41.740
+Как она вам?
+
+0:01:41.740,0:01:47.610
+Перейду к Padre и открою файл
+
+0:01:49.400,0:01:55.380
+Файл в рабочей директории
+
+0:01:55.380,0:01:56.330
+Dwimmer
+
+0:01:56.330,0:01:59.509
+здесь каталог bin и в нём app.pl
+
+0:01:59.509,0:02:02.469
+Скрипт практически пуст, как видите
+
+0:02:02.469,0:02:04.940
+он лишь запускает модуль Dwimmer
+
+0:02:04.940,0:02:08.419
+модуль Dwimmer находится в директории lib.
+Для удобства
+
+0:02:08.419,0:02:11.399
+откроем браузер проектов
+
+0:02:11.399,0:02:14.279
+и Padre автоматически распознает Perl проект
+
+0:02:15.569,0:02:19.700
+Итак, в каталоге lib лежит
+Dwimmer.pm
+
+0:02:19.700,0:02:23.900
+это определяет, что
+
+0:02:23.900,0:02:27.250
+когда пользователь приходит с
+GET-запросом
+
+0:02:27.250,0:02:28.450
+на главную страницу
+
+0:02:28.450,0:02:30.920
+должна быть запущена подпрограмма
+
+0:02:30.920,0:02:34.259
+которая загружает шаблон главной страницы.
+Шаблоны расположены
+
+0:02:34.259,0:02:37.620
+в подкаталоге views и
+index.tt
+
+0:02:37.620,0:02:39.749
+это наш шаблон
+
+0:02:41.769,0:02:44.629
+Dancer поставляется с очень простой
+системой шаблонов,
+
+0:02:44.629,0:02:46.720
+но я уже установил
+
+0:02:46.720,0:02:48.859
+Template::Toolkit
+
+0:02:48.859,0:02:52.939
+который идет вместе с Padre на Strawberry Perl
+Для начала
+
+0:02:52.939,0:02:55.829
+хотелось бы изменить
+систему шаблонов.
+
+0:02:55.829,0:02:58.430
+Это можно сделать в файле config.yml
+
+0:02:58.430,0:03:01.779
+что в коренной директории приложения.
+
+0:03:01.779,0:03:05.869
+Можете видеть что здесь прописан шаблон simple
+
+0:03:05.869,0:03:09.599
+а я хотел бы использовать
+Template::Toolkit
+
+0:03:09.599,0:03:10.760
+и здесь же
+
+0:03:10.760,0:03:14.739
+я определяю что кодировка utf-8.
+
+0:03:14.739,0:03:19.529
+Тэги начала и конца я оставляю какими они были по умолчанию в Dancer
+
+0:03:19.529,0:03:22.259
+которые выглядят
+
+0:03:22.259,0:03:24.479
+как <% %>
+
+0:03:24.479,0:03:26.989
+я их оставляю такими.
+
+0:03:26.989,0:03:30.489
+Теперь я настроил это, и надо посмотреть всё ли работает
+
+0:03:30.489,0:03:33.899
+Я останавливаю приложение, перезапускаю
+
+0:03:33.899,0:03:36.139
+и возвращаюсь в браузер
+
+0:03:36.139,0:03:40.940
+То что мы видели раньше было разными видами значений
+
+0:03:40.940,0:03:44.099
+которые приходили от
+
+0:03:44.099,0:03:47.160
+систем шаблонов. Я перезагрузил страницу
+и вижу то же самое
+
+0:03:47.160,0:03:49.790
+Всё впорядке.
+
+0:03:49.790,0:03:50.979
+Теперь
+
+0:03:50.979,0:03:53.599
+Мне не нужен весь этот хлам
+
+0:03:53.599,0:03:55.279
+в стандартном виде Dancer
+
+0:03:55.279,0:03:58.489
+я перехожу в шаблон главной страницы
+
+0:03:58.489,0:04:00.670
+удаляю всё и вместо этого
+
+0:04:00.670,0:04:02.029
+пишу hello
+
+0:04:02.029,0:04:03.849
+
+0:04:03.849,0:04:08.569
+И я предлагаю пользователю перейти на эту страницу
+
+0:04:08.569,0:04:13.019
+чтобы создать пост
+
+0:04:13.019,0:04:13.869
+Окей
+
+0:04:13.869,0:04:17.029
+Итак, это то что я собираюсь делать
+
+0:04:17.029,0:04:18.919
+и...
+
+0:04:18.919,0:04:20.630
+если перезагрузить страницу
+
+0:04:20.630,0:04:25.889
+у нас здесь: hello и
+ссылка на создание поста
+
+0:04:25.889,0:04:29.009
+которая должна вести на страницу page.
+
+0:04:29.009,0:04:32.539
+При переходе по ней я получаю ошибку
+404 потому что никто
+
+0:04:32.539,0:04:34.129
+еще не определил
+
+0:04:34.129,0:04:34.949
+что делать
+
+0:04:34.949,0:04:36.680
+если кто-то попадёт на эту страницу.
+
+0:04:36.680,0:04:40.529
+и это следуещее что нужно сделать.
+Возвращаемся к модулю
+
+0:04:40.529,0:04:42.009
+и определяем
+
+0:04:42.009,0:04:43.600
+что когда кто-то..
+
+0:04:43.600,0:04:45.259
+посылает GET-запрос
+
+0:04:45.259,0:04:47.560
+этой страницы,
+
+0:04:47.560,0:04:49.759
+нужно запустить подпрограмму
+
+0:04:49.759,0:04:51.710
+которая находится здесь
+
+0:04:51.710,0:04:54.330
+
+0:04:54.330,0:04:56.880
+загрузить шаблон который называется
+
+0:04:56.880,0:04:58.849
+"page" в нашем случае.
+
+0:04:58.849,0:05:03.909
+Нужно заполнить этот шаблон
+и мы возвращаемся к index.tt
+
+0:05:03.909,0:05:05.610
+
+0:05:05.610,0:05:07.229
+сохраняем
+
+0:05:07.229,0:05:12.620
+как "page.tt" и вместо вот этого..
+
+0:05:12.620,0:05:14.720
+хотелось бы иметь форму.
+
+0:05:14.720,0:05:17.020
+Форма
+
+0:05:17.020,0:05:18.360
+должна
+
+0:05:18.360,0:05:29.560
+отправлять POST запрос потому что мы что-то посылаем
+а также иметь поле ввода
+
+0:05:29.830,0:05:31.200
+которое
+
+0:05:31.200,0:05:32.590
+будет называться
+
+0:05:32.590,0:05:34.939
+title.
+
+0:05:34.939,0:05:38.130
+также будет еще одно
+
+0:05:38.130,0:05:40.169
+поле ввода
+
+0:05:40.169,0:05:43.759
+имеющее тип
+
+0:05:43.759,0:05:45.389
+submit
+
+0:05:45.389,0:05:46.760
+а между ними
+
+0:05:46.760,0:05:52.870
+будет текстовое поле
+
+0:05:52.870,0:05:56.339
+в которое нужно будет вводить текст.
+
+0:05:56.339,0:05:58.339
+Такой будет страница.
+
+0:05:58.339,0:05:59.469
+Теперь идем
+
+0:05:59.469,0:06:00.459
+
+0:06:00.459,0:06:02.649
+перезагружаем приложение
+
+0:06:02.649,0:06:05.089
+выдает ошибку.
+
+0:06:05.089,0:06:09.210
+где-то забыл поставить точку с запятой
+обычная моя ошибка
+
+0:06:09.210,0:06:11.250
+здесь в модуле, да, вот здесь.
+
+0:06:11.250,0:06:15.289
+Здесь в конце нужно не забывать
+ставить точку с запятой
+
+0:06:15.289,0:06:17.430
+хоть это и выглядит как подпрограмма
+
+0:06:17.430,0:06:21.139
+но на самом деле это параметр
+функции get.
+
+0:06:21.139,0:06:25.370
+Я запускаю снова, стало работать лучше
+
+0:06:25.370,0:06:30.680
+...я возвращаюсь к page и перезагружаю
+страницу и получаю форму.
+
+0:06:30.680,0:06:32.830
+Которая немножко странно выглядит
+
+0:06:32.830,0:06:36.299
+Давайте сделаем её чуточку красивее
+
+0:06:36.299,0:06:39.249
+Возвращаюсь в редактор,
+
+
+0:06:39.249,0:06:42.889
+в этот шаблон и для начала делаю форму
+
+0:06:42.889,0:06:44.569
+немного шире
+
+0:06:44.569,0:06:50.400
+и поставлю переход на новую строку в конце и
+делаю текстовое поле
+
+0:06:50.400,0:06:52.339
+например
+
+0:06:52.339,0:06:54.919
+в 10 строк, и к примеру
+
+0:06:54.919,0:06:55.820
+в 80 столбцов
+
+0:06:55.820,0:06:58.539
+оно будет такого размера
+
+0:06:58.539,0:06:59.869
+а также
+
+0:06:59.869,0:07:03.810
+сделаем кнопку submit,
+вместо "Submit Query"
+
+0:07:03.810,0:07:06.219
+напишем здесь
+
+0:07:06.219,0:07:07.070
+значение
+
+0:07:07.070,0:07:08.969
+которым является Post
+
+0:07:08.969,0:07:09.979
+и теперь
+
+0:07:09.979,0:07:13.550
+Я перезагружаю страницу.
+И она выглядит лучше чем раньше
+
+0:07:13.550,0:07:18.599
+80 здесь и 80 здесь
+не одинаковы. Странно,
+Никогда этого не замечал.
+
+0:07:18.599,0:07:21.300
+Возможно кто-то из вас объяснит мне это
+
+0:07:21.300,0:07:26.229
+и вот здесь кнопка отправки.
+Выглядит нормально для первой версии.
+
+0:07:26.229,0:07:31.899
+Теперь вводим что-то вроде заголовка
+и что-то вроде ...
+
+0:07:31.899,0:07:33.289
+моего текста
+
+0:07:33.289,0:07:40.049
+теперь, ... давайте напишем что-нибудь другое
+например hello, hello HELLO!
+
+0:07:40.049,0:07:42.830
+я нажимаю на Post
+
+0:07:42.830,0:07:47.089
+затем я получаю что-то странное...
+
+0:07:47.089,0:07:49.210
+посылается заголовок
+
+0:07:49.210,0:07:54.069
+но не текст...
+посмотрим что я сделал не так
+
+0:07:55.149,0:08:00.499
+Например я не назвал вот это поле
+а это нужно сделать.
+
+0:08:00.499,0:08:01.240
+Например text
+
+0:08:01.240,0:08:05.789
+а сдесь написано methdo а не method
+так что надо ...
+
+0:08:05.789,0:08:06.770
+исправить эти недочёты
+
+0:08:06.770,0:08:07.849
+теперь
+
+0:08:07.849,0:08:10.619
+возвращаюсь сюда
+
+0:08:10.619,0:08:14.540
+перезагружаю страницу и пишу здесь hello
+а вот здесь
+
+0:08:14.540,0:08:16.270
+world
+
+0:08:16.270,0:08:19.669
+и если я нажму на кнопку то получу ошибку
+Гораздо лучше.
+
+0:08:19.669,0:08:21.379
+Почему я получил эту ошибку?
+
+0:08:21.379,0:08:25.219
+А потому что был лишь POST-запрос
+а не GET-запрос.
+
+0:08:25.219,0:08:26.830
+что нормально, именно так как я хотел
+
+0:08:26.830,0:08:29.919
+но здесь я не написал
+что делать после того как мы
+
+0:08:29.919,0:08:30.770
+сделали
+
+0:08:30.770,0:08:31.829
+POST-запрос.
+
+0:08:31.829,0:08:34.150
+Так что нужно это сделать
+
+0:08:34.150,0:08:35.370
+и я пишу
+
+0:08:35.370,0:08:38.470
+если POST-запрос этой на эту страницу
+
+0:08:38.470,0:08:43.420
+то запускать подпрограмму
+
+0:08:43.420,0:08:45.440
+которая делает что-то другое.
+
+0:08:45.440,0:08:48.170
+Не забываем точку с запятой.
+
+0:08:48.170,0:08:49.670
+Так что же должна она делать?
+
+0:08:49.670,0:08:54.400
+Нужно использовать метод params
+
+0:08:54.400,0:08:55.230
+к значению title
+
+0:08:55.230,0:08:57.760
+для начала выведем только это
+
+
+0:08:57.760,0:09:00.450
+останавливаем приложение
+
+0:09:00.450,0:09:01.939
+перезапускаем его
+
+0:09:01.939,0:09:03.079
+и смотрим
+
+0:09:03.079,0:09:06.029
+если перезагрузить страницу и переотправить данные
+
+0:09:06.029,0:09:10.550
+я получаю hello что является заголовком
+что я написал
+
+0:09:10.550,0:09:14.420
+это работает. Теперь нужно это где-то сохранить.
+Можно использовать что-то вроде
+
+0:09:14.420,0:09:15.470
+базы данных
+
+0:09:15.470,0:09:20.520
+но в данном случае хотелось бы сделать проще. Я собираюсь использовать
+
+0:09:20.520,0:09:21.180
+файл JSON.
+
+0:09:21.180,0:09:22.980
+А где же этот файл?
+
+0:09:22.980,0:09:25.700
+Это нужно определить
+в файле конфигурации.
+
+0:09:25.700,0:09:28.540
+Здесь я ввожу dwimmer
+
+0:09:28.540,0:09:30.300
+это имя приложения
+
+0:09:30.300,0:09:35.700
+под ним я сохраняю
+все данные приложения
+
+0:09:35.700,0:09:43.340
+Я называю поле json п определяю
+
+0:09:43.340,0:09:45.620
+расположение файла.
+
+0:09:45.620,0:09:49.130
+В котором будут храниться все данные.
+
+0:09:49.130,0:09:52.540
+Этот файл будет моей базой данных.
+
+0:09:52.540,0:09:55.310
+как мне получать эти данные
+
+0:09:55.310,0:09:57.680
+Я пишу config
+
+0:09:57.680,0:10:01.490
+эта функция получает все данные конфигурации
+
+0:10:01.490,0:10:05.200
+здесь ввожу ключи
+
+0:10:05.200,0:10:10.250
+их два. это имя файла
+
+0:10:10.250,0:10:11.600
+где должны быть данные.
+
+0:10:11.600,0:10:15.960
+Для простоты поместим его в переменную
+
+0:10:17.569,0:10:22.810
+Теперь нужно прочитать данные в этом файле.
+
+0:10:22.810,0:10:27.960
+Пишем read_file и имя файла
+и тоже помещаем в перерменную
+
+0:10:27.960,0:10:31.700
+но это и будет содержимое файла json.
+Верно? Поэтому то что мы сохраняем
+
+0:10:31.700,0:10:33.510
+и будет json. И я
+
+0:10:33.510,0:10:35.510
+помещаю в переменную под названием $json
+
+0:10:35.510,0:10:38.250
+я всё еще должен включить эти данные
+
+0:10:38.250,0:10:40.480
+в структуру данных Perl
+
+0:10:41.640,0:10:44.620
+from_json - функция которая
+
+0:10:44.620,0:10:47.780
+принимает строку json
+
+0:10:47.780,0:10:52.200
+и возвращает данные которые нам нужны
+
+0:10:52.200,0:10:53.790
+это структура данных.
+
+0:10:53.790,0:10:58.170
+Очевидно, что при первом запуске
+json файла еще не будет. В этом случае
+
+0:10:58.170,0:11:00.779
+хэш должен быть просто пустым
+
+0:11:01.990,0:11:05.840
+Это можно осуществить проверив
+
+0:11:05.840,0:11:07.900
+существует ли файл
+
+0:11:07.900,0:11:10.010
+если существует, то мы...
+
+0:11:10.010,0:11:12.310
+читаем файл, а если нет
+
+0:11:12.310,0:11:13.380
+мы просто
+
+0:11:13.380,0:11:16.559
+возвращаем строку с двумя фигурными скобками
+
+0:11:16.559,0:11:20.250
+именно так обозначается пустой хэш в json.
+
+0:11:20.250,0:11:24.210
+Так мы получаем пустой json
+
+0:11:24.210,0:11:29.990
+затем переменная data а после нее
+нужно добавить новую
+
+0:11:29.990,0:11:31.180
+запись в блоге.
+
+0:11:31.180,0:11:35.790
+Сначала нужно получить метку.
+У нас будет
+
+0:11:35.790,0:11:36.930
+новая переменная $now
+
+0:11:36.930,0:11:39.050
+и в ней будет храниться метка
+
+0:11:39.050,0:11:40.240
+затем
+
+0:11:40.240,0:11:43.550
+добавляем в переменную data
+
+0:11:43.550,0:11:46.430
+"now" будет ключом
+
+0:11:46.430,0:11:50.279
+мы сохраняем части записей
+
+0:11:50.279,0:11:52.320
+в соответствии с их меткой,
+
+0:11:52.320,0:11:54.129
+добавляем
+
+0:11:54.129,0:11:55.780
+заголовок
+
+0:11:55.780,0:12:01.080
+который я просто беру отсюда
+потому что там он больше не нужен
+
+0:12:01.080,0:12:03.930
+также есть текст
+
+0:12:03.930,0:12:05.870
+написанный пользователем
+
+0:12:05.870,0:12:09.420
+беру его из params text
+
+0:12:10.820,0:12:11.560
+Теперь
+
+0:12:11.560,0:12:12.820
+имеются данные,
+
+0:12:12.820,0:12:14.779
+новая запись хранится в $data
+
+0:12:14.779,0:12:16.510
+и нужно просто её сохранить
+
+0:12:16.510,0:12:19.459
+используя write_file
+
+0:12:19.459,0:12:21.620
+задаём имя файла
+
+0:12:21.620,0:12:22.960
+а также
+
+0:12:22.960,0:12:25.890
+данные. Теперь $data
+
+0:12:25.890,0:12:27.340
+это структура данных Perl и хотелось бы
+
+0:12:27.340,0:12:32.960
+сохранить как json, для этого нужно
+конвертировать с помощью to_json.
+
+0:12:32.960,0:12:35.729
+Всё.
+Как только это мы закончили
+
+0:12:37.410,0:12:38.690
+нужно бы показать что-то пользователю
+
+0:12:38.690,0:12:42.730
+и перенаправить его
+
+0:12:42.730,0:12:47.330
+перенаправить пользователя в корень,
+
+0:12:47.330,0:12:48.450
+на главную страницу.
+
+0:12:48.450,0:12:50.009
+На главной мы пока
+
+0:12:50.009,0:12:52.679
+не показываем контент
+
+0:12:52.679,0:12:55.120
+но сначала давайте посмотрим, как это работает?
+
+0:12:55.120,0:12:59.790
+Для этого нужно остановить приложение
+и запустить его снова
+
+0:12:59.790,0:13:02.800
+и если я не наделал ошибок,
+всё должно работать.
+
+0:13:02.800,0:13:04.770
+это
+
+0:13:04.770,0:13:11.560
+форма. я её заполняю и нажимаю отправить
+и я получаю ошибку в ходе выполнения.
+
+0:13:11.560,0:13:13.699
+Невозможно найти метод write_file.
+
+0:13:13.699,0:13:14.890
+Очевидно
+
+0:13:14.890,0:13:16.500
+это произошло потому
+
+0:13:16.500,0:13:17.470
+...
+
+0:13:17.470,0:13:20.990
+что from_json и to_json
+это часть Dancer
+
+0:13:20.990,0:13:23.460
+а read_file и the write_file - нет.
+
+
+0:13:23.460,0:13:26.900
+Нужно подключить модуль
+который позволит работать с ними.
+
+0:13:26.900,0:13:27.980
+use
+
+0:13:27.980,0:13:29.500
+File
+
+0:13:29.500,0:13:31.420
+::
+
+0:13:31.420,0:13:32.260
+Slurp
+
+0:13:32.260,0:13:37.210
+это имя модуля в котором есть функции read_file и
+
+0:13:37.210,0:13:41.230
+write_file.
+
+0:13:41.230,0:13:46.260
+Я сохраняюсь. Перезапускаю приложение
+потому что я сделал изменения в коде
+
+0:13:46.260,0:13:49.490
+и пробую снова. я возвращаюсь
+
+0:13:49.490,0:13:50.590
+
+0:13:50.590,0:13:52.130
+посылаю снова
+
+0:13:54.690,0:13:58.860
+вроде всё в порядке. я вернулся ..
+
+0:13:58.860,0:14:02.020
+на главную страницу
+но я не вижу
+
+0:14:02.020,0:14:05.720
+пока никаких данных, узнаем
+сохранились ли данные вообще
+
+0:14:05.720,0:14:11.329
+Возвращаюсь в Padre перехожу в рабочий каталог.
+Здесь должен быть
+
+0:14:11.329,0:14:15.920
+dwimmer.json и он здесь. Вот метка
+
+0:14:15.920,0:14:18.880
+текст и заголовок.
+
+0:14:18.880,0:14:23.190
+Похоже в файл всё сохраняется нормально.
+Давайте теперь покажем это
+
+0:14:23.190,0:14:23.950
+на
+
+0:14:23.950,0:14:25.010
+данной странице.
+
+0:14:25.010,0:14:26.820
+Для этого
+
+0:14:26.820,0:14:28.660
+будем менять
+
+0:14:28.660,0:14:31.630
+главную страницу и нам нужно
+
+0:14:31.630,0:14:33.450
+заново прочесть данные.
+
+0:14:33.450,0:14:37.720
+Точно так же как и раньше. Просто копируем и вставляем
+
+0:14:40.590,0:14:43.700
+и все данные хранятся
+
+0:14:43.700,0:14:45.830
+в переменной $data
+
+0:14:45.830,0:14:49.720
+и нужно передать её как
+параметр в шаблон.
+
+0:14:52.440,0:14:54.030
+и мы просто посылаем
+
+0:14:54.030,0:14:56.220
+как параметр шаблона.
+
+0:14:57.480,0:15:00.060
+Давайте посмотрим что у нас в шаблоне.
+
+0:15:00.060,0:15:01.840
+Вот он.
+
+0:15:01.840,0:15:02.890
+Здесь
+
+0:15:02.890,0:15:04.549
+хотелось бы показать
+
+0:15:04.549,0:15:05.940
+те данные
+
+0:15:05.940,0:15:09.670
+и нам нужно получить хэш
+
+0:15:09.670,0:15:11.749
+в Template::Toolkit
+
+0:15:11.749,0:15:13.530
+и показать пользователю
+
+0:15:13.530,0:15:18.220
+В Template::Toolkit это встроенная вещь
+здесь есть цикл for
+
+0:15:18.220,0:15:22.620
+и мы помещаем в переменную например
+
+0:15:22.620,0:15:23.610
+page
+
+0:15:23.610,0:15:28.690
+и в этом цикле мы можем работать с data
+
+0:15:28.690,0:15:30.720
+и перебрать все её ключи
+
+0:15:30.720,0:15:35.450
+Нужно чтобы они были отсортированы
+
+0:15:35.450,0:15:36.950
+и мы пишем sort
+
+0:15:36.950,0:15:41.200
+Так мы пройдем по всем элементам этого хэша
+
+0:15:41.200,0:15:42.340
+теперь
+
+0:15:42.340,0:15:44.800
+нужно написать END.
+
+0:15:44.800,0:15:47.280
+И внутри вывести на страницу
+
+0:15:47.280,0:15:51.430
+то что находится в переменной "p"
+
+0:15:51.430,0:15:53.580
+которая будет меткой.
+
+0:15:53.580,0:15:55.860
+Теперь если я вернусь в...
+
+0:15:55.860,0:16:01.110
+Нужно перезагрузить приложение потому что я также изменял код
+
+0:16:01.110,0:16:06.560
+Если перезагрузить страницу
+то можно видеть метку единственного поста.
+
+0:16:06.560,0:16:08.020
+Это конечно мило
+
+0:16:08.020,0:16:09.130
+но всё-таки хочется
+
+0:16:09.130,0:16:11.830
+видеть заголовок с текстом.
+
+0:16:11.830,0:16:17.080
+В Template::Toolkit это можно сделать
+написав что нужно выводить
+
+0:16:17.080,0:16:18.170
+data
+
+0:16:18.170,0:16:22.380
+здесь p уже переменная так что
+поставлю знак $ перед ней
+
+0:16:22.380,0:16:25.550
+и ключ "title".
+
+0:16:25.550,0:16:29.800
+Также хотелось бы видеть текст. Верно?
+
+0:16:32.730,0:16:36.090
+Если вернуться на страницу и обновить её,
+не нужно перезагружать
+
+0:16:36.090,0:16:39.750
+приложение так как лишь шаблон был изменен
+
+0:16:39.750,0:16:44.950
+то можно видеть "hello world" это заголовок с текстом
+
+0:16:44.950,0:16:46.630
+уже лучше
+
+0:16:46.630,0:16:49.060
+Можно поставить тэг H2
+
+0:16:49.060,0:16:53.350
+вокруг заголовка
+
+0:16:53.350,0:16:54.409
+а также
+
+0:16:54.409,0:16:57.010
+горизонтальную линию перед
+
+0:16:57.010,0:17:00.600
+перед
+
+0:17:00.600,0:17:03.199
+записью в блоге. Итак
+
+0:17:03.199,0:17:07.780
+вот место для заголовка и сам заголовок, гласящий “hello”.
+Теперь
+
+0:17:07.780,0:17:09.180
+создадим еще один пост
+
+0:17:09.180,0:17:14.620
+чтобы убедиться в том что все работает...
+итак второй пост
+
+0:17:14.620,0:17:16.170
+больше текста
+
+0:17:16.170,0:17:17.760
+больше текста
+
+0:17:17.760,0:17:19.170
+и я нажимаю отправить
+
+0:17:19.170,0:17:22.400
+теперь мы видим первый пост
+и второй пост
+
+0:17:22.400,0:17:23.700
+и есть движок для блога
+
+0:17:23.700,0:17:25.909
+Спасибо за просмотр ... если вы хотите
+
+0:17:25.909,0:17:27.590
+писать посты на Dwimmer
+
+0:17:27.590,0:17:31.970
+то есть dwimmer.org или можете
+зайти на perldancer.org и скачать там
+
+0:17:31.970,0:17:34.350
+он классный, мне нравится.
+
+0:17:34.350,0:17:35.160
+Большое спасибо за просмотр
+Пока-пока
View
1,345 2011.07.19_modern_perl_tutorial_02/russian.sbv
@@ -0,0 +1,1345 @@
+0:00:00.919,0:00:02.660
+Привет, и снова добро пожаловать на канал!
+
+0:00:02.660,0:00:05.530
+В этот раз я собираюсь рассказать о
+
+0:00:05.530,0:00:08.060
+структурах данных в Perl.
+
+0:00:08.060,0:00:08.809
+В частности, эта
+
+0:00:08.809,0:00:11.989
+презентация расскажет о скалярах.
+
+0:00:11.989,0:00:16.669
+Здесь вы видите Padre, среду разработки.
+Это — её разрабатываемая версия.
+
+0:00:16.669,0:00:21.309
+Первое, что надо сделать — создать
+
+0:00:21.309,0:00:22.920
+сценарий Perl 5.
+
+0:00:22.920,0:00:26.239
+В нём уже есть самое необходимое, в том числе
+
+0:00:26.239,0:00:28.949
+операторы «use».
+
+0:00:28.949,0:00:32.580
+В Perl есть три вида
+
+0:00:32.580,0:00:36.350
+структур данных: скаляры, массивы и хэши.
+
+0:00:36.350,0:00:38.499
+Скаляры могут содержать
+
+0:00:38.499,0:00:42.869
+число или строку, строку с определённым значением
+или ссылку на более сложную
+
+0:00:42.869,0:00:44.910
+структуру данных.
+
+0:00:44.910,0:00:48.410
+Об этом мы поговорим позже.
+
+0:00:48.410,0:00:51.810
+Каждая структура данных
+
+0:00:51.810,0:00:54.060
+имеет собственное обозначение,
+
+0:00:54.060,0:00:55.379
+которое мы называем сигилом.
+
+0:00:55.379,0:00:58.850
+Он является первым символом названия переменной.
+
+0:00:58.850,0:01:03.550
+Скаляры имеют знак доллара ($),
+массивы — знак «собака» (@),
+
+0:01:03.550,0:01:08.260
+и хэши, также называемые словарями
+или таблицами поиска,
+
+0:01:08.260,0:01:10.960
+имеют знак процента (%).
+
+0:01:10.960,0:01:13.250
+Теперь поговорим о скалярах.
+
+0:01:13.250,0:01:17.799
+Каждая скалярная переменная начинается
+со знака доллара ($),
+
+0:01:17.799,0:01:18.670
+и лишь затем следуют
+
+0:01:18.670,0:01:20.620
+буквы, цифры
+
+0:01:20.620,0:01:25.010
+и знаки подчеркивания. Например, у вас
+может быть такая переменная
+
+0:01:25.010,0:01:26.390
+или
+
+0:01:26.390,0:01:28.020
+определённое значение,
+
+0:01:28.020,0:01:30.049
+или можно указать
+
+0:01:30.049,0:01:31.880
+«длинное_название» (long_name),
+
+0:01:31.880,0:01:35.509
+состоящее из строчных букв
+
+0:01:35.509,0:01:38.770
+и знаков подчёркивания между словами,
+
+0:01:38.770,0:01:42.040
+или, как вариант:
+
+0:01:42.040,0:01:46.160
+«ЭтоДлинноеНазвание» (ThisIsALongName).
+
+0:01:46.160,0:01:47.860
+Такой стиль допустим, хотя
+
+0:01:47.860,0:01:48.990
+целое сообщество
+
+0:01:48.990,0:01:54.229
+предпочитает названия со всеми
+строчными буквами
+
+0:01:54.229,0:01:57.230
+и знаками подчёркивания.
+
+0:01:57.230,0:02:00.690
+Поскольку используется оператор «use strict»,
+
+0:02:00.690,0:02:05.439
+вам будет нужно объявлять все переменные
+с ключевым словом «my».
+
+0:02:05.439,0:02:07.360
+Итак, я объявляю переменную «my»,
+
+0:02:07.360,0:02:08.719
+«my $name»,
+
+0:02:08.719,0:02:11.359
+и задаю значение «foo».
+
+0:02:11.359,0:02:14.319
+Теперь я могу вывести... простите,
+
+0:02:14.319,0:02:17.949
+теперь я могу вывести содержимое переменной.
+
+0:02:17.949,0:02:19.859
+Если я сейчас нажму «F5»,
+
+0:02:19.859,0:02:20.969
+оно...
+
+0:02:20.969,0:02:22.989
+сначала я должен сохранить сценарий,
+
+0:02:22.989,0:02:25.059
+назову его просто — script.pl.
+
+0:02:25.059,0:02:26.500
+И тогда он
+
+0:02:26.500,0:02:30.309
+откроет отдельное окно, где
+отобразит результат «foo».
+
+0:02:30.309,0:02:34.680
+Для этого мне и нужно это окно.
+
+0:02:34.680,0:02:38.989
+В общем, делается это так. Сначала мы
+объявляем переменную с «my», и затем
+
+0:02:38.989,0:02:40.260
+придаём
+
+0:02:40.260,0:02:43.379
+этой переменной значение, которое можем вывести.
+
+0:02:43.379,0:02:44.460
+Не обязательно осуществлять
+
+0:02:44.460,0:02:46.669
+присвоение сразу. Мы можем
+
+0:02:46.669,0:02:51.739
+объявить переменную и позднее задать
+её значение. Если я так сделаю,
+
+0:02:51.739,0:02:55.109
+я получу тот же результат.
+
+0:02:55.109,0:02:59.699
+Обычно предпочтительнее первый вариант.
+Если логика кода позволяет,
+
+0:02:59.699,0:03:01.709
+вам стоит
+
+0:03:01.709,0:03:05.689
+сразу, при объявлении, присвоить значение.
+
+0:03:05.689,0:03:10.189
+Но это не всегда возможно. Бывают случаи,
+когда вы должны
+
+0:03:10.189,0:03:14.739
+сначала объявить переменную, и потом уже
+можно задать её значение.
+
+0:03:14.739,0:03:16.779
+Теперь посмотрим, что произойдёт,
+
+0:03:16.779,0:03:20.159
+если переменная не определена,
+
+0:03:20.159,0:03:23.569
+то есть, не имеет значения — я просто объявляю её.
+
+0:03:23.569,0:03:26.579
+Она содержит значение «undef».
+
+0:03:26.579,0:03:31.649
+Она не определена. Это как «NULL»...
+
+0:03:31.649,0:03:32.649
+
+
+0:03:32.649,0:03:36.509
+Это как «NULL» в базах данных, но
+ведёт себя несколько по-другому.
+
+0:03:36.509,0:03:39.890
+Например, мы можем проверить,
+
+0:03:39.890,0:03:41.879
+содержит ли переменная
+
+0:03:41.879,0:03:46.339
+какое-либо другое значение или только «undef».
+
+0:03:46.339,0:03:52.859
+Мы можем использовать ключевое слово «defined», чтобы
+проверить, определена ли она, и вывести результат:
+
+0:03:52.859,0:03:54.719
+«say 'defined'»
+
+0:03:54.719,0:03:57.459
+«else»
+
+0:03:57.459,0:04:00.159
+«say 'no'»
+
+0:04:00.159,0:04:01.920
+И когда я запущу этот код,
+
+0:04:01.920,0:04:03.649
+вы увидите «no»,
+
+0:04:03.649,0:04:06.369
+а затем «foo».
+
+0:04:06.369,0:04:08.999
+С другой стороны, если я возьму тот же код
+
+0:04:08.999,0:04:13.189
+и помещу его и после присваивания,
+
+0:04:13.189,0:04:15.709
+вы увидите сначала результат «no»,
+
+0:04:15.709,0:04:16.639
+затем
+
+0:04:16.639,0:04:19.039
+программа пишет, что переменная определена,
+
+0:04:19.039,0:04:20.259
+и выводит
+
+0:04:20.259,0:04:21.979
+значение «foo», потому что
+
+0:04:21.979,0:04:24.610
+вывод значения происходит после
+
+0:04:24.610,0:04:28.250
+вывода «defined».
+
+0:04:28.250,0:04:32.430
+Итак, здесь видно, что значение ещё не задано,
+здесь мы присваиваем значение, и
+
+0:04:32.430,0:04:36.040
+здесь переменная становится определённой.
+
+0:04:36.040,0:04:38.990
+Мы потом можем задать значение
+
+0:04:38.990,0:04:43.490
+«undef» заново. Например, здесь
+можем указать, что «$name»
+
+0:04:43.490,0:04:44.659
+равна
+
+0:04:44.659,0:04:46.479
+«undef».
+
+0:04:46.479,0:04:49.210
+Я не буду копировать тот же самый код.
+
+0:04:49.210,0:04:54.899
+На этом этапе значение переменной снова «undef».
+
+0:04:54.899,0:04:56.370
+Переменные
+
+0:04:56.370,0:04:59.319
+могут содержать числа или строки
+
+0:04:59.319,0:05:01.169
+так что вы можете...
+
+0:05:01.169,0:05:03.710
+Давайте начнём с начала.
+
+0:05:03.710,0:05:06.159
+Вы можете объявить переменную, например,
+
+0:05:06.159,0:05:09.030
+«$x».
+
+0:05:09.030,0:05:12.249
+И задать в качестве её содержимого строку.
+
+0:05:12.249,0:05:15.639
+Затем у вас есть возможность вывести переменную.
+
+0:05:15.639,0:05:19.210
+А потом можно присвоить в качестве значения
+той же переменной число,
+
+0:05:19.210,0:05:21.800
+и снова вывести её.
+
+0:05:21.800,0:05:24.769
+И если я запущу код, вы увидите, что
+
+0:05:24.769,0:05:27.809
+в начале это была строка, и затем — число.
+
+0:05:27.809,0:05:30.529
+Perl об этом не беспокоится. Perl не связывает
+
+0:05:30.529,0:05:33.870
+переменные с типами,
+
+0:05:33.870,0:05:36.410
+в нём нет ничего такого.
+
+0:05:36.410,0:05:42.249
+Так работают все операторы.
+
+0:05:42.249,0:05:43.740
+Работая с другими языками,
+
+0:05:43.740,0:05:46.060
+вы могли привыкнуть
+
+0:05:46.060,0:05:47.199
+к тому, что
+
+0:05:47.199,0:05:50.610
+с разными значениями, разными переменными,
+
+0:05:50.610,0:05:52.559
+связанными с типами переменных,
+
+0:05:52.559,0:05:53.639
+операторы
+
+0:05:53.639,0:05:55.930
+действуют по-разному.
+
+0:05:55.930,0:05:57.099
+В Perl
+
+0:05:57.099,0:05:59.620
+всё совсем по-другому.
+
+0:05:59.620,0:06:01.960
+Ни переменные,
+
+0:06:01.960,0:06:03.599
+ни операнды
+
+0:06:03.599,0:06:06.230
+не определяют, что будет делать оператор.
+
+0:06:06.230,0:06:11.460
+Здесь оператор решает, как поведут себя
+операнды и переменные.
+
+0:06:11.460,0:06:17.630
+Так что я возьму другой пример.
+Допустим, у меня есть переменная «$z»,
+
+0:06:17.630,0:06:19.620
+равная 3.
+
+0:06:19.620,0:06:25.180
+Я могу вывести её и взять другую переменную,
+
+0:06:25.180,0:06:26.889
+например, «$y»,
+
+0:06:26.889,0:06:28.800
+равную 4,
+
+0:06:28.800,0:06:29.869
+и затем
+
+0:06:29.869,0:06:32.749
+я тоже вывожу её.
+
+0:06:32.749,0:06:37.030
+Что нам дальше делать? Попробуем
+
+0:06:37.030,0:06:40.400
+взять «$z» и прибавить к ней «$y».
+
+0:06:40.400,0:06:42.789
+А затем попробуем
+
+0:06:42.789,0:06:47.330
+взять «$z»
+
+0:06:47.330,0:06:50.919
+и произведём конкатенация с «$y», так что
+
+0:06:50.919,0:06:54.119
+два значения будут сцеплены,
+
+0:06:54.119,0:06:58.609
+и третье, например —
+
+0:06:58.609,0:07:00.480
+«$z x $y», что будет умножением,
+
+0:07:00.480,0:07:02.209
+или...
+
+0:07:02.209,0:07:08.210
+вернее, повторением переменной, извините.
+
+0:07:08.210,0:07:11.300
+Итак, что мы получим, если я запущу код:
+
+0:07:11.300,0:07:14.550
+сначала он выведет два значения, 3 и 4.
+
+0:07:14.550,0:07:15.879
+Затем плюс
+
+0:07:15.879,0:07:19.770
+осуществит сложение чисел, которое возьмёт
+
+0:07:19.770,0:07:25.379
+значения двух скалярных переменных, 3 и 4,
+и сложит их, как числа.
+
+0:07:25.379,0:07:26.389
+Точка
+
+0:07:26.389,0:07:27.949
+осуществляет конкатенацию.
+
+0:07:27.949,0:07:29.639
+Она возьмёт две строки,
+
+0:07:29.639,0:07:33.249
+попросту преобразует два числа в строки
+
+0:07:33.249,0:07:34.709
+и выведет
+
+0:07:34.709,0:07:36.920
+вместе тройку и четвёрку,
+
+0:07:36.920,0:07:38.530
+или 34, если
+
+0:07:38.530,0:07:39.999
+рассматривать это как число.
+
+0:07:39.999,0:07:43.529
+И последнее - оператор повторения.
+Он берёт левую часть,
+
+0:07:43.529,0:07:45.359
+содержимое «$z»,
+
+0:07:45.359,0:07:46.759
+обрабатывает его как строку,
+
+0:07:46.759,0:07:47.409
+и затем
+
+0:07:47.409,0:07:49.340
+повторяет его
+
+0:07:49.340,0:07:50.349
+столько раз,
+
+0:07:50.349,0:07:53.400
+сколько указано в правой части.
+
+0:07:53.400,0:07:56.189
+Поскольку в левой части содержится строка «3»,
+
+0:07:56.189,0:08:00.349
+а правая часть содержит число 4,
+
+0:08:00.349,0:08:03.210
+он 4 раза выведет
+
+0:08:03.210,0:08:05.499
+символ «3».
+
+0:08:05.499,0:08:06.870
+Как вы видите,
+
+0:08:06.870,0:08:08.159
+здесь оператор —
+
+0:08:08.159,0:08:09.789
+то, что указывает
+
+0:08:09.789,0:08:12.800
+операндам, будут ли они вести себя как числа
+
+0:08:12.800,0:08:15.499
+или как строки.
+
+0:08:15.499,0:08:17.069
+Но что произойдёт, если
+
+0:08:17.069,0:08:18.189
+ни один из них
+
+0:08:18.189,0:08:19.669
+не будет числом?
+
+0:08:19.669,0:08:22.460
+Что произойдёт, если они
+
+0:08:22.460,0:08:24.649
+оба будут строками?
+
+0:08:24.649,0:08:26.509
+Если я сейчас запущу код,
+
+0:08:26.509,0:08:28.729
+мы увидим, что результат тот же,
+
+0:08:28.729,0:08:30.740
+посколько Perl автоматически преобразует
+
+0:08:30.740,0:08:32.590
+числа в строки
+
+0:08:32.590,0:08:35.310
+и строки в числа при необходимости,
+
+0:08:35.310,0:08:38.260
+если оператор этого требует.
+
+0:08:38.260,0:08:41.480
+Это нормально. А что происходит, если один из
+
+0:08:41.480,0:08:42.850
+операндов — строка,
+
+0:08:42.850,0:08:46.860
+а другой — число? Посмотрим, что произойдёт
+
+0:08:46.860,0:08:48.370
+в этом случае.
+
+0:08:48.370,0:08:50.790
+Я запускаю код, и получаю то же самое!
+
+0:08:50.790,0:08:52.820
+Perl об этом не волнуется.
+
+0:08:52.820,0:08:54.590
+Он автоматически преобразует
+
+0:08:54.590,0:08:56.930
+(или вручную, если вы захотите)
+
+0:08:56.930,0:09:01.060
+числа в строки или строки в числа, когда
+
+0:09:01.060,0:09:03.750
+это необходимо.
+
+0:09:03.750,0:09:04.789
+Всё в порядке,
+
+0:09:04.789,0:09:06.300
+в общем-то.
+
+0:09:06.300,0:09:07.660
+Но бывают другие случаи,
+
+0:09:07.660,0:09:09.270
+когда
+
+0:09:09.270,0:09:11.220
+это преобразование может не быть
+
+0:09:11.220,0:09:13.600
+стопроцентным. Итак,
+
+0:09:13.600,0:09:16.960
+что будет, если значение, например,
+
+0:09:16.960,0:09:20.890
+«3.14 is pi».
+
+0:09:20.890,0:09:22.540
+Между прочим,
+
+0:09:22.540,0:09:27.090
+это преобразование называется контекстом.
+
+0:09:27.090,0:09:29.550
+Причина, по которой
+
+0:09:29.550,0:09:31.910
+Perl преобразует числа, в том, что
+
+0:09:31.910,0:09:35.140
+Perl имеет контекст. Так, у нас есть
+числовой контекст
+
+0:09:35.140,0:09:37.290
+и строковой контекст.
+
+0:09:37.290,0:09:41.610
+Числовой контекст и строковой контекст.
+
+0:09:41.610,0:09:44.470
+Я введу это здесь,
+
+0:09:44.470,0:09:46.250
+чтобы у вас не возникало сложностей из-за моего
+
+0:09:46.250,0:09:48.260
+произношения.
+
+0:09:48.260,0:09:52.160
+Короче, что произойдёт в этом случае.
+У вас есть число 3
+
+0:09:52.160,0:09:54.040
+и строка, которая
+
+0:09:54.040,0:09:56.209
+не преобразуется в число
+
+0:09:56.209,0:09:57.100
+напрямую.
+
+0:09:57.100,0:10:01.390
+Что будет, если запущу этот код сейчас.
+
+0:10:01.390,0:10:03.140
+Возьмём, как есть.
+
+0:10:03.140,0:10:06.870
+Первое — цифра 3, как и должно быть.
+
+0:10:06.870,0:10:10.670
+Затем следует «3.14 is pi»,
+
+0:10:10.670,0:10:14.910
+это результат вывода содержимого «$y».
+
+0:10:14.910,0:10:17.750
+Затем я получаю это предупреждение
+
+0:10:17.750,0:10:20.370
+и результат «6.14».
+
+0:10:20.370,0:10:25.350
+Предупреждение появилось оттого,
+что мы попытались использовать
+
+0:10:25.350,0:10:26.520
+эту строку
+
+0:10:26.520,0:10:28.120
+в числовом контексте
+
+0:10:28.120,0:10:30.780
+при сложении на строке..
+
+0:10:30.780,0:10:33.250
+Да, строке 12.
+
+0:10:33.250,0:10:36.960
+Вот она, эта строка. Теперь мы её видим.
+
+0:10:36.960,0:10:42.210
+Извините.
+
+0:10:42.210,0:10:43.890
+Да, вот это окно.
+
+0:10:43.890,0:10:49.740
+Вы можете видеть это здесь.
+
+0:10:49.740,0:10:51.520
+Вот строка, которая
+
+0:10:51.520,0:10:53.820
+была преобразована в число.
+
+0:10:53.820,0:10:56.990
+Мы получаем предупреждение.
+Оно есть только потому, что мы
+
+0:10:56.990,0:10:59.500
+попросили выводить предупреждения.
+
+0:10:59.500,0:11:03.260
+Их использование важно, иначе может
+незаметно совершиться
+
+0:11:03.260,0:11:05.440
+что-то, что вы, возможно, хотели,
+
+0:11:05.440,0:11:08.750
+но это будет означать наличие проблемы.
+
+0:11:08.750,0:11:10.529
+Сейчас это
+
+0:11:10.529,0:11:12.860
+«3.14 is pi»
+
+0:11:12.860,0:11:17.030
+Но при сложении на самом деле
+было использовано только «3.14».
+
+0:11:17.030,0:11:19.160
+Вот что Perl делает:
+
+0:11:19.160,0:11:21.440
+берёт левую часть строки,
+
+0:11:21.440,0:11:27.829
+анализирует её и пытается использовать как число.
+
+0:11:27.829,0:11:32.160
+В этом смысл. Здесь есть пробел. Но он
+
+0:11:32.160,0:11:35.249
+останавливает преобразование.
+Он не может быть преобразован в число.
+
+0:11:35.249,0:11:38.750
+С этого места дальнейшее значение не будет учтено.
+
+0:11:38.750,0:11:40.430
+По этой причине
+
+0:11:40.430,0:11:41.940
+Perl
+
+0:11:41.940,0:11:44.809
+использовал «3.14»
+
+0:11:44.809,0:11:46.020
+как значение
+
+0:11:46.020,0:11:48.550
+«$y» в этой операции сложения.
+
+0:11:48.550,0:11:49.910
+Вам, наверное,
+
+0:11:49.910,0:11:52.620
+интересно, что случилось с переменной «$y».
+
+0:11:52.620,0:11:54.000
+Была ли она сама преобразована?
+
+0:11:54.000,0:11:55.579
+Или только для использования
+
+0:11:55.579,0:11:56.930
+здесь, при сложении?
+
+0:11:56.930,0:11:57.990
+Как вы видите
+
+0:11:57.990,0:11:59.300
+в этой операции конкатенации,
+
+0:11:59.300,0:12:00.110
+здесь
+
+0:12:00.110,0:12:03.519
+мы получаем значение «3» из «$z»
+
+0:12:03.519,0:12:06.530
+и «3.14 is pi»
+
+0:12:06.530,0:12:10.330
+из переменной «$y». Как видно, «$y» не изменилась.
+
+0:12:10.330,0:12:12.070
+«$y» по-прежнему
+
+0:12:12.070,0:12:14.010
+та же строка.
+
+0:12:14.010,0:12:15.970
+А если вы посмотрите на третий пример,
+
+0:12:15.970,0:12:18.370
+вы заметите что это «$z»,
+
+0:12:18.370,0:12:20.100
+повторенная «$y» раз.
+
+0:12:20.100,0:12:22.790
+Вы могли ожидать, что получите
+
+0:12:22.790,0:12:26.070
+цифру «3» 3,14 раза, но
+
+0:12:26.070,0:12:31.080
+Perl не может это вывести...
+
+0:12:31.080,0:12:32.870
+Возможно вывести только
+
+0:12:32.870,0:12:34.960
+целые числа в данном случае...
+
+0:12:34.960,0:12:36.200
+Итак,
+
+0:12:36.200,0:12:39.670
+он преобразует «3.14» в «3» и использует это
+
+0:12:39.670,0:12:41.590
+для умножения...
+
+0:12:41.590,0:12:42.880
+для повторения.
+
+0:12:42.880,0:12:44.920
+Но вы не увидите повторного предупреждения,
+
+0:12:44.920,0:12:47.360
+как можно было ожидать.
+
+0:12:47.360,0:12:49.040
+Почему же?
+
+0:12:49.040,0:12:50.190
+Не потому ли,
+
+0:12:50.190,0:12:53.190
+что данная операция не генерирует предупреждение?
+
+0:12:53.190,0:12:56.240
+Давайте кликнем сюда и
+
+0:12:56.240,0:12:58.100
+закомментируем...
+
+0:12:58.100,0:12:59.990
+закомментируем этот участок кода
+
+0:12:59.990,0:13:01.370
+и запустим его снова.
+
+0:13:01.370,0:13:02.870
+Теперь вы
+
+0:13:02.870,0:13:05.080
+увидите, что предупреждение возникает
+
+0:13:05.080,0:13:06.560
+во время повторения.
+
+0:13:06.560,0:13:09.010
+Но ранее мы не получали
+
+0:13:09.010,0:13:11.220
+этого предупреждения.
+
+0:13:11.220,0:13:15.350
+А почему же? Потому что предупреждения
+не было. А причина
+
+0:13:15.350,0:13:17.120
+в данный момент здесь.
+
+0:13:17.120,0:13:19.530
+Когда для операции сложения
+
+0:13:19.530,0:13:21.940
+Perl преобразовал
+
+0:13:21.940,0:13:26.399
+строку в число, это число было сохранено
+
+0:13:26.399,0:13:27.920
+в магическом месте
+
+0:13:27.920,0:13:30.050
+в «$y»
+
+0:13:30.050,0:13:34.010
+С этого момента у «$y» было, фактически,
+два значения: значение строки и
+
+0:13:34.010,0:13:35.310
+числовое значение.
+
+0:13:35.310,0:13:36.930
+Это для того, чтобы
+
+0:13:36.930,0:13:39.010
+избежать преобразования в дальнейшем.
+
+0:13:39.010,0:13:44.620
+Когда мы дошли до этого места, чтобы
+использовать оператор повторения,
+
+0:13:44.620,0:13:46.209
+у Perl больше не было необходимости
+в преобразовании.
+
+0:13:46.209,0:13:50.140
+Потому не было причины возвращать предупреждение.
+
+0:13:50.140,0:13:52.870
+Вот так работает преобразование.
+
+0:13:52.870,0:13:54.840
+Теперь вы узнаете,
+
+0:13:54.840,0:13:58.950
+как действует преобразование чисел в строки.
+Преобразование числа в строку
+
+0:13:58.950,0:14:01.790
+довольно просто. Получается то же
+
+0:14:01.790,0:14:04.359
+значение. Предположим, у вас есть число,
+например, три.
+
+0:14:04.359,0:14:08.060
+И если вы посмотрите на него, как на строку,
+это просто строка, символ «3»,
+
+0:14:08.060,0:14:11.329
+число «3». Но если у вас есть число,
+
+0:14:11.329,0:14:15.369
+строка, которая является числом «3.14».
+
+0:14:15.369,0:14:19.150
+Если бы у вас было только так,
+
+0:14:19.150,0:14:24.310
+и вы бы запустили это, предупреждения
+бы не было, потому как это просто число.
+
+0:14:24.310,0:14:29.140
+Но поскольку мы имеем то, что
+в действительности не является числом,
+
+0:14:29.140,0:14:30.670
+мы получаем предупреждение.
+
+0:14:30.670,0:14:34.070
+Ещё пара проблем, о которых стоит рассказать.
+
+0:14:34.070,0:14:36.680
+Одна из них — «undef».
+
+0:14:36.680,0:14:39.560
+Что же произойдёт с «undef» в том же контексте,
+
+0:14:39.560,0:14:40.710
+давайте посмотрим.
+
+0:14:40.710,0:14:43.730
+Допустим, в этом случае, здесь...
+
+0:14:43.730,0:14:46.830
+так...
+
+0:14:46.830,0:14:48.369
+«my $y».
+
+0:14:48.369,0:14:51.750
+Поскольку вы знаете, что она переменная
+содержит «undef»,
+
+0:14:51.750,0:14:53.150
+я не буду выводить её.
+
+0:14:53.150,0:14:57.020
+Теперь у нас есть объявленная переменная
+
+0:14:57.020,0:14:58.210
+под названием «$z».
+
+0:14:58.210,0:15:01.119
+И объявленная переменная «$y», но мы
+
+0:15:01.119,0:15:02.650
+не присвоили ей значение.
+
+0:15:02.650,0:15:05.020
+Если я это запущу...
+
+0:15:05.020,0:15:07.320
+давайте закомментируем, нам это не нужно.
+
+0:15:07.320,0:15:10.820
+Теперь, если я запускаю этот код,
+я получаю два предупреждения.
+
+0:15:10.820,0:15:13.060
+Использование неинициализированной...
+
+0:15:13.060,0:15:16.290
+Они говорят об использовании неинициализированных
+значений. Это означает, что «$y»
+
+0:15:16.290,0:15:21.800
+содержала «undef» как при сложении,
+так и при конкатенации.
+
+0:15:21.800,0:15:26.490
+Из этого видно, что
+
+0:15:26.490,0:15:29.810
+Perl возвращает предупреждения, когда
+я пытаюсь использовать
+
+0:15:29.810,0:15:32.520
+неопределённые переменные,
+
+0:15:32.520,0:15:34.020
+как в числовом
+
+0:15:34.020,0:15:37.640
+контексте, так и в строковом.
+
+0:15:37.640,0:15:39.740
+Как вы можете видеть,
+
+0:15:39.740,0:15:42.470
+хоть это и сложно,
+
+0:15:42.470,0:15:44.850
+первый «say» выводит «3».
+
+0:15:44.850,0:15:45.670
+Затем этот
+
+0:15:45.670,0:15:47.449
+«say» снова выводит «3»,
+
+0:15:47.449,0:15:50.420
+потому что «$y», несмотря на содержание «undef»,
+
+0:15:50.420,0:15:52.390
+в числовом контексте
+
+0:15:52.390,0:15:54.270
+ведёт себя как 0.
+
+0:15:54.270,0:15:57.910
+А при конкатенации я снова получаю «3»,
+
+0:15:57.910,0:16:00.540
+потому что, хоть «$y» и «undef»,
+
+0:16:00.540,0:16:05.670
+в строковом контесте она ведёт себя,
+как пустая строка.
+
+0:16:05.670,0:16:09.520
+Если вы хотите убедиться, что она
+
+0:16:09.520,0:16:15.070
+всё ещё «undef», тогда
+
+0:16:15.070,0:16:17.490
+«print 'defined'»
+
+0:16:17.490,0:16:20.760
+и «else».
+
+0:16:20.760,0:16:22.870
+Извините, тут должно быть «say».
+
+0:16:22.870,0:16:25.810
+«not»
+
+0:16:25.810,0:16:28.940
+Да, это показывает, что я тут старожил.
+
+0:16:28.940,0:16:31.330
+Итак,
+
+0:16:31.330,0:16:32.579
+я запускаю этот код.
+
+0:16:32.579,0:16:36.260
+И вы видите «not». Переменная не определена.
+Значит, несмотря на то,
+
+0:16:36.260,0:16:40.730
+что Perl использовал эту переменную
+
+0:16:40.730,0:16:42.459
+как в числовом, так и в строковом контексте,
+
+0:16:42.459,0:16:45.420
+он не изменил переменную.
+Она по-прежнему не определена.
+
+0:16:45.420,0:16:47.749
+Это одна из вещей, которые я хотел показать.
+
+0:16:47.749,0:16:49.520
+Другая вещь —
+
+0:16:49.520,0:16:52.180
+то, что некоторым людям по убеждению
+
+0:16:52.180,0:16:56.720
+не нравится идея с предупреждениями.
+Они предпочитают
+
+0:16:56.720,0:16:57.660
+исключения,
+
+0:16:57.660,0:17:01.000
+когда хоть что-то идёт неверно или немного не так.
+
+0:17:01.000,0:17:02.459
+Что они могут сделать —
+
+0:17:02.459,0:17:08.990
+превратить предупреждения в исключения.
+Здесь они могут написать «FATAL».
+
+0:17:08.990,0:17:13.189
+А здесь, допустим, «=> all». Это превратит
+каждое предупреждение
+
+0:17:13.189,0:17:15.680
+в фатальное исключение.
+
+0:17:15.680,0:17:17.920
+Если я перейду сюда и
+
+0:17:17.920,0:17:19.790
+верну это обратно...
+
+0:17:19.790,0:17:20.850
+вот так.
+
+0:17:20.850,0:17:22.640
+Запускаю код.
+