Array yang beranggotakan beberapa reference

 use strict;
my $var_skalar = 666;
my @arraylain = qw(1 2 3 4);
my @array = ("1", \$var_skalar, \@arraylain);
Sampai saat ini kita sudah tahu bahwa @array mempunyai tiga elemen yaitu string "1", scalar reference (\$var_skalar) dan array reference (\@arraylain).
                   --------> 1
|
@array -------------------> scalar reference-----> 666
|
--------> array reference -----> 1
|
-----> 2
|
-----> 3
|
-----> 4
Ada perbedaan untuk mengakses masing-masing elemen tersebut dan mudah saja untuk mencetak elemen yang pertama, karena tipe elemen ini hanyalah sebuah string, tetapi untuk elemen yang kedua dan ketiga ada perbedaan untuk mengaksesnya.
 print $array[0], "\n"; #akan mencetak "1"
print $array[1], "\n"; #akan mencetak alamat memory dari $var_skalar
print $array[2], "\n"; #akan mencetak alamat memory dari @arraylain
Maka untuk print $array[1] mungkin kita akan mendapatkan SCALAR(0x225264) dan untuk $array[2] adalah ARRAY(0x225ec4) pada layar monitor (bisa berbeda di tiap PC).
Lalu bagaimana untuk mengakses elemen yang kedua ?
 print ${$array[1]}, "\n";

Tanda kurung kurawal pada kasus di atas tidak boleh dihilangkan, mungkin tanda ini dijadikan sebagai prioritas oleh Perl, maksudnya pertama-tama Perl mengevaluasi apa yang ada di dalam kurung kurawal (yaitu $array[1]), dan Perl mengambil kesimpulan I bahwa yang ada di dalam kurung kurawal adalah elemen array @array yang kedua yang BERTIPE REFERENCE, lalu sebelum tanda kurung kurawal itu ada tanda "$", lalu Perl mengambil kesimpulan II bahwa $array[1] adalah sebuah reference yang BERTIPE SCALAR REFERENCE dan kemudian Perl mengambil keputusan untuk langsung men dereference dari apa yang disimpulkan sebelumnya (yaitu men dereference $array[1]), ringkas nya Perl men dereference apa yang ada di dalam tanda kurung kurawal.

Lalu bagaimana caranya untuk mengakses elemen yang ketiga? apakah sama dengan cara mengakses elemen yang kedua ? ${$array[2]} ?

 print ${$array[2]}, "\n";
Yang kita dapatkan adalah pesan 'Not A Scalar Reference ..... ', ok, kita balik lagi ke kode dibawah ini
 my @array = ("1", \$var_skalar, \@arraylain);
Bisa kita lihat bahwa elemen yang ketiga adalah sebuah reference, tetapi bukan SCALAR REFERENCE, elemen yang ketiga ini adalah ARRAY REFERENCE, dan seperti yang kita tahu sebelumnya untuk mendereference sebuah array reference kita butuh tanda @, bukan $.
 print @{$array[2]},"\n" ;
dan untuk mengakses elemen dari array reference tersebut adalah dengan notasi
 print @{$array[2]}[1],"\n"; # untuk mencetak "2", atau
print ${$array[2]}[1],"\n"; #(nggak punya penjelasan mengenai ini)
Notes : Kadang-kadang saya bingung antara notasi @{$array}[1] dengan @{$array[1]}, apa bedanya ?
Tetapi mungkin saya bisa mengatakan bahwa @{$array}[1] adalah notasi untuk men dereference array reference $array dan mengakses elemen yang kedua dari array reference tersebut.

Sedangkan @{$array[1]} adalah notasi untuk men dereference $array[1] yang merupakan elemen yang kedua dari array @array. Notasi ini digunakan jika anggota/elemen dari suatu array tersebut adalah sebuah reference, dalam hal ini $array[1] adalah sebuah array reference.
Mungkin bisa digambarkan perbedaanya dengan kode dibawah ini :
 use strict;
my @array = qw (Suicide Guide Assistant);
my $ref1 = \@array;
print @{$ref1}[0],"\n";

my @array2 = (\@array, "for sale");
print @{$array2[0]},"\n";
.."..Blogging : Programing.."..

Komentar