пытается написать foreach в oneline в Perl и не удалось - PullRequest
1 голос
/ 28 апреля 2011

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

$ perl testP
syntax error at testP line 3, near "$_ ("
Execution of testP aborted due to compilation errors.

для:

$_=$_+1 foreach $_ (@_);

Может кто-нибудь сказать мне, что пошло не таки как это исправить?спасибо.

Ответы [ 2 ]

10 голосов
/ 28 апреля 2011

переменная foreach (массив) используется в обычной записи, например:

foreach $_ ( @_ ) {
    $_ = $_ + 1;
}

Но вы использовали обратную запись, то есть сначала операцию, а затем цикл.

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

$_ = $_ + 1 foreach @_;

Также обратите внимание, что вы можете использовать for вместо foreach, и если вы просто хотите увеличить переменную, вы можете сделать это с помощью оператора ++, таким образом, сделав так:

$_++ for @_;
0 голосов
/ 28 апреля 2011

$_ получит каждое различное значение @_ на каждую итерацию foreach , а оператор ++ запишет значения .

Так что-то вроде этого будет работать:

foreach (@_) {$_++;}

Примечание: $_++ эквивалентно $_ = $_ + 1

$_ и @_ являются специальными переменными в perl, и они имеют специальное поведение, в этом случае $_ в контексте цикла foreach принимает текущее значение на каждой итерации.

Специальные переменные являются одной из сложных и мощных частей Perl. Вы можете получить дополнительную информацию о том, как они работают, в специальной документации .

Другое дело, что вы не должны использовать специальную переменную в качестве цели foreach, поскольку они, скорее всего, не будут работать должным образом (см. Также foreach документация )

...