<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF71%3APerl</id>
		<title>LXF71:Perl - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF71%3APerl"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF71:Perl&amp;action=history"/>
		<updated>2026-05-13T20:59:21Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF71:Perl&amp;diff=4658&amp;oldid=prev</id>
		<title>Yaleks: викификация</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF71:Perl&amp;diff=4658&amp;oldid=prev"/>
				<updated>2008-05-19T16:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;викификация&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 16:17, 19 мая 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;всех требований.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;всех требований.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Возможно, вы знаете, что последнее &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;– &lt;/del&gt;выполнение кода при определённых условиях &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;– &lt;/del&gt;называется управлением ходом выполнения (flow&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Возможно, вы знаете, что последнее &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/ins&gt;выполнение кода при определённых условиях &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/ins&gt;называется управлением ходом выполнения (flow&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;control). С этой темы мы начнём сегодняшний выпуск, а затем рассмотрим операции файлового ввода-вывода, позволяющие читать и записывать данные на жёсткий диск и передавать их в другие программы.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;control). С этой темы мы начнём сегодняшний выпуск, а затем рассмотрим операции файлового ввода-вывода, позволяющие читать и записывать данные на жёсткий диск и передавать их в другие программы.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 49:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 49:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;} until ($MONEY &amp;gt; 1000000);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;} until ($MONEY &amp;gt; 1000000);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Еще один способ создания циклов &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;– &lt;/del&gt;это эквивалентные операторы&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Еще один способ создания циклов &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/ins&gt;это эквивалентные операторы&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;for и foreach. Второй оператор обычно используется при обработке&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;for и foreach. Второй оператор обычно используется при обработке&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;массивов и хэшей, и в этом состоит единственная разница между ними.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;массивов и хэшей, и в этом состоит единственная разница между ними.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 90:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 90:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;используемый в Perl как указатель на настоящий файл, имя которого&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;используемый в Perl как указатель на настоящий файл, имя которого&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;содержится во втором аргументе. он обычно начинается с символа,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;содержится во втором аргументе. он обычно начинается с символа,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;обозначающего в каком режиме требуется открыть файл &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;– &lt;/del&gt;для чтения&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;обозначающего в каком режиме требуется открыть файл &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/ins&gt;для чтения&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(символ &amp;lt;), для записи (&amp;gt;), или дописывания в конец (&amp;gt;&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;(символ &amp;lt;), для записи (&amp;gt;), или дописывания в конец (&amp;gt;&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 128:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 128:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;список команд, понимаемых printf, можно найти в документации Perl.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;список команд, понимаемых printf, можно найти в документации Perl.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;когда речь заходит о чтении файлов, у нас появляется две возможности &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;– &lt;/del&gt;прочитать файл строчка за строчкой или же загрузить его в массив одной командой, чтобы впоследствии обработать.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;когда речь заходит о чтении файлов, у нас появляется две возможности &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/ins&gt;прочитать файл строчка за строчкой или же загрузить его в массив одной командой, чтобы впоследствии обработать.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# прочитать файл построчно&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# прочитать файл построчно&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 199:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 199:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;write. Первая используется для точного позиционирования переменной&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;write. Первая используется для точного позиционирования переменной&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;в строке и указания, сколько символов она может занимать. Делается&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;в строке и указания, сколько символов она может занимать. Делается&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;это при помощи так называемых шаблонов («picture line») &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;– &lt;/del&gt;сначала&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;это при помощи так называемых шаблонов («picture line») &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/ins&gt;сначала&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;устанавливаются поля для переменных, а затем &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;– &lt;/del&gt;список переменных,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;устанавливаются поля для переменных, а затем &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/ins&gt;список переменных,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;которые нужно подставлять в эти поля.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;которые нужно подставлять в эти поля.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 212:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 212:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;$CITY, $POST_CODE, $COUNTRY&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;$CITY, $POST_CODE, $COUNTRY&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Эта кучка иероглифов определяет шаблон под названием STDOUT_RECORD, состоящий из трёх полей &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;– &lt;/del&gt;строк предназначенных для печати.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Эта кучка иероглифов определяет шаблон под названием STDOUT_RECORD, состоящий из трёх полей &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/ins&gt;строк предназначенных для печати.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;разница между ними и нашим первым шаблоном в том, что здесь каждая переменная сопровождается своей инструкцией по форматированию.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;разница между ними и нашим первым шаблоном в том, что здесь каждая переменная сопровождается своей инструкцией по форматированию.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Например, первая строка содержит символ @, за которым следует 36&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Например, первая строка содержит символ @, за которым следует 36&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF71:Perl&amp;diff=4657&amp;oldid=prev</id>
		<title>Yaleks: Новая: {{цикл/Perl}}  == Perl поток выполнения, файлы и отчёты == ''чАстЬ 3 '''Марко Фиоретти''' (Marco Fioretti) представляет те...</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF71:Perl&amp;diff=4657&amp;oldid=prev"/>
				<updated>2008-05-19T16:17:15Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: {{цикл/Perl}}  == Perl поток выполнения, файлы и отчёты == ''чАстЬ 3 '''Марко Фиоретти''' (Marco Fioretti) представляет те...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{цикл/Perl}}&lt;br /&gt;
&lt;br /&gt;
== Perl поток выполнения, файлы и отчёты ==&lt;br /&gt;
''чАстЬ 3 '''Марко Фиоретти''' (Marco Fioretti) представляет технологии создания утончённых сценариев Perl.''&lt;br /&gt;
&lt;br /&gt;
При правильном подходе к программированию сценарии Perl&lt;br /&gt;
ведут себя очень интеллектуально. они могут считывать данные с жёстких дисков, сохранять отчёт о своей деятельности в&lt;br /&gt;
журналах (log-файлах) и выполнять код только при условии выполнения&lt;br /&gt;
всех требований.&lt;br /&gt;
&lt;br /&gt;
Возможно, вы знаете, что последнее – выполнение кода при определённых условиях – называется управлением ходом выполнения (flow&lt;br /&gt;
control). С этой темы мы начнём сегодняшний выпуск, а затем рассмотрим операции файлового ввода-вывода, позволяющие читать и записывать данные на жёсткий диск и передавать их в другие программы.&lt;br /&gt;
&lt;br /&gt;
=== операторы управления выполнением ===&lt;br /&gt;
Perl содержит практически все операторы управления ходом выполнения&lt;br /&gt;
языка С, хотя некоторые из них имеют другие названия и другой синтаксис. Например, оператор if-else выглядит так, как вы и ожидаете, но&lt;br /&gt;
при этом допускает вложения при помощи краткой команды elsif:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
if (MONEY &amp;gt; 50) {&lt;br /&gt;
print “Ask mum for a little extra money\n”;&lt;br /&gt;
} elsif ((MONEY &amp;gt; 0) &amp;amp;&amp;amp; ($MONEY &amp;lt;= 50)) {&lt;br /&gt;
print “Ask mum for MORE money!\n”;&lt;br /&gt;
} else {&lt;br /&gt;
print “MUM! I’m in trouble!\n”;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вместо if можно использовать unless, имеющий прямо противоположное значение.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
unless ($MONEY &amp;gt; 1000000) {&lt;br /&gt;
print “Better ask mum for some money...\n”;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
оператор while выступает в двух видах:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
while ($MONEY &amp;lt; 1000000) {&lt;br /&gt;
print “Ask for more money...\n”;&lt;br /&gt;
}&lt;br /&gt;
# или (эффект тот же самый):&lt;br /&gt;
do {&lt;br /&gt;
print “Ask for more money...\n”;&lt;br /&gt;
} while ($MONEY &amp;lt; 1000000);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Этот код не будет выполнен ни разу, если у вас уже есть миллион.&lt;br /&gt;
Если вы хотите быть уверены, что тело цикла в фигурных скобках&lt;br /&gt;
будет выполнено минимум один раз, напишите until.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
do {&lt;br /&gt;
print “Ask for at least Ј10 more...\n”;&lt;br /&gt;
} until ($MONEY &amp;gt; 1000000);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Еще один способ создания циклов – это эквивалентные операторы&lt;br /&gt;
for и foreach. Второй оператор обычно используется при обработке&lt;br /&gt;
массивов и хэшей, и в этом состоит единственная разница между ними.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
for ($i = 0; $i &amp;lt; 100; $i++) {&lt;br /&gt;
#Сделать что-нибудь сто раз&lt;br /&gt;
}&lt;br /&gt;
foreach $JEDI_KNIGHT ( keys %JEDI_DIRECTORY ) {&lt;br /&gt;
print “ The phone number of $JEDI_KNIGHT is $JEDI_DIRECTORY{$JEDI_KNIGHT}{‘Phone number’}\n”;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Во втором случае при каждой следующей итерации цикла переменная $JEDI_KNIGHT будет принимать значение следующего элемента&lt;br /&gt;
массива ключей. Если её опустить, то значение ключа будет присваиваться вездесущей переменной $_.&lt;br /&gt;
&lt;br /&gt;
=== работа с файлами. ===&lt;br /&gt;
Перед тем, как начинать работать с файлом, разумно будет узнать,&lt;br /&gt;
обладает ли он свойствами, которые нам необходимы. Perl имеет множество операторов для таких «файловых проверок». Здесь приведён&lt;br /&gt;
только короткий обзор, весь список можно посмотреть на http://www.unix.org.ua/orelly/perl/prog3/ch03_10.htm&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
if (-e $FILE) # Если файл $FILE существует....&lt;br /&gt;
if (-r $FILE) # Если файл $FILE существует и может быть прочитан&lt;br /&gt;
if (-d $FILE) # Если $FILE – это существующий каталог&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Если все проверки пройдены, чтение и запись файлов из Perl выполняются очень просто, но вы должны использовать функции open и close&lt;br /&gt;
для открытия и закрытия каждого файла, доступ к которому вам нужен.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
open( FILE_HANDLE, name_of_file) || die “Oh my, what happened to my file!\n” ;&lt;br /&gt;
#сделать всё что, вы хотели с этим файлом&lt;br /&gt;
close(FILE_HANDLE)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Функция die прерывает выполнение сценария и выводит строку,&lt;br /&gt;
переданную ей в качестве аргумента, в стандартный поток ошибок&lt;br /&gt;
(STDERR). В первой инструкции этого примера оператор OR (двойная&lt;br /&gt;
вертикальная черта) позволяет прервать выполнение только в том случае,&lt;br /&gt;
если файл не может быть открыт. Вы не обязаны использовать die, но&lt;br /&gt;
если вы забудете обработать ошибку, то рискуете попасть в число тех,&lt;br /&gt;
кто целыми часами пытается понять, почему ничего не работает.&lt;br /&gt;
&lt;br /&gt;
В первой строке функция open получает файловый дескриптор,&lt;br /&gt;
используемый в Perl как указатель на настоящий файл, имя которого&lt;br /&gt;
содержится во втором аргументе. он обычно начинается с символа,&lt;br /&gt;
обозначающего в каком режиме требуется открыть файл – для чтения&lt;br /&gt;
(символ &amp;lt;), для записи (&amp;gt;), или дописывания в конец (&amp;gt;&amp;gt;).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
open(MY_FILE, “&amp;lt; $SOME_FILE_TO_READ”) or die(“Could not read from $SOME_FILE_TO_READ\n”);&lt;br /&gt;
open(MY_FILE, “&amp;gt; /home/mylogin/some_file_to_write”) or die(“Could not write to your file\n”);&lt;br /&gt;
open(MY_FILE, “&amp;gt;&amp;gt; $SOME_FOLDER/$SOME_FILE”) or die(“Could not append MORE data to $SOME_FOLDER/$SOME_FILE\n”);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
будьте осторожны при записи: если вы открываете файл в таком&lt;br /&gt;
режиме, всё его содержимое будет потеряно. когда вам нужно сохранить&lt;br /&gt;
существующие данные, используйте режим дополнения (&amp;gt;&amp;gt;), как это&lt;br /&gt;
сделано в третьей инструкции примера. Если вы забудете указать режим&lt;br /&gt;
доступа, Perl на всякий случай откроет файл только для чтения.&lt;br /&gt;
&lt;br /&gt;
При помощи скалярных переменных можно генерировать имена&lt;br /&gt;
файлов и пути к ним на лету, как это сделано в первой и последней&lt;br /&gt;
командах. я рекомендую всегда пользоваться этим методом. Даже если&lt;br /&gt;
имя файла точно известно, лучше поместить его в переменную и&lt;br /&gt;
использовать её в разных местах программы. тогда если что-то изменится, то править имя файла придётся только в одном месте.&lt;br /&gt;
&lt;br /&gt;
тем временем, наш файл открыт. как нам прочитать его или что-то в&lt;br /&gt;
него записать? Для записи можно использовать прекрасно вам известную функцию print или её аналог printf, позволяющий лучше контролировать формат вывода. Чтобы увидеть разницу, попробуйте выполнить&lt;br /&gt;
следующий сценарий:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/perl&lt;br /&gt;
$MIDICHLORIAN_RATE = 4533233.434;&lt;br /&gt;
$JEDI_QUOTE = ‘The Force is strong with this one!’;&lt;br /&gt;
open(TEST, “&amp;gt; testfile.txt”) || die “Cannot open testfile.txt\n”;&lt;br /&gt;
print TEST “$MIDICHLORIAN_RATE: $JEDI_QUOTE;\n”;&lt;br /&gt;
printf TEST “%5.2f: %20.30s;\n”, $MIDICHLORIAN_RATE,$JEDI_QUOTE;&lt;br /&gt;
close (TEST);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Запустите этот код несколько раз, изменяя значения переменных&lt;br /&gt;
$MIDICHLORIAN_RATE и $JEDI_QUOTE и пронаблюдайте за содержимым файла testfile.txt, чтобы посмотреть как изменяется форматирование. Нечётное число символов % в параметрах printf обозначает&lt;br /&gt;
начало форматирования текста: %5.2f выводит $MIDICHLORIAN_RATE как десятичную дробь с двумя цифрами после запятой, вторая&lt;br /&gt;
последовательность %20.30s делает $JEDI_QUOTE строкой минимум&lt;br /&gt;
из 20 и максимум из 30 символов, с выравниванием вправо. Полный&lt;br /&gt;
список команд, понимаемых printf, можно найти в документации Perl.&lt;br /&gt;
&lt;br /&gt;
когда речь заходит о чтении файлов, у нас появляется две возможности – прочитать файл строчка за строчкой или же загрузить его в массив одной командой, чтобы впоследствии обработать.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# прочитать файл построчно&lt;br /&gt;
open(TEST, “&amp;lt; testfile.txt”) || die “Cannot open testfile.txt\n”;&lt;br /&gt;
while(&amp;lt;TEST&amp;gt;) {&lt;br /&gt;
# Сейчас текущая строка файла содержится в переменной по умолчанию $_&lt;br /&gt;
$LINE = $_ ;&lt;br /&gt;
#сделать что-то с $LINE;&lt;br /&gt;
}&lt;br /&gt;
close (TEST);&lt;br /&gt;
# ...или сохранить всё его содержимое в массиве @ALL_THE_LINES&lt;br /&gt;
open(TEST, “&amp;lt; testfile.txt”) || die “Cannot open testfile.txt\n”;&lt;br /&gt;
@ALL_THE_LINES = &amp;lt;TEST&amp;gt;;&lt;br /&gt;
close (TEST);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Форматирование отчётов ===&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=подсКАЗКА&lt;br /&gt;
|Содержание=&lt;br /&gt;
;Изучение Perl-измов&lt;br /&gt;
Синтаксис Perl может быть&lt;br /&gt;
непонятным, но иногда он очень&lt;br /&gt;
близок к естественному&lt;br /&gt;
английскому языку. Например,&lt;br /&gt;
оператор if-then обычно&lt;br /&gt;
записывается в такой же форме,&lt;br /&gt;
как это принято в языке C –&lt;br /&gt;
сначала идёт условие, а потом, в&lt;br /&gt;
фигурных скобках – команды&lt;br /&gt;
которые нужно в этом случае&lt;br /&gt;
выполнить. однако простые&lt;br /&gt;
условия, включающие всего одну&lt;br /&gt;
команду для выполнения можно&lt;br /&gt;
записать почти так же, как&lt;br /&gt;
английскую фразу:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
print “SORRY, no more money” if&lt;br /&gt;
($ACCOUNT_BALANCE &amp;lt;= 0);&lt;br /&gt;
print “Access Denied!\n” unless&lt;br /&gt;
($WHO_IS_AT_THE_DOOR eq ‘Me’);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|Ширина=250px}}&lt;br /&gt;
Функция printf создана для вывода смеси из фиксированных строк и&lt;br /&gt;
переменных, отформатированных, как вам нравится. Но её неудобно&lt;br /&gt;
использовать при форматировании длинного многострочного текста. к&lt;br /&gt;
счастью, Perl (как язык для генерации отчётов) имеет пару решений,&lt;br /&gt;
предназначенных как раз для таких целей.&lt;br /&gt;
&lt;br /&gt;
Представьте себе обычный сценарий для телефонной книги, который&lt;br /&gt;
в начале своей работы читает значения переменных $NAME, $STREET_NAME_AND_NUMBER, $CITY и $POST_CODE из базы данных.&lt;br /&gt;
Вторая часть сценария должна отобразить прочитанные значения компактным и легко читаемым способом. Первым решением является&lt;br /&gt;
использование Perl-аналога команды оболочки here documents. Просто&lt;br /&gt;
поместите все переменные в простой шаблон и отметьте его начало и&lt;br /&gt;
конец каким-нибудь словом, примерно так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
print &amp;lt;&amp;lt;END_OF_RECORD;&lt;br /&gt;
Name: $NAME&lt;br /&gt;
Street: $STREET&lt;br /&gt;
$CITY $POST_CODE $COUNTRY&lt;br /&gt;
END_OF_RECORD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Этот код работает так же просто, как и выглядит. При выполнении&lt;br /&gt;
команды print выводится весь текст вплоть до заключительного слова&lt;br /&gt;
END_OF_RECORD, причём вместо имён переменных подставляются их&lt;br /&gt;
значения. Единственной проблемой является невозможность выравнивания, так что строки с переменными вроде $STREET и $COUNTRY будут&lt;br /&gt;
выровнены по-разному и текст будет выглядеть неаккуратно.&lt;br /&gt;
&lt;br /&gt;
С этим можно бороться при помощи таких команд, как format и&lt;br /&gt;
write. Первая используется для точного позиционирования переменной&lt;br /&gt;
в строке и указания, сколько символов она может занимать. Делается&lt;br /&gt;
это при помощи так называемых шаблонов («picture line») – сначала&lt;br /&gt;
устанавливаются поля для переменных, а затем – список переменных,&lt;br /&gt;
которые нужно подставлять в эти поля.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
format STDOUT_RECORD =&lt;br /&gt;
Name: @&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;br /&gt;
$NAME&lt;br /&gt;
Street: @&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
$STREET&lt;br /&gt;
@&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; @&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
@&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
$CITY, $POST_CODE, $COUNTRY&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Эта кучка иероглифов определяет шаблон под названием STDOUT_RECORD, состоящий из трёх полей – строк предназначенных для печати.&lt;br /&gt;
разница между ними и нашим первым шаблоном в том, что здесь каждая переменная сопровождается своей инструкцией по форматированию.&lt;br /&gt;
Например, первая строка содержит символ @, за которым следует 36&lt;br /&gt;
символов &amp;lt;. быть может, выглядит это ужасно, но смысл очень прост – в&lt;br /&gt;
позиции @ нужно вывести не более 37 символов переменной $NAME,&lt;br /&gt;
выключенных влево. Переменная $POST_CODE, согласно тому же синтаксису должна занять не более 7 символов, выравнивается вправо и&lt;br /&gt;
выводится в третьей строчке всегда в одном и том же месте.&lt;br /&gt;
&lt;br /&gt;
Но это – только определение шаблона. Думайте о нём, как о картонке, в которой вырезаны прямоугольники для записи значений переменных. теперь настало время воспользоваться ею по назначению.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
$~ = “STDOUT_RECORD”;&lt;br /&gt;
write;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Говоря по-русски, тут написано: записать в стандартный поток вывода данные, следуя шаблону STDOUT_RECORD. Функция Perl format&lt;br /&gt;
понимает много других обозначений полей для вывода переменных – #&lt;br /&gt;
используется для определения выровненных числовых полей, а ^ задаёт&lt;br /&gt;
внутри шаблона блок для вывода нескольких строк. Чтобы выровнять&lt;br /&gt;
текст по центру, вместо символов &amp;lt; или &amp;gt; используется вертикальная&lt;br /&gt;
черта |. как всегда, подробности вы можете найти в документации.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== КАК отКрытЬ проГрАмму ===&lt;br /&gt;
одной из сильных сторон Unix является возможность собрать из каскада&lt;br /&gt;
большого числа маленьких утилит одну мощную программу. Вы можете делать&lt;br /&gt;
то же самое в сценариях Perl. Фокус состоит в использовании в аргументе&lt;br /&gt;
функции open вертикальной черты | перед именем исполняемой программы или&lt;br /&gt;
после неё (вместо имени файла и символа метода доступа).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Чтение вывода программы program_1&lt;br /&gt;
open(README, “program_1 |”) or die “Could not open program_1\n”;&lt;br /&gt;
# отправка ваших данных в программу program_2&lt;br /&gt;
open(README, “| program_2”) or die “Could not open program_2\n”;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
как видите, вместо файла вы можете открыть программу. Здорово, правда?&lt;/div&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	</feed>