В чем разница между my ($variableName) и my $variableName в Perl? Что делать в круглых скобках?
Какая разница между моим ($ variableName) и my $variableName в Perl?
Ответ 1
Важный эффект заключается в том, что вы инициализируете переменную одновременно с объявлением:
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.
Ответ 2
Подробнее о операторе my смотрите perdoc perlsub. Вот небольшая выдержка:
Описание:
   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
		Ответ 3
Короткий ответ заключается в том, что круглые скобки заставляют контекст списка использовать в левой части =.
Каждый из других ответов указывает на конкретный случай, когда это имеет значение. Действительно, вы должны прочитать perlfunc, чтобы лучше понять, как функции действуют по-разному при вызове в контексте списка, а не в скалярном контексте.
Ответ 4
Как и в других ответах и комментариях, использование скобок предоставляет контекст списка для переменной.
Ниже приведен фрагмент кода, который дает некоторое объяснение, используя функцию perl split. 
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";
код >