Озадачился тут вопросом - определить вручную, является ли входной поток utf8 или не является. Вот в результате получился такой код:<br><br>my $is_this_utf8&nbsp; = -1;<br># Обрабатываем входной поток<br>while (&lt;$input_file_handle&gt;) {<br>
&nbsp;&nbsp;&nbsp; chomp;<br>&nbsp;&nbsp;&nbsp; my $string = $_;<br>&nbsp;&nbsp;&nbsp; my @strring_arr = split(//, $string);<br>&nbsp;&nbsp;&nbsp; my $utf_flag = 0;<br>&nbsp;&nbsp;&nbsp; next if ($is_this_utf8&gt;0);<br>&nbsp;&nbsp;&nbsp; for my $_char (@strring_arr) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; last if ($is_this_utf8&gt;-1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $char = ord($_char);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # начало последовательности utf8<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( $utf_flag==0 &amp;&amp; ( 1&lt;&lt;7 | 1&lt;&lt;6 | $char ) == $char ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $utf_flag=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # продолжение последовательности utf8<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elsif ( $utf_flag &gt; 0 &amp;&amp; $utf_flag&lt;6 &amp;&amp; ( 1&lt;&lt;7 | $char ) == $char &amp;&amp; ( 1&lt;&lt;6 | $char ) != $char ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $utf_flag++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $is_this_utf8 = 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # начало новой последовательности utf8, после предыдущей последовательности<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elsif ( $utf_flag&gt;1 &amp;&amp; ( 1&lt;&lt;7 | 1&lt;&lt;6 | $char ) == $char ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $utf_flag=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #$is_this_utf8 = 1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # символ c опущенными лидирующими битами<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elsif ( $utf_flag==0 &amp;&amp; ( 1&lt;&lt;7 | 1&lt;&lt;6 | $char ) != $char ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $utf_flag=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # символ c опущенным лидирующим битом<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elsif ( $utf_flag==0 &amp;&amp; ( 1&lt;&lt;7 | $char ) != $char ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $utf_flag=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # символ после первых двух байт utf8-последовательности c опущенным лидирующим битом<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elsif ( $utf_flag&gt;1 &amp;&amp; ( 1&lt;&lt;7 | $char ) != $char ) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $utf_flag=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $utf_flag = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $is_this_utf8 = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; };<br>}<br><br><br>Понятно, что эта конструкция подлежит упрощению, но хотелось бы понять - насколько сама идея может считаться грациозной и изящной :)<br>
<br>С уважением ко всем, Д.С.<br>