Indekset for det første element i et Perl-array

I programmeringssproget Perl, som i mange andre programmeringssprog, det første element i arrayet har et indeks 0. Men der var en mulighed (som er stærkt anbefales ikke at bruge) for at gøre indekset for det første element var 1 (eller et andet tal).

Her er et eksempel kode:

▶ Run
#!/usr/bin/perl

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

print $arr[1];

Programmet vil vise teksten two. Vi henviser til array-element med indeks 1 og det andet element i array ' et.

  • indeks 0 er det første element i arrayet, i vores eksempel strengen 'one'
  • indeks 1 er det andet element i arrayet, i vores eksempel strengen 'two'
  • indeks 2 — er det tredje element i arrayet, i vores eksempel strengen 'three'

For elever i programmering er usædvanligt, men det er standard. 0 er indekset for den første element i array i næsten alle programmeringssprog.

Variabel $[

Skaberne af programmeringssproget Perl ønskede at gøre det sprog, sådan at programmøren besluttede for sig selv, hvad han ønsker at bruge sproget (princippet om TIMTOWTDI), derfor, sprog var en måde at ændre indekset for det første element. Hvis nogen er ubehageligt brug 0 som indekset for det første element, man kan sige, hvad er indekset for det første element vil være 1.

Her er et eksempel kode:

#!/usr/bin/perl

$[ = 1;

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

print $arr[1];

Sæt værdien af den tilpassede variabel per enhed $[ = 1; — sige, at dette nu indekset for det første element vil være 1, ikke 0. Programmet vil vise teksten one.

Men det blev hurtigt klart, at denne mulighed ikke forenkle, men snarere vanskeliggør arbejdet - ID. Her skal du åbne programmet, og før det til at ændre noget, du først nødt til at forstå hvordan er arbejdet med array.

Så Perl 5.12 brug af variabel $[ førte til fremkomsten advarsel: Use of assignment to $[ is deprecated at script.pl line 3..

Perl Version 5.12, 5.14, 5.16, 5.18, 5.20, 5.22. 5.24, 5.26 udstedt netop denne advarsel. 5.28 var at udstede en advarsel Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at script.pl line 3., og Perl 5.30 stoppede for at give mulighed for at ændre indekset for det første element. Når du forsøger at gøre det programmet fejler med en fejlbehæftet tekst Assigning non-zero to $[ is no longer possible at script.pl line 3..

Så i de seneste versioner af Perl første element i array altid har index 0. I Perl forud for dette version har mulighed for at gøre andet nummer af indekset for det første element, men det bedste af denne mulighed brug aldrig.

Officiel dokumentation

Her er et uddrag af 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.

Andre artikler