Valoarea unei variabile scalare

85

Ce este valoarea unei variabile scalare?

            În esenţă, o valoare scalară este o cantitate de informaţie ce poate fi utilizată ca singură unitate de date. Aceasta unitate de date poate fi un număr sau o bucată de text.

            Există câteva tipuri de valori scalare pe care Perl le utilizează: întregi, reale şi şiruri.

Valori scalare întregi

            Cele mai obişnuite valori scalare utilizate în programele Perl sunt valorile scalare întregi, cunoscute şi sub numele de constante întregi sau întregi literali.

            O valoare scalară întreagă este formată dintr-una sau mai multe cifre zecimale ( precedate uneori de semn: + sau -) şi liniuţe de subliniere _ (underscores).

            Câteva exemplu sunt: 14, 10000000000, -27 şi 1_000_000.

            Valorile întregi scalare pot fi folosite în expresii sau pentru atribuirea lor unor variabile scalare, ca în exemplele:

$x = 12345;
if (1217 + 116 == 1333) {
     # bloc de intrucţiuni
}

Limitări ale valorilor scalare întregi

            În Perl, există o limită a mărimii întregilor ce pot fi incluşi într-un program. Programul următor (tst10.pl) permite descoperirea aceastor limitări şi cum operează Perl când le întâlneşte.

#!/usr/local/bin/perl
$answer="y";
while($answer eq "y"){
print("Your number is: ");
$valInteger=<STDIN>;
print("You taped: ",$valInteger,"\n");
$valInteger=$valInteger+0;
print("Your number + 0 = ",$valInteger,"\n"); 
print ("Again?[y/n] ", "\n");
$answer=<STDIN>;
chop($answer);
}
$value = 1234567890;
print ("first value is ", $value, "\n");
$value = 1234567890123456;
print ("second value is ", $value, "\n");
$value = 12345678901234567890;
print ("third value is ", $value, "\n");

            Pe consola text în urma execuţiei acestui program obţinem.

Your number is: 1234567890123456
You taped: 1234567890123456
Your number + 0 = 1.23456789012346e+15
Again?[y/n] y
Your number is: 12345678901234567
You taped: 12345678901234567
Your number + 0 = 1.23456789012346e+16
Again?[y/n] y
Your number is: 123456789012345678
You taped: 123456789012345678
Your number + 0 = 1.23456789012346e+17
Again?[y/n] n
first value is 1234567890
second value is
1.23456789012346e+15
third value is 1.23456789012346e+19

            Pentru a înţelege acest rezultat să precizăm câteva lucruri. Mai întâi orice valoare scalară este tratată ca un şir indiferent dacă conţine numai cifre, ca în exemplul nostru. Aşa se explică depăşirea celor 16 digiti (cifre zecimale) admişi de Perl pentru valorile întregi. Mai exact Perl stochează datele numerice în variabile reale în simplă precizie (4 octeţi) indiferent dacă numărul este întreg sau real. Atunci însă când se doreşte efectuarea unor calcule cu mai mult de 16 digiţi Perl nu mai poate răspunde corect. Pe scurt, Perl nu tratează distinct valorile întregi de valorile reale, cum se întâmplă în PASCAL, C, şi alte limbaje. Motivul este clar: simplificarea scrierii programelor.

© Cornel Mironel Niculae, 2003-2004

13-Nov-2009