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ę.

0
Daanish 19 październik 2012, 10:54

2 odpowiedzi

Najlepsza odpowiedź

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";

6
Chankey Pathak 19 październik 2012, 10:58

Po prostu zmień na

print "Array changed: @array\n";

I powinno być ok

3
Julian 19 październik 2012, 10:57