GNU/Linux >> Belajar Linux >  >> Linux

Referensi Array Perl dan Tutorial Dereference Dengan Contoh Praktis

Dalam artikel ini mari kita tinjau bagaimana mereferensikan dan mendereferensi array Perl dengan contoh. Referensi tidak lain adalah lokasi ( alamat ) dari variabel lain. Referensi dapat berupa array, atau hash, atau potongan kode Perl. Referensi membuat kode Perl berjalan lebih cepat.

Referensi Perl Ke Array

Biasanya, kami menyimpan daftar elemen dalam array seperti yang ditunjukkan di bawah ini.

@array =  (“one”,”two”,”three”,”four”,”five”);

Untuk menetapkan referensi array ke dalam variabel, gunakan operator garis miring terbalik (\) seperti yang ditunjukkan di bawah ini

$array_ref = \@array;

Jika Anda mencoba mencetak variabel $array_ref, Anda akan mendapatkan sesuatu seperti berikut.

ARRAY(0x1a2b3c)

Referensi array Perl juga dapat diteruskan ke subrutin seperti yang ditunjukkan di bawah ini.

sub add_numbers
{
  my $array_ref =  shift;
  .....
}  

@numbers = (11,2,3,45);

$array_ref = add_numbers(\@numbers);

Dalam cuplikan kode di atas, kita perlu melakukan de-referensi larik, sehingga subrutin dapat mengambil elemen dari larik asli.

Berikut adalah beberapa keuntungan meneruskan referensi ke subrutin, daripada melewatkan seluruh array.

  • Jika kita meneruskan larik ke subrutin, Perl menyalin seluruh larik ke dalam variabel @_. Ketika array besar, ini bukan metode yang efektif.
  • Bila kita ingin larik asli dimodifikasi oleh subrutin, kita harus meneruskan referensi larik tersebut.
  • Referensi memainkan peran penting dalam membangun struktur data yang kompleks.

Kita dapat mengambil referensi Array Anonim ke dalam variabel skalar seperti yang ditunjukkan di bawah ini.

$array_ref = [ 11,2,3,45];

Catatan:Artikel ini adalah bagian dari seri Tutorial Perl yang sedang berlangsung.

Array Dereferensi Perl

Di dalam subrutin, dereferensi dapat dilakukan menggunakan salah satu metode yang ditunjukkan di bawah ini.

Variabel referensi dapat direferensikan seperti yang ditunjukkan di bawah ini. Dengan menggunakan metode ini, kita dapat mengambil semua elemen array. Ini sama dengan @numbers.

@{ $array_ref };

Untuk mendapatkan elemen tertentu dalam array, lakukan hal berikut. Pernyataan ini memberikan elemen pertama dari array @numbers. Ini sama dengan $numbers[0]

$ { $array_ref }[0]

Alih-alih menyimpan referensi ke dalam variabel, elemen array dapat diakses langsung dari variabel bawaan Perl.

# Get all the elements of @numbers array.
@ { $_[0] }

# Get a particular element. This gives the first element of the array.
$ { $_[0] } [0]

Catatan : Jika kita mendereferensi variabel skalar sederhana, maka kita dapat menghilangkan kurung kurawal seperti yang ditunjukkan di bawah ini.

@$array_ref  # same as @{ $array_ref }

$$array_ref  # same as $ { $array_ref }

$_[0]         # not a simple scalar variable and this cant be dereferenced,

Menyimpan Banyak Referensi ke dalam Array Perl

Mari kita gunakan contoh cuplikan kode Perl berikut.

#Array contains source ip and destination ip
@IP = ('192.168.1.10','192.168.1.15'); 

#Array contains the source port and destination port numbers
@PORT = ("5000","5002"); 

#Sublayers of TCP layer
@TCP = ("Q931","H225","H245"); 

#Common layers are available in a TCP packet.
@LAYER = ("ETHERNET","IP",\@TCP); 

@PKT = (
         \@IP,
         \@PORT,
         \@LAYER
        );
#Storing the reference of @PKT array into the scalar variable.
$array_ref = \@PKT;

Untuk memahami referensi array, mari kita asumsikan bahwa dari potongan kode di atas, kita ingin mengakses sublapisan kedua ("H225") dari lapisan TCP. Ini dapat dilakukan seperti yang dijelaskan di bawah ini.

Pertama, kita harus mengakses array LAYER. Ini mengembalikan referensi array @LAYER.

$ { $array_ref } [2]

$array_ref adalah variabel skalar sederhana. Jadi, kurung kurawal bisa dihilangkan dan bisa juga ditulis seperti di bawah ini.

$$array_ref[2]

Selanjutnya, untuk mengakses elemen/layer ketiga (dari @LAYER) melalui referensi ini.

$ { $ { $array_ref } [2] } [2]

Ini mengembalikan alamat array @TCP.

Akhirnya, kita dapat memperoleh sublapisan kedua dari lapisan TCP (dari array @TCP) seperti yang ditunjukkan di bawah ini.

$ { $ { $ { $array_ref } [2] } [2] } [1]

Di atas terlihat cukup rumit dan mengurangi modularitas kode. Ada ketentuan untuk menulis ulang pernyataan-pernyataan di atas agar lebih enak dipandang mata dengan cara berikut ini.

Dalam Perl, $ { VAR } [ $y] dapat ditulis sebagai VAR->[$y].

$ { $array_ref } [2]  is same as $array_ref->[2]

$ { $ { $array_ref } [2] } [2] is same as $array_ref->[2]->[2]

$ { $ { $ { $array_ref } [2] } [2] } [1] is same as $array_ref->[2]->[2]->[1]

Sekarang, dengan menggunakan aturan "drop arrow", kita dapat menulis ulang seperti yang ditunjukkan di bawah ini. Sesuai aturan "jatuhkan panah", kami tidak dapat menghapus panah pertama. Ini jauh lebih mudah dibaca.

$array_ref->[2][2][1]

Linux
  1. Tutorial Perintah Linux nice and renice (7 Contoh)

  2. Perluas Dan Hapus Tutorial Perintah Dengan Contoh

  3. Tutorial Awk:Memahami Variabel Awk dengan 3 Contoh Praktis

  1. Bash Array Dengan Contoh

  2. Tutorial Status Keluar Bash Shell dengan Contoh Praktis

  3. Perintah Gema dengan Contoh Praktis

  1. Tutorial Bash HereDoc Dengan Contoh

  2. Array AWK Dijelaskan dengan 5 Contoh Praktis

  3. Tutorial Bash Array Terbaik dengan 15 Contoh