Indeks dari elemen pertama dalam Perl array

Dalam bahasa pemrograman Perl, seperti dalam banyak bahasa pemrograman lainnya, pertama elemen dalam array memiliki indeks 0. Tapi ada kemungkinan (yang sangat tidak dianjurkan untuk menggunakan) untuk membuat index dari elemen pertama adalah 1 (atau nomor lain).

Berikut adalah contoh kode:

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

print $arr[1];

Program ini akan menampilkan teks two. Kita merujuk ke elemen array dengan indeks 1 dan ini kedua elemen dari array.

  • indeks 0 adalah elemen pertama dari array, dalam contoh kita, string 'one'
  • indeks 1 adalah elemen kedua dari array, dalam contoh kita, string 'two'
  • indeks 2 — adalah elemen ketiga dari array, dalam contoh kita, string 'three'

Untuk pelajar dari pemrograman adalah biasa, tapi ini adalah standar. 0 adalah indeks pertama elemen array di hampir semua bahasa pemrograman.

Variabel $[

Pencipta bahasa pemrograman Perl ingin membuat bahasa tersebut bahwa programmer memutuskan untuk dirinya sendiri apa yang dia inginkan untuk menggunakan bahasa (prinsip TIMTOWTDI), oleh karena itu, bahasa adalah cara untuk mengubah indeks dari elemen pertama. Jika seseorang tidak nyaman gunakan 0 sebagai indeks dari elemen pertama, anda bisa mengatakan apa adalah indeks dari elemen pertama akan 1.

Berikut adalah contoh kode:

#!/usr/bin/perl

$[ = 1;

my @arr = ('one', 'two', 'three');

print $arr[1];

Mengatur nilai dari custom variabel per unit $[ = 1; — mengatakan ini sekarang indeks dari elemen pertama akan 1, tidak 0. Program ini akan menampilkan teks one.

Tapi dengan cepat menjadi jelas bahwa kesempatan ini tidak menyederhanakan, tapi agak mempersulit pekerjaan ID. Di sini anda membuka program dan sebelum itu untuk mengubah sesuatu, anda harus terlebih dahulu memahami bagaimana bekerja dengan array.

Jadi Perl 5.12 menggunakan variabel $[ menyebabkan munculnya peringatan: Use of assignment to $[ is deprecated at script.pl line 3..

Perl Versi 5.12, 5.14, 5.16, 5.18, 5.20, 5.22. 5.24, 5.26 dikeluarkan persis peringatan ini. 5.28 adalah untuk mengeluarkan peringatan Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at script.pl line 3., dan Perl 5.30 berhenti memberikan kemampuan untuk mengubah indeks dari elemen pertama. Ketika anda mencoba untuk melakukannya program ini gagal dengan kesalahan teks Assigning non-zero to $[ is no longer possible at script.pl line 3..

Jadi dalam beberapa versi Perl elemen pertama dari array selalu memiliki indeks 0. Di Perl sebelum ini versi memiliki kesempatan untuk membuat nomor lain dengan indeks dari elemen pertama, tapi yang terbaik dari kesempatan ini tidak pernah digunakan.

Dokumentasi resmi

Berikut adalah cuplikan dari output perldoc perlvar Pro variabel $[:

    $[      This variable stores the index of the first element in an array,
            and of the first character in a substring. The default is 0, but
            you could theoretically set it to 1 to make Perl behave more
            like awk (or Fortran) when subscripting and when evaluating the
            index() and substr() functions.

            As of release 5 of Perl, assignment to $[ is treated as a
            compiler directive, and cannot influence the behavior of any
            other file. (That's why you can only assign compile-time
            constants to it.) Its use is highly discouraged.

            Prior to Perl v5.10.0, assignment to $[ could be seen from outer
            lexical scopes in the same file, unlike other compile-time
            directives (such as strict). Using local() on it would bind its
            value strictly to a lexical block. Now it is always lexically
            scoped.

            As of Perl v5.16.0, it is implemented by the arybase module.

            As of Perl v5.30.0, or under "use v5.16", or "no feature
            "array_base"", $[ no longer has any effect, and always contains
            0. Assigning 0 to it is permitted, but any other value will
            produce an error.

            Mnemonic: [ begins subscripts.

            Deprecated in Perl v5.12.0.

Artikel lainnya