고객 이름과 심볼 이름 충돌을 피하기 위해 C++ 헤더 전용 라이브러리의 네임 스페이스를 사용자 정의 네임 스페이스에 묶으려고합니다.perl-multiline 문제가있는 C++ 헤더의 이름 바꾸기
여기 제가 작성한 펄 스크립트입니다. def 네임 스페이스를 abc 네임 스페이스에 묶어야합니다. 잘하지만
namespace abc {
namespace def {}
}
namespace abc {
namespace def { abc }
}
namespace abc {
namespace def { { } }
}
namespace abc {
namespace def { { abcd } }
}
namespace def {
abc
}
namespace def { // some comment
do_something();
}
namespace def {
do_something();
while (still_not_crashed()) {
do_even_more();
}
}
한 라인 네임 스페이스 작업을 가능한 한 빨리 그러나 파일에 스크립트를 실행
이namespace def {}
namespace def { abc }
namespace def { { } }
namespace def { { abcd } }
namespace def {
abc
}
namespace def { // some comment
do_something();
}
namespace def {
do_something();
while (still_not_crashed()) {
do_even_more();
}
}
만 산출 :
#!/usr/bin/perl
while (<>) {
s/namespace\s+def\s*
(# group 1 - braced string with balanced number of lbraces and rbraces
\{
(# group 2 - String without braces or recursion to group 1
[^\{\}]* # some string that does not contain braces
| (?1) # recursion of group1
)*
\}
)
/namespace abc {\nnamespace def \1\n}/gcsx;
print;
}
여기 내가 사용하고있는 testfile 위입니다 일치해야하는 패턴은 내가 정규식에 -modifier를 추가하더라도 작업을 중단하는 개행을 포함합니다.
내가 뭘 잘못하고 있니?
그래서 C++ 질문이 펄 스크립트를 디버깅하는 방법입니다 ? –
나는 몇몇 cpp devs가 유사한 상황을 겪었다 고 생각하기 때문에 C++이라는 태그를 추가했다. 그것은 주로 perl 질문입니다. – Richard
줄 단위로 대체 작업을 수행하므로 여러 줄에서 작동하지 않습니다. – Toto