Сохранить следующее как UTF-8:
use utf8;
use strict;
use warnings;
use open ":std", ":encoding(cp1254)"; # Set encoding for STD*
use Encode qw( encode );
my $file_name = "ş";
print "$file_name\n";
system(encode('cp1254', qq{mkdir "$file_name"}));
use utf8
сообщает Perl, что источником является UTF-8.
use open ":std", ":encoding(cp1254)";
вызывает кодирование текста, отправляемого в STDOUT и STDERR с использованием cp1254, и декодирование текста, считанного из STDIN, из cp1254.
Это не влияет на то, что отправляется на вызовы системы, такие как system
, поэтому вам необходимо явно их кодировать.