펄 인용문


참조는 포인터입니다. Perl 참조는 변수, 배열, 해시 테이블(연관 배열이라고도 함) 및 서브루틴까지 가리킬 수 있는 스칼라 유형이며 프로그램의 어느 곳에나 적용할 수 있습니다.



참조 만들기

변수를 정의할 때 변수 이름 앞에 를 추가하면 다음과 같이 변수에 대한 참조를 얻을 수 있습니다. :

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

배열에서 [] 정의를 사용하여 익명 배열 참조를 사용할 수 있습니다.

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

익명 배열의 요소는 여전히 익명 배열일 수 있으므로 이 방법을 사용하여 구성할 수 있습니다. 배열의 배열, 임의의 차원의 배열을 구성할 수 있습니다.

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

해시에서는 {} 정의를 사용하여 익명 해시 참조를 사용할 수 있습니다:

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

또한 서브루틴 이름 없이 익명 서브루틴 참조를 생성할 수도 있습니다:

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

역참조

취소 신청은 유형에 따라 $, @, %를 사용하여 취소할 수 있습니다. 예시는 다음과 같습니다.

#!/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";

위 예시를 실행한 결과는

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

변수 유형이 확실하지 않은 경우 ref를 사용하여 판단할 수 있습니다. 반환 값 목록은 다음과 같습니다. 다음 값이 없으면 false가 반환됩니다.

SCALAR
ARRAY
HASH
CODE
GLOB
REF

예제는 다음과 같습니다.

#!/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";

위 예의 실행 결과는 다음과 같습니다.

r 的引用类型 : SCALAR
r 的引用类型 : ARRAY
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

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

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

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

위 예시를 실행한 결과는

元素 : age
元素 : 3
元素 : name
元素 : php
입니다.