Fungsi push() di Perl

Dalam bahasa pemrograman Perl memiliki fungsi built-in push(). Dengan menggunakan fitur ini, anda dapat menambahkan elemen ke ujung Perl array.

Berikut ini sebuah contoh:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = (1, 2);

push @arr, undef, 'Hello', 8;

print Dumper \@arr;

Program ini mendefinisikan sebuah array @arr dengan dua elemen. Maka dengan menggunakan fungsi push() dalam array ini menambah 3 item. undef, line 'Hello' dan jumlah 8.

Output dari program ini:

$VAR1 = [
          1,
          2,
          undef,
          'Hello',
          8
        ];

Argumen

push(@arr, $value1, $value2);
push(@arr, @other_arr);
push(@arr, @other_arr, @and_the_other_arr);

Standar menggunakan push() yang lulus itu tidak setidaknya dua elemen.

Elemen pertama harus array (beberapa versi Perl elemen pertama dapat menjadi referensi untuk sebuah array, tapi ini penggunaan tidak dianjurkan, detail di bagian lain di bawah ini)

Berikut argumen yang biasanya skalar atau array. Dalam array pertama argumen akan ditambahkan ke semua elemen argumen berikut.

Sebagai argumen anda dapat menentukan hash push(@arr, %hash). Dalam array @arr akan menambahkan semua pasangan kunci-nilai hash (ada keganjilan bahwa urutan nilai hash yang tidak terdefinisi dan berbeda menjalankan program yang sama dapat membuat array elemen-elemen dalam urutan yang berbeda). Tapi kehidupan nyata penggunaan hash sebagai argumen fungsi push() langka.

Jika anda tidak menentukan apapun argumen, maka akan error:

Not enough arguments for push at script.pl line 3, near "push()"
Execution of script.pl aborted due to compilation errors.

Jika anda menentukan satu argumen dan argumen ini adalah array push(@arr);, maka kesalahan tidak akan ini tidak mengubah array, tapi jika kode telah use warnings;, itu adalah peringatan:

Useless use of push with no values at script.pl line 8.

Nilai kembali

Fungsi push() mengembalikan jumlah elemen yang ada dalam array setelah melakukan fungsi ini.

my $number = push(@arr, $value);

Ini adalah kode yang mirip dengan kode ini:

push(@arr, $value);
my $number = scalar(@arr);

Nilai kembali push() tidak perlu terlalu sering. Sangat sering digunakan push(@arr, $value), dan kembali nilai ini diabaikan.

Gunakan ARRAYREF sebagai argumen pertama

Standar menggunakan push() — argumen pertama adalah array ke mana unsur-unsur yang ditambahkan dari semua argumen lain.

Tapi di bahasa pemrograman Perl adalah sebuah eksperimen. Jika argumen pertama adalah array referensi, fungsi push()itu sendiri apakah dereferencing referensi ini dan menambahkan data ke array.

Berikut ini adalah kode.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $arr = [];

push $arr, 1;

warn Dumper $arr;

Perl untuk versi 5.12 (inklusif) dari kode ini melempar kesalahan:

Type of arg 1 to push must be array (not private variable) at script.pl line 9, near "1;"
Execution of script.pl aborted due to compilation errors.

Dimulai dengan Perl 5.14 dan 5.18 untuk versi (inclusive) adalah kode yang ditambahkan item dalam ARRAYREF, dan hasilnya adalah:

$VAR1 = [
          1
        ];

Perl 5.20 dan 5,22 juga menambahkan item di ARRAYREF, tetapi juga memberikan peringatan:

push on reference is experimental at script.pl line 9.
$VAR1 = [
          1
        ];

Dan dimulai dengan versi 5.24 dari kode etik ini memberikan error:

Experimental push on scalar is now forbidden at script.pl line 9, near "1;"
Execution of script.pl aborted due to compilation errors.

Ini fitur penggunaan bahasa tidak dianjurkan. Jika anda perlu untuk menambahkan item dalam ARRAYREF, yang terbaik adalah untuk menulis dengan jelas push @{$arr}, 1; bukan push $arr, 1;

Berikut adalah kode yang bekerja sama pada semua versi Perl:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $arr = [];

push @{$arr}, 1;

warn Dumper $arr;

Dokumentasi resmi

Berikut ini adalah output dari perintah perldoc -f push:

       push ARRAY,LIST
       push EXPR,LIST
               Treats ARRAY as a stack by appending the values of LIST to the
               end of ARRAY.  The length of ARRAY increases by the length of
               LIST.  Has the same effect as

                   for $value (LIST) {
                       $ARRAY[++$#ARRAY] = $value;
                   }

               but is more efficient.  Returns the number of elements in the
               array following the completed "push".

               Starting with Perl 5.14, "push" can take a scalar EXPR, which
               must hold a reference to an unblessed array.  The argument will
               be dereferenced automatically.  This aspect of "push" is
               considered highly experimental.  The exact behaviour may change
               in a future version of Perl.

               To avoid confusing would-be users of your code who are running
               earlier versions of Perl with mysterious syntax errors, put
               this sort of thing at the top of your file to signal that your
               code will work only on Perls of a recent vintage:

                   use 5.014;  # so push/pop/etc work on scalars (experimental)

Topik terkait

Artikel lainnya