Cuvinte 'goale' în Perl

bareword strict

use strict are 3 părți. Una dintre ele, numită și use strict "subs", previne utilizarea neadecvată a cuvintelor "goale" (n.t.: adică a cuvintelor care nu sunt încadrate în ghilimele) barewords.

Ce înseamnă asta?

Fără nici o restricție un astfel de cod ar rula și ar imprima "hello".

my $x = hello;
print "$x\n";    # hello

Aceasta este o chestiune ciudată, în sine, pentru că noi suntem obișnuiți să punem cuvintele între ghilimele, dar Perl, implicit, permite așa numitelor barewords să se comporte ca șiruri de caractere.

Codul de mai sus ar imprima "hello".

Bine, cel puțin până când cineva ar adăuga o subrutină numită "hello" la începutul scriptului:

sub hello {
  return "zzz";
}

my $x = hello;
print "$x\n";    # zzz

Da. În această versiune Perl vede subrutina hello(), o execută și atribuie valoarea returnată lui $x.

Apoi, dacă cineva mută subrutina la sfârșitul fișierului, după atribuire, Perl pe neașteptate nu mai vede subrutina în momentul atribuirii, deci obținem vechea ... de avea "hello" în $x.

Nu, nu vrei să intri într-o astfel de încurcătură accidental. Sau chiar mai probabil, niciodată. Având use strict în cod, Perl nu va permite acel cuvânt fără ghilimele: hello în codul tău, evitând astfel acest tip de confuzie.

use strict;

my $x = hello;
print "$x\n";

Acesta va genera următoarea eroare:

Bareword "hello" not allowed while "strict subs" in use at script.pl line 3.
Execution of script.pl aborted due to compilation errors.

Utilizarea corectă a cuvintelor fără ghilimele (barewords)

Sunt locuri în care utilizarea cuvintelor fără ghilimele (barewords) este acceptată chiar dacă folosim use strict "subs".

În primul rând, numele subrutinelor pe care le creăm sunt barewords. Acestea sunt folositoare.

De asemenea, atunci când facem referință la un element a unui hash putem folosi barewords în interiorul acoladelor și cuvintele din partea stângă a => (en: fat arrow) pot fi lăsate fără ghilimele:

use strict;
use warnings;

my %h = ( name => 'Foo' );

print $h{name}, "\n";

În ambele cazuri, în codul de mai sus, "name" este un cuvânt fără ghilimele adică bareword, dar acestea sunt permise chiar dacă este utilizat use strict.

Otras páginas

Tutorial Perl

Author

Gabor Szabo (szabgab) Gabor Szabo