powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl utf8
10 сообщений из 10, страница 1 из 1
Perl utf8
    #40081273
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть Perl версии 5.28.
И кое-какие моменты с UTF-8 мне не совсем понятны.

Допустим есть pl-скрипт в кодировке UTF-8.
В нем нужно использовать прагму utf8, чтобы скрипт обрабатывался именно как юникод.
Но допустим, скрипт вызывается из юникодной консоли и в него передается юникодный текст:
Код: plaintext
./test.pl АБВ
В своих старых скриптах я для этого использовал binmode(STDIN, ':utf8').
Но вот вычитал, что у Perl есть ключ -C, и захотелось использовать его.
Сделал так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
#!/usr/bin/perl -CL -w
use utf8;
use strict;
use warnings;

my $v = $ARGV[0];
$v = substr($v,1,2);
print "v = $v \n";


Но скрипт выводит нечитаемый текст:
Код: plaintext
v = ��
То есть функция substr применялась не к символам, а к байтам.

Я неправильно понял описание ключа -C?
Или неправильно его использую?
...
Рейтинг: 0 / 0
Perl utf8
    #40081292
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одна странность.
Если задать прагму utf8, то по умолчанию при выводе юникода в консоль будет предупреждение Wide character.
Чтобы его убрать, нужно задавать binmode(STDOUT, ':utf8'). Либо можно указывать в параметрах вызова ключ -COE, это дает такой же эффект.
И также есть ключ -CL, который, если я правильно понял, соответствует всем юникодным ключам, но только если в консоли задан UTF-8 (а если не задан, то ничего не делает).
Но у меня этот ключ почему-то не работает.

Код: plaintext
1.
2.
3.
4.
5.
6.
#!/usr/bin/perl -CL -w
use utf8;
print "абв\n";
--
Wide character in print at ./_template.pl line 3.
абв

Код: plaintext
1.
2.
3.
4.
5.
#!/usr/bin/perl -CIOE -w
use utf8;
print "абв\n";
--
абв

Код: plaintext
1.
2.
$ env | grep LANG
LANG=ru_RU.UTF-8

Это баг или я неправильно задаю шебанг?
...
Рейтинг: 0 / 0
Perl utf8
    #40081495
Alibek B., бросайте этот перл лучше сразу, чем потом.
Go/Python/PHP - ваш выбор.
...
Рейтинг: 0 / 0
Perl utf8
    #40081509
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Perl очень изящен. Ну и у меня куча наработок на Perl, а на других ЯП их делать заново.
Go поставил, буду понемногу осваивать, но пока скрипты делаю на Perl.
...
Рейтинг: 0 / 0
Perl utf8
    #40081514
Alibek B., да это всё понятно, сам на этой стадии был лет 15 назад
просто имейте ввиду, что вы с него всё равно уйдёте.
...
Рейтинг: 0 / 0
Perl utf8
    #40081764
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
послушай, зайчик,

вот у меня в сарае сейчас четыре ручных ножовки ( с разными зубами и для продольного, и для поперечного пиления ),
кроме того есть два лобзика ( аккумуляторный и на шнуре), кроме того есть сабельная пила и дисковая пила.
Значит ли это, что при приобретении новой цепной пилы, я должен все остальные выкинуть с тем, чтобы никогда больше ими не пользоваться ?

Ну не знаешь ты и не умеешь работать инструментом под названием Perl и что же, всем остальным тоже надлежит перестать им пользоваться ?
...
Рейтинг: 0 / 0
Perl utf8
    #40081811
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
И также есть ключ -CL, который, если я правильно понял, соответствует всем юникодным ключам, но только если в консоли задан UTF-8 (а если не задан, то ничего не делает).
Неправильно понял.
Он идет не вместо, а вместе с остальными ключами и делает эти остальные ключи управляемыми через переменные окружения. То есть скрипт у тебя не меняется, а задавая различные LC_* результат скрипта будет разным.
В общем читай perlrun внимательнее.
Если надо всегда юникод: -CSDA
...
Рейтинг: 0 / 0
Perl utf8
    #40081958
volodin661
послушай, зайчик,

вот у меня в сарае сейчас четыре ручных ножовки ( с разными зубами и для продольного, и для поперечного пиления ),
кроме того есть два лобзика ( аккумуляторный и на шнуре), кроме того есть сабельная пила и дисковая пила.
Значит ли это, что при приобретении новой цепной пилы, я должен все остальные выкинуть с тем, чтобы никогда больше ими не пользоваться ?

Ну не знаешь ты и не умеешь работать инструментом под названием Perl и что же, всем остальным тоже надлежит перестать им пользоваться ?

это некорректное сравнение. В IT такое не прокатит
Лобзики - это вообще отдельная тема для точного выпиливания.
Ножовки для металла.
А тут тот же PHP заменяет полностью Perl, причём ещё и быстрее его.
А PHP полностью заменяет Go, превосходя его во всём + добавляя своего.
Я на Perl когда-то писал даже CRM и не одну, так что не надо ля-ля.
...
Рейтинг: 0 / 0
Perl utf8
    #40082134
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PHP не быстрее Perl.
У меня есть два скрипта на Perl и PHP, которые обрабатывают большие массивы сопоставимого размера.
Скрипт на Perl работает существенно быстрее.
...
Рейтинг: 0 / 0
Perl utf8
    #40082224
а PHP какой-нибудь 4й ?
Даже на 5м было часто быстрее (я не всё конечно тестил, так несколько раз ловил)
а тут вообще...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl utf8
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]