Исправление vtVitus, (текущая версия) :
По коду всё ок и должно работать как надо. То есть ты о чём-то не договариваешь +).
vitus@vitus-home:~$ cat /tmp/ll.pl
#!/usr/bin/perl
use strict;
use utf8;
use locale;
use warnings;
binmode(STDOUT,':utf8');
binmode(STDIN,':utf8');
open my $in, '<:encoding(UTF-8)', '/tmp/in.txt' or die('error');
my $ff=<$in>;
my $length_sv = 9;
open my $out, '>>:encoding(UTF-8)', "/tmp/file.txt" or warn "Could not open file - $!" and exit(1);
my $subc = substr($ff, 0, $length_sv);
my $string = sprintf "| %-5s | %-1s | %-9s | %-${length_sv}s | %-11s | %-10s|\n","ыфыф","ыфыфыф","ыфыфыфыф","$subc","ыфыфыфы","фыфыфыф";
print $string;
print $out $string;
close $out;
close $in;
vitus@vitus-home:~$ echo -n "Тест Mark" > /tmp/in.txt
vitus@vitus-home:~$ /tmp/ll.pl
| ыфыф | ыфыфыф | ыфыфыфыф | Тест Mark | ыфыфыфы | фыфыфыф |
vitus@vitus-home:~$ cat /tmp/file.txt
| ыфыф | ыфыфыф | ыфыфыфыф | Тест Mark | ыфыфыфы | фыфыфыф |
Исходная версия vtVitus, :
По коду всё ок и должно работать как надо. То есть ты о чём-то не договариваешь +).
vitus@vitus-home:~$ cat /tmp/ll.pl
#!/usr/bin/perl
use strict;
use utf8;
use locale;
use warnings;
binmode(STDOUT,':utf8');
binmode(STDIN,':utf8');
open my $in, '<:encoding(UTF-8)', '/tmp/in.txt' or die('error');
my $ff=<$in>;
my $length_sv = 9;
open my $out, '>>:encoding(UTF-8)', "/tmp/file.txt" or warn "Could not open file - $!" and exit(1);
my $subc = substr($ff, 0, $length_sv);
my $string = sprintf "| %-5s | %-1s | %-9s | %-${length_sv}s | %-11s | %-10s|\n","ыфыф","ыфыфыф","ыфыфыфыф","$subc","ыфыфыфы","фыфыфыф";
print $string;
print $out $string;
close $out;
vitus@vitus-home:~$ echo -n "Тест Mark" > /tmp/in.txt
vitus@vitus-home:~$ /tmp/ll.pl
| ыфыф | ыфыфыф | ыфыфыфыф | Тест Mark | ыфыфыфы | фыфыфыф |
vitus@vitus-home:~$ cat /tmp/file.txt
| ыфыф | ыфыфыф | ыфыфыфыф | Тест Mark | ыфыфыфы | фыфыфыф |