Specjalna tablica, @_
, w której obecne są wszystkie argumenty przekazywane do funkcji, jest w rzeczywistości aliasem przekazywanych argumentów. W związku z tym wszelkie zmiany, które wprowadzimy bezpośrednio do tej specjalnej tablicy @_
, będą również odzwierciedleniem w głównej. To jest jasne.Perl: Specjalna tablica @_ nie jest tak naprawdę pseudonimem?
#!/usr/bin/perl
use warnings;
use strict;
$\="\n";
sub func {
print \@_;
$_++ for(@_);
}
my @arr=(2..4);
print \@arr;
func(@arr);
print "@arr";
Dla powyższego programu, spodziewałem odniesienie @arr
i @_
się wskazywać na tym samym miejscu, ponieważ jest aliasem. Ale tak nie jest.
na prowadzeniu powyższego:
ARRAY(0x1b644d0)
ARRAY(0x1b644e0)
3 4 5
Jeśli są wskazując na 2 różnych miejscach, w jaki sposób zmiany wykonane w @_
odzwierciedla w @arr
?
Czy widzę coś nie tak? Proszę o poradę.
'@ _' nie jest aliasem do czegokolwiek. To nie jest to, co mówi dokumentacja. Poszczególne * elementy * '@ _' są aliasami. –