Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

+key => +value

0 views
Skip to first unread message

Gennadij Pastuhov

unread,
Jan 28, 2019, 8:24:58 AM1/28/19
to
Рад всех приветствовать! А особенно - All!

Иногда встречаю в коде выражения вида:
{
-key => "value",
}
или
{
response => '+response',
}

В доке что-то не могу найти, как это понимать. Помогите, плз!

... Jonny wanna live

Gennadij Pastuhov

unread,
Jan 28, 2019, 8:49:59 AM1/28/19
to
Рад всех приветствовать! А особенно - All!

Иногда встречаю в коде выражения вида:
{
-key => "value",
}

upd:
или
{
response => '+response',
}
С этим разобрался, просто строка :) А вот минус в ключе - пока загадка.

... Jonny wanna live

Eugene Grosbein

unread,
Jan 28, 2019, 11:24:58 AM1/28/19
to
28 янв. 2019, понедельник, в 16:44 NOVT, Gennadij Pastuhov написал(а):

GP> Иногда встречаю в коде выражения вида:
GP> {
GP> -key => "value",
GP> }
GP> upd:
GP> или
GP> {
GP> response => '+response',
GP> }
GP> С этим разобрался, просто строка :) А вот минус в ключе - пока загадка.

Дефис это просто часть строки. То есть, если ты используешь -key
при задании значений, то и выбирать значения тоже должен так же:

$hash{'-key'}

Дефис тут ничем не отличается от букв k, e, y.

Eugene

Valera Kolesnik

unread,
Feb 17, 2019, 12:14:59 PM2/17/19
to
Hello Eugene.

28 Jan 19 23:12, you wrote to Gennadij Pastuhov:

GP>> Иногда встречаю в коде выражения вида:
GP>> {
GP>> -key => "value",
GP>> }
GP>> upd:
GP>> или
GP>> {
GP> response =>> '+response',
GP>> }
GP>> С этим разобрался, просто строка :) А вот минус в ключе - пока загадка.

EG> Дефис это просто часть строки. То есть, если ты используешь -key
EG> при задании значений, то и выбирать значения тоже должен так же:

EG> $hash{'-key'}

EG> Дефис тут ничем не отличается от букв k, e, y.

небольшая поправка: отличается всё же. тем, что bareword квотит (превращает в
строку)

Valera

Eugene Grosbein

unread,
Feb 18, 2019, 12:09:59 AM2/18/19
to
17 февр. 2019, воскресенье, в 09:02 NOVT, Valera Kolesnik написал(а):

GP>>> Иногда встречаю в коде выражения вида:
GP>>> {
GP>>> -key => "value",
GP>>> }
GP>>> upd:
GP>>> или
GP>>> {
GP>> response =>> '+response',
GP>>> }
GP>>> С этим разобрался, просто строка :) А вот минус в ключе - пока загадка.
EG>> Дефис это просто часть строки. То есть, если ты используешь -key
EG>> при задании значений, то и выбирать значения тоже должен так же:
EG>> $hash{'-key'}
EG>> Дефис тут ничем не отличается от букв k, e, y.
VK> небольшая поправка: отличается всё же. тем, что bareword квотит
VK> (превращает в
VK> строку)

Hет.

$ perl -e 'use strict; my $h = { key => "v", -key => "w" }; print $$h{key},
$$h{-key}'
vw

Совершенно никакой разницы и дефис ничего не квотит.
Просто perl разрешает barewords в качестве ключей даже при use strict
и дефис на первой позиции - допустимый символ в barewords наравне с буквами.

Eugene

Valera Kolesnik

unread,
Feb 18, 2019, 8:54:58 PM2/18/19
to
Hello Eugene.

18 Feb 19 11:55, you wrote to me:

EG>>> Дефис это просто часть строки. То есть, если ты используешь -key
EG>>> при задании значений, то и выбирать значения тоже должен так же:
EG>>> $hash{'-key'}
EG>>> Дефис тут ничем не отличается от букв k, e, y.

VK>> небольшая поправка: отличается всё же. тем, что bareword квотит
VK>> (превращает в
VK>> строку)

EG> Hет.

вообще-то, да


EG> $ perl -e 'use strict; my $h = { key => "v", -key => "w" }; print $$h{key},
EG> $$h{-key}'
EG> vw

$ perl -e 'use strict; my $h = { key => "v", -key, "w" }; print $$h{key},
$$h{-key}'
vw

^^^^^


EG> Совершенно никакой разницы и дефис ничего не квотит.
EG> Просто perl разрешает barewords в качестве ключей даже при use strict
EG> и дефис на первой позиции - допустимый символ в barewords наравне с
EG> буквами.

это неправильные утверждения.


Unary "-" ...
If the operand is an identifier, a string consisting of a minus sign
concatenated with the identifier is returned.
...
One effect of these rules is that "-bareword" is equivalent to the string
"-bareword".


что я выше и продемонстрировал убрав толстую запятую


Valera

Eugene Grosbein

unread,
Feb 19, 2019, 12:59:59 AM2/19/19
to
18 февр. 2019, понедельник, в 17:45 NOVT, Valera Kolesnik написал(а):

VK> $ perl -e 'use strict; my $h = { key => "v", -key, "w" }; print $$h{key},
VK> $$h{-key}'
VK> vw
VK> ^^^^^
EG>> Совершенно никакой разницы и дефис ничего не квотит.
EG>> Просто perl разрешает barewords в качестве ключей даже при use strict
EG>> и дефис на первой позиции - допустимый символ в barewords наравне с
VK> буквами.
VK> это неправильные утверждения.
VK> Unary "-" ...
VK> If the operand is an identifier, a string consisting of a minus sign
VK> concatenated with the identifier is returned.
VK> ...
VK> One effect of these rules is that "-bareword" is equivalent to the string
VK> "-bareword".
VK> что я выше и продемонстрировал убрав толстую запятую

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

Eugene
--
Choose no life

Valera Kolesnik

unread,
Feb 19, 2019, 1:14:58 PM2/19/19
to
Hello Eugene.

19 Feb 19 12:51, you wrote to me:

VK>> $ perl -e 'use strict; my $h = { key => "v", -key, "w" }; print $$h{key},
VK>> $$h{-key}'
VK>> vw
VK>> ^^^^^
EG>>> Совершенно никакой разницы и дефис ничего не квотит.
EG>>> Просто perl разрешает barewords в качестве ключей даже при use strict
EG>>> и дефис на первой позиции - допустимый символ в barewords наравне с
VK>> буквами.
VK>> это неправильные утверждения.
VK>> Unary "-" ...
VK>> If the operand is an identifier, a string consisting of a minus sign
VK>> concatenated with the identifier is returned.
VK>> ...
VK>> One effect of these rules is that "-bareword" is equivalent to the string
VK>> "-bareword".
VK>> что я выше и продемонстрировал убрав толстую запятую

EG> Спор ни о чём, так как это полностью эквивалентные
EG> в практическом смысле определения. То же можно сказать не только
EG> про минус, но и про любую другую букву и это будет верно на практике.

я не спорю, а поправляю. человек, начинающий знакомство с перлом запутался в
одной хитрой и интересной теме и попросил прояснить.
насколько эта тема интересна и хитра понятно, например, по твоему заблуждению.
я только поясняю, как оно на самом деле есть.

какие вещи эквивалентные? "-" специален. поэтому мы можем написать:

my %h = ( -key, 'value' );

а вот так уже не можем:

my %h = ( key, 'value' );


точно также с простыми строками вне инициализации хешей:

my $s = -value;

будет работать ($s = '-value'), а:

my $s = value;

не будет (Bareword "value" not allowed while "strict subs" in use at -e line 1.
Execution of -e aborted due to compilation errors).


и как не заменяй в этих примерах '-' на любую другую букву, работать они уже не
будут.


Valera

Eugene Grosbein

unread,
Feb 19, 2019, 2:04:58 PM2/19/19
to
19 февр. 2019, вторник, в 09:53 NOVT, Valera Kolesnik написал(а):

VK>>> Unary "-" ...
VK>>> If the operand is an identifier, a string consisting of a minus sign
VK>>> concatenated with the identifier is returned.
VK>>> ...
VK>>> One effect of these rules is that "-bareword" is equivalent to the
VK>>> string
VK>>> "-bareword".
VK>>> что я выше и продемонстрировал убрав толстую запятую
EG>> Спор ни о чём, так как это полностью эквивалентные
EG>> в практическом смысле определения. То же можно сказать не только
EG>> про минус, но и про любую другую букву и это будет верно на практике.
VK> я не спорю, а поправляю. человек, начинающий знакомство с перлом
VK> запутался в
VK> одной хитрой и интересной теме и попросил прояснить.
VK> насколько эта тема интересна и хитра понятно, например, по твоему
VK> заблуждению.
VK> я только поясняю, как оно на самом деле есть.
VK> какие вещи эквивалентные? "-" специален. поэтому мы можем написать:
VK> my %h = ( -key, 'value' );
VK> а вот так уже не можем:
VK> my %h = ( key, 'value' );
VK> точно также с простыми строками вне инициализации хешей:
VK> my $s = -value;
VK> будет работать ($s = '-value'), а:
VK> my $s = value;
VK> не будет (Bareword "value" not allowed while "strict subs" in use at -e
VK> line 1.
VK> Execution of -e aborted due to compilation errors).
VK> и как не заменяй в этих примерах '-' на любую другую букву, работать они
VK> уже не
VK> будут.

Ах вот ты о чём, я думал мы всё ещё в контексте вопроса.
Тогда да, ты прав.

Eugene
--
Тестоголовые кислое свое брожение приняли за душу, распарывание чрев
своих - за историю, средства, оттягивающие разложение - за цивилизацию...
0 new messages