HTML tutorial
CSS3 tutorial
Bootstrap tutorial
JavaScript tutorial
JQuery tutorial
AngularJS tutorial
React tutorial
NodeJS tutorial
PHP tutorial
Python tutorial
Python3 tutorial
Django tutorial
Linux tutorial
Docker tutorial
Ruby tutorial
Java tutorial
C tutorial
C ++ tutorial
Perl tutorial
JSP tutorial
Lua tutorial
Scala tutorial
Go tutorial
ASP.NET tutorial
C # tutorial
Reference is a pointer, Perl reference is a scalar type can point to variables, arrays, hash tables (also called associative arrays) or subroutine can be used anywhere in the program.
Defined variables, the variable name preceded by a \, we get a reference to the variable, such as:
$scalarref = \$foo; # 标量变量引用 $arrayref = \@ARGV; # 列表的引用 $hashref = \%ENV; # 哈希的引用 $coderef = \&handler; # 子过程引用 $globref = \*foo; # GLOB句柄引用
In the array, we can use an anonymous array reference, use [] Definition:
$aref= [ 1,"foo",undef,13 ];
Anonymous array elements can still be anonymous array, so we can use this method to construct an array of arrays, the array may be constructed of any dimension.
my $aref = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ]
We can use a hash anonymous hash references, use {} definition:
$href= { APR =>4, AUG =>8 };
We can not create a subroutine name anonymous subroutine reference:
$coderef = sub { print "w3resource!\n" };
Cancel application can be used depending on the type of $, @ or%, to cancel, examples are as follows:
#!/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";
Implementation of the above example the result is:
10 为 : 10 1 2 3 为: 123 %var 为 : key110key220
If you can not determine the variable type, you can use theref to determine the return value listed below, the following value is returned if there is no false:
SCALAR ARRAY HASH CODE GLOB REF
Examples are as follows:
#!/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";
Implementation of the above example the result is:
r 的引用类型 : SCALAR r 的引用类型 : ARRAY r 的引用类型 : HASH
Circular references cited in two mutually inclusive emergence. You need to be careful to use, otherwise it will lead to memory leaks, the following examples:
#!/usr/bin/perl my $foo = 100; $foo = \$foo; print "Value of foo is : ", $$foo, "\n";
Implementation of the above example the result is:
Value of foo is : REF(0x9aae38)
Function Reference format: \ &
Reference function call format: & + reference name created.
Examples are as follows:
#!/usr/bin/perl # 函数定义 sub PrintHash{ my (%hash) = @_; foreach $item (%hash){ print "元素 : $item\n"; } } %hash = ('name' => 'w3resource', 'age' => 3); # 创建函数的引用 $cref = \&PrintHash; # 使用引用调用函数 &$cref(%hash);
Implementation of the above example the result is:
元素 : age 元素 : 3 元素 : name 元素 : w3resource