[Pdx-pm] bit wise comparison

Michael R. Wolf MichaelRWolf at att.net
Thu Feb 11 18:39:59 PST 2010


On Feb 11, 2010, at 1:46 PM, Steve Cayford wrote:

> print scalar(
>    ("ACCTCCTCCTCGAGTATGTG" ^ "TATCTTGCGCCGGAGATAAT") =~ tr/\x0/\x0/
>  ), "\n";
>
> The tr/\x0/\x0/ is transliterating bytes that have zeroed out bits,  
> not ASCII zeros.

perldoc perlop says:
     It returns the number of characters replaced or deleted.

Since it's replacing something with itself, it's effectively counting  
those somethings (namely the NUL byte).

As to \x0...

Said another way, the original poster thought this code referred to  
'0', which *does* have a numeric value when passed through ord().  As  
Steve said ord('0') != 0.  Notice that the NUL character (numeric  
value 0) is not printable, but the zero character is...

perl -e 'printf "char: %s, decimal: %d, octal: 0%o, hex: 0x%x, binary:  
0b%b\n", chr($_), ($_)x4 foreach (0, map {ord} "0" .. "9")'
char: , decimal: 0, octal: 00, hex: 0x0, binary: 0b0
char: 0, decimal: 48, octal: 060, hex: 0x30, binary: 0b110000
char: 1, decimal: 49, octal: 061, hex: 0x31, binary: 0b110001
char: 2, decimal: 50, octal: 062, hex: 0x32, binary: 0b110010
char: 3, decimal: 51, octal: 063, hex: 0x33, binary: 0b110011
char: 4, decimal: 52, octal: 064, hex: 0x34, binary: 0b110100
char: 5, decimal: 53, octal: 065, hex: 0x35, binary: 0b110101
char: 6, decimal: 54, octal: 066, hex: 0x36, binary: 0b110110
char: 7, decimal: 55, octal: 067, hex: 0x37, binary: 0b110111
char: 8, decimal: 56, octal: 070, hex: 0x38, binary: 0b111000
char: 9, decimal: 57, octal: 071, hex: 0x39, binary: 0b111001


see also: ascii(7) on some unix-ish systems, copied below for  
incomplete systems (*nix and W32) -- best viewed at constant width  
font...;

      The octal set:

      000 nul  001 soh  002 stx  003 etx  004 eot  005 enq  006 ack   
007 bel
      010 bs   011 ht   012 nl   013 vt   014 np   015 cr   016 so    
017 si
      020 dle  021 dc1  022 dc2  023 dc3  024 dc4  025 nak  026 syn   
027 etb
      030 can  031 em   032 sub  033 esc  034 fs   035 gs   036 rs    
037 us
      040 sp   041  !   042  "   043  #   044  $   045  %   046  &    
047  '
      050  (   051  )   052  *   053  +   054  ,   055  -   056  .    
057  /
      060  0   061  1   062  2   063  3   064  4   065  5   066  6    
067  7
      070  8   071  9   072  :   073  ;   074  <   075  =   076  >    
077  ?
      100  @   101  A   102  B   103  C   104  D   105  E   106  F    
107  G
      110  H   111  I   112  J   113  K   114  L   115  M   116  N    
117  O
      120  P   121  Q   122  R   123  S   124  T   125  U   126  V    
127  W
      130  X   131  Y   132  Z   133  [   134  \   135  ]   136  ^    
137  _
      140  `   141  a   142  b   143  c   144  d   145  e   146  f    
147  g
      150  h   151  i   152  j   153  k   154  l   155  m   156  n    
157  o
      160  p   161  q   162  r   163  s   164  t   165  u   166  v    
167  w
      170  x   171  y   172  z   173  {   174  |   175  }   176  ~    
177 del

      The hexadecimal set:

      00 nul   01 soh   02 stx   03 etx   04 eot   05 enq   06 ack    
07 bel
      08 bs    09 ht    0a nl    0b vt    0c np    0d cr    0e so     
0f si
      10 dle   11 dc1   12 dc2   13 dc3   14 dc4   15 nak   16 syn    
17 etb
      18 can   19 em    1a sub   1b esc   1c fs    1d gs    1e rs     
1f us
      20 sp    21  !    22  "    23  #    24  $    25  %    26  &     
27  '
      28  (    29  )    2a  *    2b  +    2c  ,    2d  -    2e  .     
2f  /
      30  0    31  1    32  2    33  3    34  4    35  5    36  6     
37  7
      38  8    39  9    3a  :    3b  ;    3c  <    3d  =    3e  >     
3f  ?
      40  @    41  A    42  B    43  C    44  D    45  E    46  F     
47  G
      48  H    49  I    4a  J    4b  K    4c  L    4d  M    4e  N     
4f  O
      50  P    51  Q    52  R    53  S    54  T    55  U    56  V     
57  W
      58  X    59  Y    5a  Z    5b  [    5c  \    5d  ]    5e  ^     
5f  _
      60  `    61  a    62  b    63  c    64  d    65  e    66  f     
67  g
      68  h    69  i    6a  j    6b  k    6c  l    6d  m    6e  n     
6f  o
      70  p    71  q    72  r    73  s    74  t    75  u    76  v     
77  w
      78  x    79  y    7a  z    7b  {    7c  |    7d  }    7e  ~     
7f del

      The decimal set:

        0 nul    1 soh    2 stx    3 etx    4 eot    5 enq    6 ack     
7 bel
        8 bs     9 ht    10 nl    11 vt    12 np    13 cr    14 so     
15 si
       16 dle   17 dc1   18 dc2   19 dc3   20 dc4   21 nak   22 syn    
23 etb
       24 can   25 em    26 sub   27 esc   28 fs    29 gs    30 rs     
31 us
       32 sp    33  !    34  "    35  #    36  $    37  %    38  &     
39  '
       40  (    41  )    42  *    43  +    44  ,    45  -    46  .     
47  /
       48  0    49  1    50  2    51  3    52  4    53  5    54  6     
55  7
       56  8    57  9    58  :    59  ;    60  <    61  =    62  >     
63  ?
       64  @    65  A    66  B    67  C    68  D    69  E    70  F     
71  G
       72  H    73  I    74  J    75  K    76  L    77  M    78  N     
79  O
       80  P    81  Q    82  R    83  S    84  T    85  U    86  V     
87  W
       88  X    89  Y    90  Z    91  [    92  \    93  ]    94  ^     
95  _
       96  `    97  a    98  b    99  c   100  d   101  e   102  f    
103  g
      104  h   105  i   106  j   107  k   108  l   109  m   110  n    
111  o
      112  p   113  q   114  r   115  s   116  t   117  u   118  v    
119  w
      120  x   121  y   122  z   123  {   124  |   125  }   126  ~    
127 del


-- 
Michael R. Wolf
     All mammals learn by playing!
         MichaelRWolf at att.net






More information about the Pdx-pm-list mailing list