LINUX.ORG.RU

множественное присваивание с defined-or

 


0

2

всем привет, есть такой перл-код:

sub process {
    my ($aref, $key, $low, $high) = @_;
    # $low и $high - необязательные параметры.
    ($low, $high) //= (0, scalar @$aref);
    # вот тут в $low пусто, а в $high как и ожидалось.
    # Если отдельное присвоение:
    $low  //= 0;
    $high //= scalar @$aref;
    # то всё работает как надо.
}

Подскажите, почему такое поведение? Баг или фича?

P.S. подсветку на лоре так и не поправили...

Deleted

Последнее исправление: Deleted (всего исправлений: 1)

P.S. подсветку на лоре так и не поправили...

А кто ее чинить будет, это наверняка сторонняя либа. Возьми и почини или багреквест авторам отправь.

Virtuos86 ★★★★★
()

// интерпретирует выражение в скалярном контексте, а массив в скалярном контексте возвращает последний элемент.

Нельзя так вообще(без -w что ли пишете?):

% perl -wE 'my($x,$y)=(3,4);($x,$y)//=(5,6);say $x,$/,$y'
Useless use of a constant (5) in void context at -e line 1.
Useless use of private variable in void context at -e line 1.
3
4

disarmer ★★★
()

Баг или фича?

фича. в перле контекст определяется операцией. // — подразумевает скалярный контекст.

pef-secure
()
Ответ на: комментарий от pef-secure

Вообще да, с массивом количество элементов, а со списком(или как он там называется) последний элемент:

% perl -wE '@_=(1,2,7);say scalar @_;say scalar (1,2,7)'
Useless use of a constant (2) in void context at -e line 1.
3
7

disarmer ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.