perl에서...

illuza의 이미지

Programming perl 책을 보다가 아래 코드가 이해가 되지 않습니다.

if (("fred" & "\1\2\3\4") =~ [^\0] ) { ... }

\1, \2 같이 역슬래쉬 뒤에 붙는 숫자가 잘 이해가 안되고 정규식도 어떤 의미인지 모르겠습니다.

설명에 보면 어떠한 바이트라도 0이 아닌 것을 확인하는 코드라는데 어떻게해서 그렇게 되는지 모르겠습니다.

ai의 이미지

illuza wrote:
Programming perl 책을 보다가 아래 코드가 이해가 되지 않습니다.

if (("fred" & "\1\2\3\4") =~ [^\0] ) { ... }

\1, \2 같이 역슬래쉬 뒤에 붙는 숫자가 잘 이해가 안되고 정규식도 어떤 의미인지 모르겠습니다.

설명에 보면 어떠한 바이트라도 0이 아닌 것을 확인하는 코드라는데 어떻게해서 그렇게 되는지 모르겠습니다.


이 예제가 있는 페이지를 읽어보시면 이런 설명이 있습니다.
Quote:
These operators(bitwise operators) work differently on numeric values than they do on strings. (This is one of the few places where Perl cares about the difference.) ... Note that all bit strings are true (unless they result in the string "0").

이런 이유로 비트연산을 거친 스트링에 \x00 이 들어있는지 확인하려면 byte 별로 확인해 주어야 한다는 이야기입니다. 그리고 이 예제에서 사용된 \1, \2 는 8진수 표기로 사용되었습니다. 이를테면 "\1", "\x01", "\001", chr(1) 모두 같은 표현입니다. (보통은 \1, \2 가 정규표현식 내에서의 back reference 를 의미하지만 여기에서는 문맥에 맞지 않습니다.) 그래서 책의 내용대로 :
if ( "fred" & "\1\2\3\4" ) { ... }
이렇게 해서는 그 결과가 문자열 "0" 이 아닌 이상에는 언제나 참이 될것이므로 의미가 없고,
if ( ("fred" & "\1\2\3\4") =~ /[^\0]/ ) { ... }
이렇게 써야만 비트연산 결과에 대해 각 byte 에서 \x00 이 발견되는지 확인하게 된다는 것입니다.

War doesnt determine whos right, just whos left.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.