From: "Alexander N. Skovpen" 2:5020/9696 23 May 2020 21:07 +0300
To: Stas Mishchenkov 2:460/5858
Subject: имена файлов
Hello Stas Mishchenkov! 23 May 20 13:44:10, Stas Mishchenkov wrote to All: SM> На ntfs имена файлов хранятся в UTF-16, в консоль при этом винда отдает их в cp1251. Если нужно создать список файлов в cp866, то в именах файлов иногда встречается следующее: SM> cp1251: Ленинград - Ах уехала жена.mp3 SM> cp866: Ленинград ? Ах уехала жена.mp3 SM> Как правильно избежать такой ситуации, ну, кроме переименования файлов, разумеется? А как ты CP1251 в CP866 перекодируешь? Alexander
From: Eugene Grosbein grosbein.net 28 Jun 2020 03:46 +0300
To: Michael Dukelsky 2:5020/1042
Subject: unlink
27 июня 2020, суббота, в 21:37 NOVT, Michael Dukelsky написал(а): MD>>> Почему-то у меня unlink удаляет всё, даже файл, принадлежащий MD>>> руту. Что я делаю не так? EG>> Право на удаление файла по умолчанию это право записи в каталог. EG>> Если ты имеешь право на запись в каталог - ты имеешь право EG>> удалять в нём любые файлы независимо от их прав доступа и от EG>> их владельцев. EG>> Если ты хочешь, чтобы из каталога пользователь мог удалять EG>> только собственные файлы, поставь на каталог sticky bit: EG>> chmod +t dirname EG>> И это не имеет отношения к Perl, это основы юникса. MD> Спасибо за ответ, но почему-то он приехал только сейчас, через 6 дней. MD> @PATH: 5006/1 5080/102 5020/1042 MD> Судя по всему, 5080/102 проснулся. У меня тоже считай неделю не было эхомейла никакого, а сегодня вдруг навалило недельной давности. Eugene
From: Gennadij Pastuhov 2:5036/26 27 Apr 2020 12:55 +0300
To: Eugene Grosbein grosbein.net
Subject: Что за фигня?
Рад всех приветствовать! А особенно - Eugene! Понедельник апреля 27 20 06:16 Eugene Grosbein писал к Gennadij Pastuhov: GP>> if (defined $PRODUCTS->{$product_name_id}) { EG> Думаю, что ошибка тут. Вместо defined тут необходимо использовать EG> exists, потому что иначе срабатывает autovivification: EG> https://perlmaven.com/autovivification GP>> product_name_id:ssl_dv_thawte -- not found GP>> PRODUCTS:$VAR1 = undef; Спасибо, вопрос закрыт! ... Jonny wanna live
From: Stas Mishchenkov 2:460/5858 25 May 2020 05:35 +0300
To: Alexander N. Skovpen 2:5020/9696
Subject: имена файлов
*** Ответ на сообщение из _Carbon.Mail (Carbon.Mail). Hi, Alexander! 24 май 20 16:12, Alexander N. Skovpen -> Stas Mishchenkov: ANS>>> А как ты CP1251 в CP866 перекодируешь? SM>> use Encode 'decode'; SM>> use Encode 'encode'; SM>> $fname = encode( 'cp866', decode( 'cp1251', $key ) ) if $^O eq SM>> 'MSWin32'; ANS> а если 'use utf8;' добавить? А зачем? В cp866 от этого совмечтимые символы не появятся же? Have nice nights. Stas Mishchenkov.
From: Gennadij Pastuhov 2:5036/26 25 Apr 2020 18:24 +0300
To: Eugene Grosbein grosbein.net
Subject: Что за фигня?
Рад всех приветствовать! А особенно - Eugene! Суббота апреля 25 20 21:31 Eugene Grosbein писал к Gennadij Pastuhov: GP>>>> Дано: хэш: GP>>>> my $PRODUCTS = { GP>>>> ssl_dv_geotrust => 'GeoTrust Standard DV SSL Certificate', GP>>>> ssl_dv_rapidssl => 'RapidSSL Standard DV SSL Certificate', GP>>>> ssl_dv_thawte => 'Thawte SSL123 DV', GP>>>> }; GP>>>> Кусок кода: GP>>>> for my $key (keys $result) { GP>>>> print "\nkey:" . Dumper $key; GP>>>> my ($product_name_id, $validity_years) = split GP>>>> '__', $key; GP>>>> print GP>>>> "\nproduct_name_id:'$product_name_id'\tvalidity_years:'$validit GP>>>> y_ EG>>> years'"; GP>>>> if (defined $PRODUCTS->{$product_name_id}) { GP>>>> ... GP>>>> } else { GP>>>> print "\nproduct_name_id:$product_name_id -- not found"; GP>>>> print "\nPRODUCTS:" . Dumper $PRODUCTS->{$product_name_id}; GP>>>> В $result хранится результат разjsonивания запроса. И этот код GP>>>> порождает такой GP>>>> лог: GP>>>> key:$VAR1 = 'ssl_dv_thawte__2'; GP>>>> product_name_id:'ssl_dv_thawte' validity_years:'2' GP>>>> product_name_id:ssl_dv_thawte -- not found GP>>>> PRODUCTS:$VAR1 = undef; GP>>>> Даже не представляю, куда копать. Если взять вот эти тексты и GP>>>> выполнить в GP>>>> скрипте, то всё работает. Т.е., как будто эти латинские буквы в GP>>>> работе какие-то GP>>>> не те. Или меня глючит? EG>>> Вообще удивляюсь, что у тебя хоть что-то печатает, EG>>> потому что вызов keys $result некорректен и ты, EG>>> очевидно, не используешь use strict и use warnings, EG>>> которые обязательно нужно всегда использовать. EG>>> keys берёт аргументом хеш или список, а у тебя скаляр. EG>>> Добавляй use strict и use warnings, исправляй все ошибки EG>>> в коде, на которые они укажут и пробуй снова. GP>> Hачало того скрипта: GP>> use strict; GP>> use warnings; GP>> use utf8; EG> А тогда всё зависит от версии perl. Типа намёк. $ perl -v This is perl 5, version 14, subversion 2 (v5.14.2) built for x86_64-linux-gnu-thread-multi (with 89 registered patches, see perl -V for more detail) ... Jonny wanna live
From: Eugene Grosbein grosbein.net 26 Apr 2020 15:44 +0300
To: Gennadij Pastuhov 2:5036/26
Subject: Что за фигня?
25 апр. 2020, суббота, в 23:07 NOVT, Gennadij Pastuhov написал(а): GP>>>>>>> Кусок кода: GP>>>>>>> for my $key (keys $result) { EG>> Это довольно старая версия perl и какие в ней были баги/особенности, EG>> сейчас тебе тут вряд ли кто ответит. Проще всего заменить EG>> весь твой диагностический вывод на один print Dumper($result) EG>> и поглядеть на него. Вывод в студию. GP> Без проблем. Hо не весь, а только нужные строки, остальные аналогичные: GP> result:$VAR1 = { GP> 'ssl_dv_thawte__2' => 10, GP> }; Фигурные скопбки означают, что $result это ссылка на хеш, так что всё-таки лучше бы ты писал как положено keys %{$result} вместо твоего keys $result. Я удивлён, что старый perl при strict/warnings это пропустил. Eugene -- Кара за одно съеденное яблоко, все-таки, была несоизмеримо велика, приступ диареи послужил бы достаточным уроком.
From: Gennadij Pastuhov 2:5036/26 27 Apr 2020 09:23 +0300
To: Eugene Grosbein grosbein.net
Subject: Что за фигня?
Рад всех приветствовать! А особенно - Eugene! Понедельник апреля 27 20 06:16 Eugene Grosbein писал к Gennadij Pastuhov: GP>> if (defined $PRODUCTS->{$product_name_id}) { EG> Думаю, что ошибка тут. Вместо defined тут необходимо использовать EG> exists, потому что иначе срабатывает autovivification: EG> https://perlmaven.com/autovivification GP>> product_name_id:ssl_dv_thawte -- not found GP>> PRODUCTS:$VAR1 = undef; Не-а: product_name_id:'ssl_dv_thawte' validity_years:'2' product_name_id:ssl_dv_thawte -- not foundPRODUCTS:$VAR1 = undef; ... Jonny wanna live
From: Gennadij Pastuhov 2:5036/26 25 Apr 2020 07:08 +0300
To: Eugene Grosbein grosbein.net
Subject: Что за фигня?
Рад всех приветствовать! А особенно - Eugene! Суббота апреля 25 20 05:47 Eugene Grosbein писал к Gennadij Pastuhov: GP>> Дано: хэш: GP>> my $PRODUCTS = { GP>> ssl_dv_geotrust => 'GeoTrust Standard DV SSL Certificate', GP>> ssl_dv_rapidssl => 'RapidSSL Standard DV SSL Certificate', GP>> ssl_dv_thawte => 'Thawte SSL123 DV', GP>> }; GP>> Кусок кода: GP>> for my $key (keys $result) { GP>> print "\nkey:" . Dumper $key; GP>> my ($product_name_id, $validity_years) = split GP>> '__', $key; GP>> print GP>> "\nproduct_name_id:'$product_name_id'\tvalidity_years:'$validity_ EG> years'"; GP>> if (defined $PRODUCTS->{$product_name_id}) { GP>> ... GP>> } else { GP>> print "\nproduct_name_id:$product_name_id -- not found"; GP>> print "\nPRODUCTS:" . Dumper $PRODUCTS->{$product_name_id}; GP>> В $result хранится результат разjsonивания запроса. И этот код GP>> порождает такой GP>> лог: GP>> key:$VAR1 = 'ssl_dv_thawte__2'; GP>> product_name_id:'ssl_dv_thawte' validity_years:'2' GP>> product_name_id:ssl_dv_thawte -- not found GP>> PRODUCTS:$VAR1 = undef; GP>> Даже не представляю, куда копать. Если взять вот эти тексты и GP>> выполнить в GP>> скрипте, то всё работает. Т.е., как будто эти латинские буквы в GP>> работе какие-то GP>> не те. Или меня глючит? EG> Вообще удивляюсь, что у тебя хоть что-то печатает, EG> потому что вызов keys $result некорректен и ты, EG> очевидно, не используешь use strict и use warnings, EG> которые обязательно нужно всегда использовать. EG> keys берёт аргументом хеш или список, а у тебя скаляр. EG> Добавляй use strict и use warnings, исправляй все ошибки EG> в коде, на которые они укажут и пробуй снова. Начало того скрипта: use strict; use warnings; use utf8; ... Jonny wanna live
From: Gennadij Pastuhov 2:5036/26 24 Apr 2020 18:56 +0300
To: All
Subject: Что за фигня?
Рад всех приветствовать! А особенно - All! Дано: хэш: my $PRODUCTS = { ssl_dv_geotrust => 'GeoTrust Standard DV SSL Certificate', ssl_dv_rapidssl => 'RapidSSL Standard DV SSL Certificate', ssl_dv_thawte => 'Thawte SSL123 DV', }; Кусок кода: for my $key (keys $result) { print "\nkey:" . Dumper $key; my ($product_name_id, $validity_years) = split '__', $key; print "\nproduct_name_id:'$product_name_id'\tvalidity_years:'$validity_years'"; if (defined $PRODUCTS->{$product_name_id}) { ... } else { print "\nproduct_name_id:$product_name_id -- not found"; print "\nPRODUCTS:" . Dumper $PRODUCTS->{$product_name_id}; В $result хранится результат разjsonивания запроса. И этот код порождает такой лог: key:$VAR1 = 'ssl_dv_thawte__2'; product_name_id:'ssl_dv_thawte' validity_years:'2' product_name_id:ssl_dv_thawte -- not found PRODUCTS:$VAR1 = undef; Даже не представляю, куда копать. Если взять вот эти тексты и выполнить в скрипте, то всё работает. Т.е., как будто эти латинские буквы в работе какие-то не те. Или меня глючит? ... Jonny wanna live
From: Gennadij Pastuhov 2:5036/26 06 May 2020 19:08 +0300
To: All
Subject: apache utf8 uri escaping?
Рад всех приветствовать! А особенно - All! Очередная не очень понятная проблема. Есть апач, в конфиге которого есть такой кусок: RewriteEngine on RewriteRule (.*) <тут поскипано>/%D0%B3%D1%83%D0%B4 [R=301,NE,L] Т.е., предполагается, что при заходе на сервер будет перенаправление на страницу с окончанием 'гуд'. При попытке зайти (хоть курлом) фактически отдаётся адрес /%D0%B3%D13%D0%B4 (г3д). Возникло предположение, что движок mod_rewrite воспринял %8, как backreference, и выбросил его. Попробовали вручную вписать в конфиг: /\%D0\%B3\%D1\%83\%D0\%B4 - так RewriteRule заработало нормально. Вопросы: верное ли это предположение? Если конфиг апача генерится эхотагом, то, получается, нужно подобные строки (содержащие %), прогонять через: s/%/\\%/g ? И риторический: долгое гугление на эту тему вообще ничего не дало, как будто такая проблема возникла первый раз. Правда, что ли? ... Jonny wanna live