Значение синтаксической конструкции perl с запятой - PullRequest
1 голос
/ 29 января 2020

В книге я обнаружил фрагмент кода, который выглядит следующим образом:

#for (some_condition) {
#do something not particularly related to the question
$var = $anotherVar+1, next if #some other condition with $var
#}

Понятия не имею, что означает запятая (",") между $ anotherVar + 1 и перед далее делай. Как называется эта синтаксическая конструкция и является ли она правильной?

Ответы [ 3 ]

5 голосов
/ 29 января 2020

Оператор запятой описан в perlop . Вы можете использовать его для разделения команд, сначала он оценивает свой левый операнд, а затем второй. В этом случае вторым операндом является next , который изменяет поток программы.

По сути, это более короткий способ записи

if ($var eq "...") {
    $var = $anotherVar + 1;
    next
}

Запятая может использовать аналогичным образом в C, где вы часто можете найти его в циклах:

for (i = 0, j = 10; i < 10; i++, j--)
3 голосов
/ 29 января 2020

Запятая это оператор , в любом контексте. В контексте списка, где это обычно видно, это один из способов объединения значений в список. Здесь он используется в скалярном контексте, где он запускает предыдущее выражение, следующее выражение, а затем возвращает следующее выражение. Это пережиток того, как это работает в C и подобных языках, когда это не разделитель аргументов; см https://docs.microsoft.com/en-us/cpp/cpp/comma-operator?view=vs-2019.

my @stuff = ('a', 'b'); # comma in list context, forms a list and assigns it
my $stuff = ('a', 'b'); # comma in scalar context, assigns "b"
my $stuff = 'a', 'b'; # assignment has higher precedence
                      # assignment done first then comma operator evaluated in greater context
2 голосов
/ 01 февраля 2020

Рассмотрим следующий код:

$x=1;
$y=1;

$x++ , $y++ if 0; # note the comma! both x and y are one statement
print "With comma: $x $y\n";

$x=1;
$y=1;

$x++ ; $y++ if 0; # note the semicolon! so two separate statements

print "With semicolon: $x $y\n";

Вывод выглядит следующим образом:

With comma: 1 1
With semicolon: 2 1

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

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