http://www.perlmonks.org?node_id=1106250

WoodyWeaver has asked for the wisdom of the Perl Monks concerning the following question:

using Data::Dump qw(dump) a field inside of a dumped variable reads

"\n\3\36\25"

I think this is four characters, and the \36 for example refers to the ascii character chr(30)? (This is supposed to be an octet stream corresponding to an IP address of 10.3.30.21.)

I don't understand the \36 notation. Can someone provide a clue?

Replies are listed 'Best First'.
Re: syntax of Data::Dump
by Loops (Curate) on Nov 05, 2014 at 20:54 UTC
    Yes, it's 4 binary bytes in octal notation. Can read it as 8 * first digit + second digit. the leading \n is a newline character, which is ASCII 10 (octal 12).
    use Data::Dump qw(dump); print dump( pack("c*", 10, 3, 30, 21 ) ); # outputs: "\n\3\36\25"

    Okay, that "\n" isn't octal notation obviously, it's the Perl string escape code.

      Thank you, but I'm still missing a clue. The reason I remain confused is perlop:
      The following escape sequences are available in constructs that interpolate, and in transliterations:
      
          Sequence Note Description
          \t tab (HT, TAB)
          \n newline (NL)
          \r return (CR)
          \f form feed (FF)
          \b backspace (BS)
          \a alarm (bell) (BEL)
          \e escape (ESC)
          \x{263A} 1,8 hex char (example: SMILEY)
          \x1b 2,8 restricted range hex char (example: ESC)
          \N{name} 3 named Unicode character or character sequence
          \N{U+263D} 4,8 Unicode character (example: FIRST QUARTER MOON)
          \c[ 5 control char (example: chr(27))
          \o{23072} 6,8 octal char (example: SMILEY)
          \033 7,8 restricted range octal char (example: ESC)
      
      Should this not be "\n\003\036\025"?

        Well footnote 7 does say:

        Some contexts allow 2 or even 1 digit, but any usage without exactly three digits, the first being a zero, may give unintended results. (For example, in a regular expression it may be confused with a backreference; see "Octal escapes" in perlrebackslash.)

        So it would be much more clear with the 3 digit representation. But in this particular context, it works out:

        use feature 'say'; use Data::Dump qw(dump); say dump( pack("c*", 10, 3, 30, 21 ) ); # outputs "\n\3\36\25" say dump( unpack("c*", "\n\3\36\25") ); # outputs (10, 3, 30, 21) say dump( unpack("c*", "\n\003\036\025") ); # outputs (10, 3, 30, 21)
Re: syntax of Data::Dump (perlquote oct octal escape perlrebackslash)
by Anonymous Monk on Nov 06, 2014 at 01:36 UTC