powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Perl] 'just' while $d =~ ....
8 сообщений из 8, страница 1 из 1
[Perl] 'just' while $d =~ ....
    #38565372
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ковыряюсь в чужом исходнике и напоролся на код:
Код: php
1.
2.
3.
4.
5.
if ( $d >= 1000000) {
    'just' while $d =~ s/^(-?\d+)(\d\d\d)(\d\d\d)\.(\d\d)/$1,$2,$3\.$4/;
} elsif ($d > 1000) {
   'just' while $d =~ s/^(-?\d+)(\d\d\d)\.(\d\d)/$1,$2\.$3/;
}


Регулярное выражение я понимаю. А вот что такое 'just' while перед ним я не понимаю. И в документации найти не могу.
...
Рейтинг: 0 / 0
[Perl] 'just' while $d =~ ....
    #38565375
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так... кажется дошло.

Это чудо разворачивается в
$_ = 'just' while $d =~ s/.../.../;
Регулярка вернет true только на первом проходе (текст то в переменной меняется). Так что и зацикливания не происходит.
То есть 'just' while в данном случае это такой замаскированный NOP...
Теперь бы еще понять нафига он тут?
...
Рейтинг: 0 / 0
[Perl] 'just' while $d =~ ....
    #38566063
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

А это походу левый рефакторинг... Идея была такая:

Код: php
1.
perl -e 'my $d = "123.456.789"; "just" while $d =~ s/(.*)\.(\d\d\d)/$1,$2/; print "$d\n"'


123,456,789
...
Рейтинг: 0 / 0
[Perl] 'just' while $d =~ ....
    #38566785
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял идею. Рефакторинг чего?

Обе эти строки выдадут одинаковый результат:
perl -e 'my $d = "123.456.789"; "just" while $d =~ s/(.*)\.(\d\d\d)/$1,$2/; print "$d\n"'
perl -e 'my $d = "123.456.789"; $d =~ s/(.*)\.(\d\d\d)/$1,$2/; print "$d\n"'

Я не вижу никакого смысла в использовании этой странной конструкции. Но в коде, рефакторингом которого я сейчас занимаюсь, подобные пакости встречаются практически каждый раз когда делается обработка переменной регекспом.
Вот я и начал сомневаться, может там есть какой-то сакральный смысл которого я не знаю? Может это остатки какого-то древнего диалекта в котором регекспы сами по себе не могли стоять?
...
Рейтинг: 0 / 0
[Perl] 'just' while $d =~ ....
    #38566792
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, прошу прощения. Понял.
Просто у меня тут сейчас везде "одноразовые" шаблоны, глаз замылился и я сначала не обратил внимание что в твоем примере шаблон "многоразовый".
Да, тогда это действительно похоже на правду.
Большое спасибо.
...
Рейтинг: 0 / 0
[Perl] 'just' while $d =~ ....
    #38566794
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такая пара строк выдаст одинаковый результат:

perl -e 'my $d = "123.456.789"; "just" while $d =~ s/(.*)\.(\d\d\d)/$1,$2/; print "$d\n"'
perl -e 'my $d = "123.456.789"; $d =~ s/(.*?)\.(\d\d\d)/$1,$2/g; print "$d\n"'
...
Рейтинг: 0 / 0
[Perl] 'just' while $d =~ ....
    #38567544
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

конструкция вида
Код: php
1.
1while m/something/



распространена достаточно широко и в помещении регулярного выражения под оператор while
вполне определённый смысл есть*, но не в данном случае.

в данном случае его нет.

здесь просматривается коряво реализованное желание превратить число с плав. точкой в строку,
где оно предстанет в виде с разделёнными запятыми тысячными разрядами.



Код: coco
1.
2.
* 1) чтоб попасть в бесконечный цикл, надо очень постараться
  2) перл достаточно интеллектуален, чтоб распознать цикл и скомпилировать регэгкс только 1 раз
...
Рейтинг: 0 / 0
[Perl] 'just' while $d =~ ....
    #38576078
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: perl
1.
2.
3.
4.
5.
6.
7.
use strict;

my ($num, $frac ) = split /[.]/, <>;

1while $num =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g;

print "$num .$frac";
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Perl] 'just' while $d =~ ....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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