2012-10-16 4 views
4

정규식을 사용하여 문자열을 16 진수로 변환합니다. 그러나 이렇게하면 perl 평론가 또는 perl에서 경고 메시지가 나타납니다 :Perl Regex 초기화되지 않은 값의 16 진수 경고로 문자열을 변환하거나/x를 사용하려면/x

Perl 평론가로부터 경고 또는 피드백을받지 못한 위의 코드를 작성하는 방법이 있습니까?

ord는 정의되지 않은 값을 처리하기 때문에 문제가 있다고 생각합니다./x를 넣으면 $ 1의 값이 유효하지 않다고 생각합니다.

+0

사용자의 목적에 맞게 내장 된 16 진수 호출이 있습니다. – TLP

답변

8

이 평론은 거짓 긍정이라고합니다. 여기 /x에 대한 필요성이나 이유는 없습니다. 모든 평론가를 침묵 시키려고하면, 이상한 코드로 끝날 것입니다. 즉, 평론가가 추천하고 있다고 말했다.

s/(.)/sprintf("%x",ord($1))/exg 

또한 개조를 피하는 것이 타당하지 않을 수도있다. 그렇다면 /s도 사용하고 싶습니다.

s/(.)/sprintf("%x",ord($1))/sexg 
+0

그래, 내가 왜 모든 것을 m {...} x ...로 감쌌는지 모르겠다. 그것은 그 의미를 완전히 바꿨다. –

+0

/x가 여기에서하는 일에 대해 더 많이 읽을 수있는 곳을 알려줄 수 있습니까? (/ 매개 변수는 무엇입니까?) [link] http://search.cpan.org/dist/Perl-Critic/lib/Perl/Critic/Policy/RegularExpressions/RequireExtendedFormatting.pm은 왜 m {} x를 넣었습니다. 어쨌든/x를 두는 것은 perl 비평가 오류를 없애고 오류없이 실행합니다 (그래서 나는 이것이 거짓 긍정이라고 생각하지 않습니다)! – Bostwick

+1

'/ x'는 공백과 주석을 패턴에 포함시킵니다. [perlre] (http://perldoc.perl.org/perlre.html)를 참조하십시오. 비평가는 당신의 정규 표현식을 홍보 할 수 있도록 노력하고 있습니다. 이 예제는'/ x'를'm //'에 추가하는 방법을 보여주고 있지만, 당신은'm //'을 사용하고 있지 않습니다. 당신은'm //'로 전환하지 않고'/ x'를 추가한다고 가정합니다. – ikegami