エスケープを含む文字列に一致する正規表現(PCRE)

Perlのプログラムの中の文字列定義を数えるための正規表現
多分動くはず・・・
というか、qq ah\agea もOKとかびっくりだよ。
もう少しスマートにならないもんか。

# テスト。文字列は9個ある
my $string = <<'_X_';
print('hoge :' . "$hoge");
print('aaa => \'aaa\'');
print("aaa => 'aaa'");
$hash->{"hoge"}->{q{huga}}->{qq{$moge}};
print qq/"hage"/;
print qq ah\agea;
_X_

# マッチした文字列を確認
print "$1\n" while($string =~ 
	/(
			"(?:\\\\|\\.|.)*?" |
			'(?:\\\\|\\.|.)*?' |
			q{1,2}\s*\{(?:(?R)|(?:\\\\|\\.|.))*?\} |
			q{1,2}\s*\[(?:(?R)|(?:\\\\|\\.|.))*?\] |
			q{1,2}\s*\((?:(?R)|(?:\\\\|\\.|.))*?\) |
			q{1,2}\s*(\W)(?:(?R)|(?:\\\\|\\.|.))*?\2 |
			q{1,2}\s+(\w)(?:(?R)|(?:\\\\|\\.|.))*?\3
	)/sxg);

'hoge :'
"$hoge"
'aaa => \'aaa\''
"aaa => 'aaa'"
"hoge"
q{huga}
qq{$moge}
qq/"hage"/
qq ah\agea