Демистификация Glob Perl (*)

В этот вопрос плакат спрашивал, как сделать следующее в одной строке:

sub my_sub {
    my $ref_array = shift;
    my @array = @$ref_array;
}

который с моим знанием базового Perl магии я бы избежал, просто используя что-то вроде:

sub my_sub {
    my $ref_array = shift;
    for (@$ref_array) {
      #do somthing with $_ here
    };

    #use $ref_array->[$element] here
}

Однако в этот ответ один из местных монахов SO tchrist предложил:

sub my_sub {
  local *array = shift();
  #use @array here
}

Когда я спросил

Пытаясь изучить Perl среднего уровня магия, могу я спросить, что это ты к чему здесь настраиваетесь? Ты установка ссылки на @array на arrayref, который был передан? Как вы знаете, что вы создаете @array и не% array или $ array? Где я могу узнать больше об этом * операторе (перлоп?). Спасибо!

Мне предложили задать это как новое сообщение, хотя он дал хорошие ссылки. В любом случае, здесь идет? Может ли кто-нибудь объяснить, что назначается чему и как создается @array, а не, возможно,% array или $ array? Спасибо.

18
задан Community 23 May 2017 в 12:00
поделиться