Perl引用是一个标量数据类型,该数据类型保存另一个值的位置,该值可以是标量,数组或哈希。
创建引用
变量,子程序或值创建引用很容易,方法是在其前面加上反斜杠,如下所示:
$scalarref =\$foo; $arrayref =\@ARGV; $hashref =\%ENV; $coderef =\&handler; $globref =\*foo;
您不能使用反斜杠运算符在I/O句柄上创建引用,但可以使用方括号创建对匿名数组的引用,如下所示-
$arrayref=[1, 2, [a, b, c]];
您可以使用大括号以类似方式创建对匿名哈希的引用,如下所示:
$hashref={ Adam => Eve, Clyde => Bonnie, };
可以通过使用不带子名的sub来创建对匿名子程序的引用,如下所示-
$coderef=sub { print "Boink!\n" };
取消引用
要取消引用的引用,只需使用$,@或%作为引用变量的前缀,具体取决于引用是指向标量,数组还是哈希。 示例-
#!/usr/bin/perl $var=10; # Now $r has reference to $var scalar. $r =\$var; # Print value available at the location stored in $r. print "Value of $var is : ", $$r, "\n"; @var=(1, 2, 3); # Now $r has reference to @var array. $r =\@var; # Print values available at the location stored in $r. print "Value of @var is : ", @$r, "\n"; %var=(key1 => 10, key2 => 20); # Now $r has reference to %var hash. $r =\%var; # Print values available at the location stored in $r. print "Value of %var is : ", %$r, "\n";
当执行上述程序时,将产生以下输出-
Value of 10 is : 10 Value of 1 2 3 is : 123 Value of %var is : key220key110
如果不确定变量类型,则可以使用 ref 轻松了解其类型,如果其参数是引用,则返回以下字符串之一。否则,它返回false-
SCALAR
ARRAY
HASH
CODE
GLOB
REF
让我们尝试以下示例-
#!/usr/bin/perl $var=10; $r =\$var; print "Reference type in r : ", ref($r), "\n"; @var=(1, 2, 3); $r =\@var; print "Reference type in r : ", ref($r), "\n"; %var=(key1 => 10, key2 => 20); $r =\%var; print "Reference type in r : ", ref($r), "\n";
当执行上述程序时,将产生以下输出-
Reference type in r : SCALAR Reference type in r : ARRAY Reference type in r : HASH
循环引用
当两个引用包含彼此的引用时,将发生循环引用。创建引用时必须要小心,否则循环引用可能会导致内存泄漏。以下是一个示例-
#!/usr/bin/perl my $foo=100; $foo =\$foo; print "Value of foo is : ", $$foo, "\n";
当执行上述程序时,将产生以下输出-
Value of foo is : REF(0x9aae38)
引用函数
如果您需要创建一个信号处理程序,则可能会发生这种情况,因此您可以通过在函数名称前添加\&来生成对该函数的引用, 以下是一个示例-
#!/usr/bin/perl # Function definition sub PrintHash { my (%hash)=@_; foreach $item (%hash) { print "Item : $item\n"; } } %hash=(name => Tom, age => 19); # Create a reference to above function. $cref =\&PrintHash; # Function call using reference. &$cref(%hash);
当执行上述程序时,将产生以下输出-
Item : name Item : Tom Item : age Item : 19
Perl - References(引用) - 无涯教程网无涯教程网提供Perl引用是一个标量数据类型,该数据类型保存另一个值的位置,该值可以是标量,数组或...https://www.learnfk.com/perl/perl-references.html