Что может означать эта линия?
my $x = shift ;
Что может означать эта линия?
my $x = shift ;
 shift() - встроенная подпрограмма Perl, которая принимает массив в качестве аргумента, а затем возвращает и удаляет первый элемент в этом массиве. Общепринятой практикой является получение всех параметров, передаваемых в подпрограмму с вызовами shift. Например, скажем, у вас есть подпрограмма foo, которая принимает три аргумента. Один из способов получить эти параметры, назначенные локальным переменным, равен shift следующим образом:
sub foo() {
  my $x = shift;
  my $y = shift;
  my $z = shift;
  # do something
}
Путаница здесь в том, что кажется, что сдвиг не передается массивом в качестве аргумента. Фактически, он передается массивом "по умолчанию" неявно, что является @_ внутри подпрограммы или @ARGV вне подпрограммы.
Функция shift удаляет первый элемент из массива и возвращает его. Массив укорачивается одним элементом.
Массив по умолчанию (если он не указан как параметр) @_, если вы находитесь в функции, или @ARGV, если вы находитесь в области файлов.
Таким образом, в этом случае $x либо устанавливается на первый параметр функции, либо на первый параметр командной строки.
В Perl многие методы используют переменные по умолчанию ($_ и @_), если явно не указать аргументы. Ваш код идентичен:
my $x = shift @_;
Как уже указывалось PullMonkey ранее, внутри подпрограммы @_ содержит аргументы, переданные этой подпрограмме (как описано в perlsub). shift удалит первое значение аргумента из @_ и сохранит его в $x, поэтому $_[0] теперь предоставит вам аргумент  второй, переданный вашей подпрограмме.
Обычно это идиома: $x - локальная переменная, назначенная первому параметру, переданному подпрограмме, хотя.
my ($x) = @_;
вероятно, более ясный (и он не изменяет список аргументов).
Если вы находитесь в подпрограмме, эта строка будет shift на @_ (параметры, которые передаются). 
Итак, $x будет первым элементом popped из массива @_.
Итак, вы обычно видите $x = shift if @_;
на языке непрофессионала, с очень высокого уровня, сдвиг принимает первый элемент массива (крайняя левая часть), а противоположность - поп, который принимает последний элемент массива (самая правая часть).
my @array1=(5,6,7,8,9); my $x = shift @array1; print "$x\n"; # 5 print "@array1\n"; # 6 7 8 9