насколько я могу судить, приведённый код решает задачу просто замечательно - потому огромное спасибо )<br><br><div class="gmail_quote">6 ноября 2008 г. 16:51 пользователь Alexander Lourier <span dir="ltr">&lt;<a href="mailto:aml@rulezz.ru">aml@rulezz.ru</a>&gt;</span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">В сообщении от Четверг 06 ноября 2008 Павел Тимонин написал(a):<br>
<div class="Ih2E3d"><br>
&gt; работа единичная, то есть эти скрипты будут запускаться примерно раз в<br>
&gt; неделю. так что быстродействие и оптимизированность в общем-то не<br>
&gt; требуется, гораздо важнее наглядность кода, чтоб я мог в нём разобраться :)<br>
&gt;<br>
&gt; можете подсказать что-нибудь?<br>
<br>
</div>#!/usr/bin/perl<br>
<br>
use strict;<br>
<br>
my %single = (<br>
 &nbsp; &nbsp; &nbsp; &nbsp;&#39;катушки&#39; =&gt; &#39;катушка&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp;&#39;бухты&#39; =&gt; &#39;бухта&#39;,<br>
);<br>
<br>
while (&lt;&gt;) {<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;chomp;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;for my $entry (split /, /) {<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (my ($amount, $unit_name, $unit_size) = ($entry =~ /^\s*(\d+|\d+,\d+|<br>
\d+\.\d+)\s*\((.+)\s+по\s+(\d+)\s*м\s*\)\s*$/)) {<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$amount =~ s/,/./;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;my $units = $amount * 1000 / $unit_size;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ($units != int($units)) {<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;warn &quot;$entry: дробное число единиц\n&quot;;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;my $out_line = ($unit_size / 1000) . &#39; &#39; . ($single{$unit_name} ||<br>
$unit_name) . &quot;\n&quot;;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (my $i = 0; $i &lt; $units; $i++) {<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;print $out_line;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else {<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;warn &quot;$entry: неизвестный формат\n&quot;;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
 &nbsp; &nbsp; &nbsp; &nbsp;}<br>
}<br>
<br>
В аттаче он же с сохранением форматирования.<br>
<font color="#888888"><br>
--<br>
Alexander Lourier, <a href="http://aml.rulezz.ru" target="_blank">http://aml.rulezz.ru</a><br>
</font><br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br>