perl | Alcance de las variables

El alcance de una variable es la parte del programa donde se puede acceder a la variable. Un ámbito también se denomina como la visibilidad de las variables en un programa. En Perl, podemos declarar variables globales o variables privadas . Las variables privadas también se conocen como variables léxicas .

Alcance de las variables globales

Las variables globales se pueden usar dentro de cualquier función o cualquier bloque creado dentro del programa. Es visible en todo el programa. Las variables globales se pueden usar directamente y son accesibles desde cualquier parte del programa.

Ejemplo 1: La variable $nombre se declara al principio del código. Será visible hasta el final del archivo en todas partes. Incluso dentro de los bloques. Incluso si están en las declaraciones de funciones. Si cambiamos la variable dentro del bloque, eso cambiará el valor del resto del código. Incluso fuera del bloque.

# Perl program to illustrate the 
# Scope of Global variables
  
# declaration of global variable 
$name = "GFG";
  
# printing global variable 
print "$name\n";    
  
# global variable can be used 
# inside a block, hence the we 
# are taking a block in which
# we will print the value of 
# $name i.e. global variable
{
  
    # here GFG will print
    print "$name\n"; 
      
    # values in global variable can be
    # changed even within a block, 
    # hence the value of $name is 
    # now changed to "GeeksforGeeks"
    $name = "GeeksforGeeks"; 
      
    # print function prints
    # "GeeksforGeeks"
    print "$name\n"; 
}
  
# changes made inside the above block'
# are reflected in the whole program 
# so here GeeksforGeeks will print
print "$name\n"; 
Producción:

GFG
GFG
GeeksforGeeks
GeeksforGeeks

Ejemplo 2:

# Perl program to illustrate the 
# Scope of Global variables
  
# declaration of global variables
$name = "GFG"; 
$count = 1;
  
# printing global variables
print $count." ".$name."\n";
$count++;
  
# Block starting
{
      
    # global variable can be used inside
    # a block, so below statement will 
    # print GFG and 1
    print $count." ".$name."\n";
      
    # incrementing the value of 
    # count inside the block
    $count++;
}
  
# taking a function
sub func {
      
    # Global variable, $count and $name,
    # are accessible within function
    print $count." ".$name."\n";
}
  
# calling the function
func();
Producción:

1 GFG
2 GFG
3 GFG

Alcance de las variables léxicas (variables privadas)

Las variables privadas en Perl se definen usando mi palabra clave antes de una variable. mi palabra clave confina las variables en una función o bloque en el que se declara. Un bloque puede ser un bucle for, un bucle while o un bloque de código con llaves alrededor. El alcance de la variable local es local, su existencia se encuentra entre esas dos llaves (bloque de código), fuera de ese bloque esta variable no existe. Estas variables también se conocen como variables léxicas.

Nota: Cuando se utilizan variables privadas dentro de una función o bloque, ocultan las variables globales creadas con el mismo nombre. Cuando llamamos a una subrutina con una variable privada, se puede usar dentro de esa función. Tan pronto como la subrutina sale, las variables privadas ya no se pueden usar.

Ejemplo:

# Perl program to illustrate the 
# scope of private variables
  
# declaration of global variable 
$name = "Global"; 
$count = 1;
  
# printing global variables
print $count." ".$name."\n";
  
# incrementing the value of count
# i.e it become 2
$count++;
  
# block starting
{
      
    # declaring private variable by using my 
    # keyword which can only be used
    # within this block
    my $new_name = "Private"; 
      
    # global variables are 
    # accessible inside block
    print $count." ".$name."\n";
      
    # incrementing the value
    # of global variable
    # here it become 3
    $count++;
      
    print $name." and ".$new_name."\n";
}
  
# $new_name variable cannot 
# be used outside, hence nothing 
# is going to print 
print "Variable defined in above block: ".$new_name."\n"; 
  
# declaring function
sub func {
  
    # this private variable declaration
    # hides the global variable which define
    # in the beginning of program
    my $name = "Hide"; 
    print $count." ".$name."\n";
  
}
  
# calling the function
func();
Producción:

1 Global
2 Global
Global and Private
Variable defined in above block: 
3 Hide

Variables del paquete

En Perl, tenemos un tipo más de alcance llamado Package Scoping. Esto se usa cuando necesitamos crear variables que se puedan usar exclusivamente en diferentes espacios de nombres”. main ” es el espacio de nombres predeterminado en todos los programas de Perl. Los espacios de nombres en Perl se definen mediante la palabra clave del paquete .

Ejemplo:

# Perl program to illustrate 
# the Package Variables
  
# variable declared in 
# main namespace
$var1 = "Main Namespace";
  
print "Value of Var1: ".$var1."\n";
   
# package declaration
# Pack1 is the package 
package Pack1;
   
    # since $var1 belongs to main namespace, 
    # so nothing will print inside Pack1
    # namespace
    print "Value of var1: ".$var1."\n"; 
       
    # variable declared in Pack1 namespace
    # having same name as main namespace
    $var1 = "Pack1 Namespace";
      
    # here $var1 belongs to Pack1 namespace
    print "Value of var1: ".$var1."\n";
       
    # in-order to print variables 
    # from both namespace, use 
    # following method
    print "Value of var1: ".$main::var1."\n";
    print "Value of var1: ".$Pack1::var1."\n";
Producción:

Value of Var1: Main Namespace
Value of var1: 
Value of var1: Pack1 Namespace
Value of var1: Main Namespace
Value of var1: Pack1 Namespace

Nuestra palabra clave en Perl: «nuestra» palabra clave solo crea un alias para una variable de paquete existente con el mismo nombre. nuestra palabra clave permite usar una variable de paquete sin calificarla con el nombre del paquete, pero solo dentro del alcance léxico de la declaración » nuestro «. Una variable declarada con nuestra palabra clave declara un alias para una variable de paquete que será visible en todo su alcance léxico, incluso más allá de los límites del paquete .

# Perl program to illustrate the use 
# of our keyword
  
# Pack1 namespace declared
# by using the package keyword
package Pack1;
   
    # declaring $Pack1::first_name 
    # for rest of lexical scope
    our $first_name;    
    $first_name = "Shashank";
       
    # declaring $Pack1::second_name for
    # only this namespace
    $second_name;    
    $second_name = "Sharma";
   
# Pack2 namespace declared
package Pack2;
   
    # prints value of $first_name, as it 
    # refers to $Pack1::first_name
    print "first_name = ".$first_name."\n";
       
    # It will print nothing as $second_name
    # does not exist in Pack2 package scope
    print "second_name = ".$second_name."\n";  
Producción:

first_name = Shashank
second_name =

Publicación traducida automáticamente

Artículo escrito por Shashank_Sharma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *