0

私は Perl を初めて使用するので、これを理解できません。2 つの一見同一のコード セットがありますが、1 つのサブルーチンが値を更新し、別のサブルーチンは値を更新しません。最初のコード セットでは、配列への参照が渡され、その参照が指している値が更新されると理解しています。その後、サブルーチンを終了すると、値が変更されています。ただし、2番目のものでは、同じことが起こると予想されます。配列は更新されますが、サブルーチンを終了すると忘れてしまいます。2 番目のコード セットの舞台裏で何が起こっているのか説明してもらえますか?

最初のコード セット:

#!/usr/bin/perl -w

use strict;

{
    my @array = (1, 2, 3);
    removeSecondElement(\@array);
    print @array;  #output: 13
    print("\n");
}

sub removeSecondElement{
    my ($arrayReference) = @_;
    splice(@$arrayReference, 1, 1);
    print @$arrayReference;  #output: 13
    print "\n";
}

2 番目のコード セット:

#!/usr/bin/perl -w

use strict;

{
    my @array = (1, 2, 3);
    removeSecondElement(\@array);
    print @array;  #output: 123
    print("\n");
}

sub removeSecondElement{
    my ($arrayReference) = @_;
    my @array = @$arrayReference;
    splice(@array, 1, 1);
    print @array;  #output: 13
    print "\n";
}
4

1 に答える 1

7

最初の例では、参照を使用して配列を取得し、それを変更します。配列は 1 つしかなく、それを変更します。

2 番目の例では、参照を使用して配列を取得し、配列の内容を 2 番目の配列にコピーしてから、2 番目の配列を変更します。2 つの配列があり、元の配列を変更することはありません。

于 2015-02-04T14:30:06.587 に答える