use warnings;
use strict;
my @array = (1,2,3,4,5);
my $v = 1;
sub by_ref
{
my ($array_ref,$v) = @_;
@$array_ref = (0,0,0);
print "Array inside by_ref: @$array_ref\n";
}
by_ref(\@array,$v);
print "Array changed: @$array\n";
Podaję @array
przez odniesienie (zakładam, że robię to dobrze). Chcę, aby zmiany wprowadzone w procedurze sub @array
zostały odzwierciedlone w procedurze wywołującej sub. Nie wiem, gdzie popełniłem błąd. Z góry dziękuję.
2 odpowiedzi
Drukujesz również odwołanie do tablicy poza podprogramem, co jest błędne. Zakres odwołania do tablicy jest ograniczony tylko do podprogramu.
Powinieneś więc zmienić ostatnią linię, aby drukować tylko @array
, a nie @$array
.
Lubić:
print "Array changed: @array\n";
Po prostu zmień na
print "Array changed: @array\n";
I powinno być ok
Podobne pytania
Nowe pytania
perl
Perl to proceduralny, wysokopoziomowy, dynamiczny język programowania ogólnego przeznaczenia, znany z natywnej obsługi wyrażeń regularnych i możliwości analizowania ciągów. Użyj tego tagu w przypadku ogólnych pytań dotyczących Perla. W przypadku rzeczy związanych z nowym (ale pokrewnym) językiem Raku (dawniej „Perl 6”), użyj tagu raku. W przypadku wyrażeń regularnych w stylu Perla w innych językach użyj znacznika regex lub, jeśli są one oparte na bibliotece PCRE, znacznika pcre.