Latest web development tutorials

riferimenti Perl

Riferimento è un puntatore, il riferimento Perl è un tipo scalare può puntare a variabili, matrici, tabelle hash (chiamato anche array associativi) o subroutine può essere utilizzato ovunque nel programma.


creare riferimenti

variabili definite, il nome della variabile preceduto da un \, otteniamo un riferimento alla variabile, come ad esempio:

$scalarref = \$foo;     # 标量变量引用
$arrayref  = \@ARGV;    # 列表的引用
$hashref   = \%ENV;     # 哈希的引用
$coderef   = \&handler; # 子过程引用
$globref   = \*foo;     # GLOB句柄引用

Nella matrice, possiamo utilizzare un riferimento array anonimo, usare Definizione []:

$aref= [ 1,"foo",undef,13 ];

elementi di un array anonimi possono essere ancora array anonimo, in modo che possiamo utilizzare questo metodo per costruire un array di array, l'array può essere costruito di qualsiasi dimensione.

my $aref = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
]

Possiamo usare un hash riferimenti hash anonimi, utilizzare {} definizione:

$href= { APR =>4, AUG =>8 };

Non possiamo creare un nome di subroutine di riferimento subroutine anonima:

$coderef = sub { print "w3big!\n" };

dereference

Annulla applicazione può essere utilizzato a seconda del tipo di $, @ o%, di annullare, esempi sono i seguenti:

#!/usr/bin/perl

$var = 10;

# $r 引用 $var 标量
$r = \$var;

# 输出本地存储的 $r 的变量值
print "$var 为 : ", $$r, "\n";

@var = (1, 2, 3);
# $r 引用  @var 数组
$r = \@var;
# 输出本地存储的 $r 的变量值
print "@var 为: ",  @$r, "\n";

%var = ('key1' => 10, 'key2' => 20);
# $r 引用  %var 数组
$r = \%var;
# 输出本地存储的 $r 的变量值
print "%var 为 : ", %$r, "\n";

Esecuzione del precedente esempio il risultato è:

10 为 : 10
1 2 3 为: 123
%var 为 : key110key220

Se non è possibile determinare il tipo di variabile, è possibile utilizzarel'arbitro per determinare il valore di ritorno riportato di seguito, il seguente valore viene restituito se non vi è alcuna falsa:

SCALAR
ARRAY
HASH
CODE
GLOB
REF

Esempi sono i seguenti:

#!/usr/bin/perl

$var = 10;
$r = \$var;
print "r 的引用类型 : ", ref($r), "\n";

@var = (1, 2, 3);
$r = \@var;
print "r 的引用类型 : ", ref($r), "\n";

%var = ('key1' => 10, 'key2' => 20);
$r = \%var;
print "r 的引用类型 : ", ref($r), "\n";

Esecuzione del precedente esempio il risultato è:

r 的引用类型 : SCALAR
r 的引用类型 : ARRAY
r 的引用类型 : HASH

riferimenti circolari

riferimenti circolari citate in due emergere mutuamente inclusiva. È necessario essere attenti a usare, altrimenti si porterà a perdite di memoria, i seguenti esempi:

#!/usr/bin/perl

my $foo = 100;
$foo = \$foo;

print "Value of foo is : ", $$foo, "\n";

Esecuzione del precedente esempio il risultato è:

Value of foo is : REF(0x9aae38)

Funzioni di riferimento

Funzione di formattazione Riferimento: \ &

Riferimento formato chiamata di funzione: & nome di riferimento + creato.

Esempi sono i seguenti:

#!/usr/bin/perl

# 函数定义
sub PrintHash{
   my (%hash) = @_;
   
   foreach $item (%hash){
      print "元素 : $item\n";
   }
}
%hash = ('name' => 'w3big', 'age' => 3);

# 创建函数的引用
$cref = \&PrintHash;

# 使用引用调用函数
&$cref(%hash);

Esecuzione del precedente esempio il risultato è:

元素 : age
元素 : 3
元素 : name
元素 : w3big