문자를 발견하고 ((.)), 그 문자열과 동일한 문자를 발견하고 (\1), 11이 따라오는 것을 (11) 생각대로 표기하면 아래와 같다.

$_ = "aa11bb";
if (/(.)\111/) {
    print "It matched!\n";
}

위의 코드는 제대로 동작하지 않았다. \1인지 \11인지 \111인지 판단할 수 없기 때문.

use 5.010;
$_ = "aa11bb";
if (/(.)\g{1}11/) {
    print "It matched!\n";
}

제대로 수행될려면 \1\G{1}로 바꿔야 하는 것이다. use 5.010은 구식 펄이 저 문법을 제공하지 않기 때문에 추가한 것.

상대적 역참조를 이용할 수 있다.

use 5.010;
$_ = "aa11bb";
if (/(.)\g{-1}11/) {
    print "It matched!\n";
}

상대적 역참조는 그룹()이 많아졌을 때도 동일하게 쓸 수 있는게 장점이다.

use 5.010;
$_ = "aa11bb";
if (/(.)(.)\g{-1}11/) {
    print "It matched!\n";
}

숫자가 아닌 LABEL도 지원한다.

my $names = 'Fred Flinstone and Wilma Flinstone';

if ( $names =~ m/(?<last_name>\w+) and \w+ \g{last_name}/ ) {
    say "I saw $+{last_name}";
}

LABEL이 없으면 $1부터 LABEL이 있으면 %+ 해쉬에 저장되어 있다.

정규식 뉴비로서 그룹과 상대적 역참조 그룹을 보고 신기해서 포스팅.