В чем разница между my ($ variableName) и my $ variableName в Perl?

В чем разница между my ($variableName) и my $variableName в Perl? Что делать в круглых скобках?

Важным эффектом является то, что вы инициализируете переменную одновременно с объявлением:

 my ($a) = @b; # assigns $a = $b[0] my $a = @b; # assigns $a = scalar @b (length of @b) 

В другой раз важно, когда вы объявляете несколько переменных.

 my ($a,$b,$c); # correct, all variables are lexically scoped now my $a,$b,$c; # $a is now lexically scoped, but $b and $c are not 

Последнее утверждение даст вам сообщение об ошибке, если вы use strict .

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

Каждый из других ответов указывает на конкретный случай, когда это имеет значение. Действительно, вы должны прочитать perlfunc, чтобы лучше понять, как функции действуют по-разному, когда вызывается в контексте списка, а не в скалярном контексте.

Пожалуйста, посмотрите на perdoc perlsub для получения дополнительной информации о my операторе. Вот небольшой отрывок:

Сводка:

  my $foo; # declare $foo lexically local my (@wid, %get); # declare list of variables local my $foo = "flurp"; # declare $foo lexical, and init it my @oof = @bar; # declare @oof lexical, and init it my $x : Foo = $y; # similar, with an attribute applied 

Поскольку другой ответ и комментарии объясняют использование скобок, они предоставляют контекст списка переменной. Ниже приведен fragment кода, который дает некоторое объяснение, используя функцию split функций perl.

 use strict; my $input = "one:two:three:four"; # split called in list context my ($out) = split(/:/,$input); # $out contains string 'one' #(zeroth element of the list created by split operation) print $out,"\n"; # split called in scalar context my $new_out = split(/:/,$input); # $new_out contains 4 (number of fields found) print $new_out,"\n"; 

  • Как использовать переменные оболочки в командной строке perl в сценарии оболочки bash?
  • Подсчет количества вхождений строки внутри другой (Perl)
  • Как использовать переменную на стороне замены оператора замены Perl?
  • Как я могу анализировать даты и преобразовывать часовые пояса в Perl?
  • Как создается построение Perl's @INC? (ака Какие способы повлиять на поиск модhive Perl?)
  • Использование профилей памяти Perl и обнаружение утечки?
  • Разница двух массивов с использованием Perl
  • Как я могу устранить свой скрипт CGI Perl?
  • Использование my с круглыми скобками и только одна переменная
  • Как проверить, существует ли файл в Perl?
  • Почему при использовании ActivePerl я должен указать ключ -i с расширением резервной копии?
  • Давайте будем гением компьютера.