Экспериментальное pu sh на скаляре теперь запрещено в indent2tree - PullRequest
1 голос
/ 24 января 2020

Я понимаю, что подобные вопросы задавались. Однако в этом случае я буду sh использовать этот скрипт с открытым исходным кодом perl:

https://github.com/bAndie91/tools/blob/master/usr/bin/indent2tree

Эта строка вызывает ошибку Experimental push on scalar is now forbidden at /usr/local/bin/indent2tree line 43, near "};"

push $ForkPoint->{subtree}, {data=>$data, parent=>$ForkPoint, subtree=>[]};

Я не очень знаком с Perl. Я проверил несколько вопросов по этой теме c и попытался решить проблему несколькими разными способами, но безуспешно.

Например:

push @ForkPoint->{subtree}, {data=>$data, parent=>$ForkPoint, subtree=>[]};

Это все еще вызывает ошибку.

Поскольку моя цель здесь состоит в том, чтобы просто использовать инструмент, возможно, кто-то, кто знаком с Perl могу поделиться решением. Я открыл ошибку на странице выпуска проекта.

1 Ответ

4 голосов
/ 24 января 2020

Вам нужно

push @{ $ForkPoint->{subtree} }, ...

Всякий раз, когда вы можете использовать имя переменной, вы можете вместо этого использовать блок, который оценивает ссылку. Это означает, что следующий допустимый синтаксис для указания массива:

@NAME    # If you have the name
@BLOCK   # If you have a reference

Это означает, что следующие два фрагмента эквивалентны:

push @arary, ...

my $ref = \@array;
push @{ $ref }, ...

Пока не имеет значения в этом случае, вы можете опустить curlies, когда единственная вещь в блоке - простой скаляр ($NAME или $BLOCK).

push @$ref, ...

См. Perl Синтаксис разыменования .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...