Các chỉ số của các yếu tố đầu tiên trong một Perl mảng

Perl ngôn ngữ như nhiều người khác, ngôn ngữ, các yếu tố đầu tiên trong mảng có một số 0. Nhưng đã có một khả năng (đó là rất không nên để sử dụng) để làm cho các chỉ số của các yếu tố đầu tiên là 1 (hoặc số khác).

Đây là một ví dụ mã:

▶ Run
#!/usr/bin/perl

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

print $arr[1];

Chương trình sẽ hiển thị các văn bản two. Chúng tôi chỉ đến mảng yếu tố với chỉ số 1 và đây tố thứ hai của các mảng.

  • chỉ số 0 là yếu tố đầu tiên của các mảng, trong ví dụ của chúng chuỗi 'one'
  • chỉ số 1 là yếu tố thứ hai của các mảng, trong ví dụ của chúng chuỗi 'two'
  • chỉ số 2 — là thứ ba yếu tố của các mảng, trong ví dụ của chúng chuỗi 'three'

Cho học viên của chương trình này không bình thường, nhưng đây là tiêu chuẩn. 0 là các chỉ số đầu tiên nguyên tố của các mảng ở gần như tất cả các chương trình ngôn ngữ.

Biến $[

Những người sáng tạo của Perl ngôn ngữ muốn làm cho ngôn ngữ như vậy là lập trình viên quyết định cho mình những gì anh ta muốn dùng ngôn ngữ (những nguyên tắc của TIMTOWTDI), vì vậy, ngôn ngữ đã được một cách để thay đổi các chỉ số của các yếu tố đầu tiên. Nếu người nào đó không sử dụng 0 như các chỉ số của các yếu tố đầu tiên, bạn có thể nói là những gì các chỉ số của các yếu tố đầu tiên sẽ được 1.

Đây là một ví dụ mã:

#!/usr/bin/perl

$[ = 1;

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

print $arr[1];

Đặt giá trị của các tùy biến mỗi đơn vị $[ = 1; — nói điều này ngay bây giờ các chỉ số của các yếu tố đầu tiên sẽ được 1, không 0. Chương trình sẽ hiển thị các văn bản one.

Nhưng một cách nhanh chóng, nó trở nên rõ ràng rằng cơ hội này không đơn giản hóa, nhưng thay vì làm việc làm phức tạp ID. Ở đây, bạn mở chương trình và trước khi nó để thay đổi điều gì đó bạn đầu tiên cần phải hiểu làm thế nào là làm việc với những mảng.

Vì vậy, Perl 5.12 sử dụng biến $[ dẫn đến sự xuất hiện lời cảnh báo: Use of assignment to $[ is deprecated at script.pl line 3..

Các Bản Perl 5.12, 5.14, 5.16, 5.18, 5.20, 5.22. 5.24, 5.26 ban hành chính này, cảnh báo. 5.28 đã phát hành một cảnh báo Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at script.pl line 3., và Perl 5.30 dừng lại cho khả năng thay đổi các chỉ số của các yếu tố đầu tiên. Khi bạn cố gắng để làm điều đó chương trình không với một văn bản lỗi Assigning non-zero to $[ is no longer possible at script.pl line 3..

Vì vậy trong phiên bản mới của Perl yếu tố đầu tiên của các mảng luôn luôn có chỉ số 0. Trong Perl trước khi đến đây phiên bản có cơ hội để thực hiện một số của các chỉ số của các yếu tố đầu tiên, nhưng tốt nhất của cơ hội này không bao giờ sử dụng.

Tài liệu chính thức

Đây là một đoạn trong đầu ra perldoc perlvar Chuyên nghiệp biến $[:

    $[      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.

Các bài viết khác