Size: a a a

2020 February 05

DS

Dmitriy Shamatrin in Modern::Perl
Вот на хабре писали по этому поводу даже
https://habr.com/ru/post/190584/
источник

МИ

Михаил Иванов in Modern::Perl
Denis F
А у тебя исходник не в юникоде часом? Современные редакторы так по умолчанию делают
В исходнике определенно не юникод, а utf8. Использование use utf8; сделано правильно.
дальнейшее поведение приведенного скрипта ожидаемо — в строке юникод, варнинг ровно об этом и говорит.
источник

AT

Artem Tepponen in Modern::Perl
Alexander Ru
так первый все нормлаьно выводит, без ошибок
так проблема тут
источник

AR

Alexander Ru in Modern::Perl
pm работающая под мод_перл, в общем выглядет так...
package .......;

use utf8;
use strict;
use warnings;
use Exporter;
use DBI;
use Encode;

sub callUserFunction
{
   my $args = shift;
......
  if ( !ConnectDB......) {
    warn " ===before sendError=[" . $DBI::err ." - " . $DBI::errstr."]\n";
    sendError("Ошибка соединения с БД : [" . $DBI::err . " " . $DBI::errstr . "]");
  }
.....
}

sub sendError {
   ($strRespond) = shift();
warn "sendError(enter proc):[$strRespond]\n";
   $strRespond = encode('Windows-1251', $strRespond);
.....
}

на варн в sub callUserFunction не ругается! а на варн в sub sendError уже ругается!
источник

AT

Artem Tepponen in Modern::Perl
Лучше в такой форме, что запустить можно
источник

AR

Alexander Ru in Modern::Perl
Михаил
# file -bi Global.pm
text/plain; charset=utf-8
источник

DS

Dmitriy Shamatrin in Modern::Perl
use utf8;
use Encode;

$s = "русский текст";

$s = encode('utf8', $s);
warn " ===before enter to sub" . $s;
call_some_sub($s);

sub call_some_sub {
 $var=shift();
warn " ===call_some_sub == $var";
}
источник

DS

Dmitriy Shamatrin in Modern::Perl
Вот это будет работать
источник

DS

Dmitriy Shamatrin in Modern::Perl
Без варнингов
источник

DS

Dmitriy Shamatrin in Modern::Perl
Потому что надо понимать, чего функция хочет и что вообще откуда едет и делать encode/decode соответственно
источник

DS

Dmitriy Shamatrin in Modern::Perl
Всякие md5 они определены над байтами
источник

AT

Artem Tepponen in Modern::Perl
Так проблема-то в другом. Что без всяких encode лезут “чудеса"
источник

DS

Dmitriy Shamatrin in Modern::Perl
Нет никаких чудес
источник

AR

Alexander Ru in Modern::Perl
да, Артем, именно
источник

DS

Dmitriy Shamatrin in Modern::Perl
Можно пройтись по переменным с devel::peek и посмотреть что там
источник

AR

Alexander Ru in Modern::Perl
Дмитрий, почему первый варн без ошибок, а второй, когда зашли в процедуру, с ошибками. Строка таже
источник

AT

Artem Tepponen in Modern::Perl
А в $DBI::err и $DBI::errstr есть русские буквы?
источник

DS

Dmitriy Shamatrin in Modern::Perl
А потому что флаг utf8 липкий
источник

DS

Dmitriy Shamatrin in Modern::Perl
В статье написано по этому поводу
источник

AR

Alexander Ru in Modern::Perl
есть, вот вывод
источник