Pregunta

Why this perl code is giving output "True"?

$bar = "\\";
if ($bar =~ /[A-z]/){
  print "True";
} else {
  print "False";
}

Shouldn't it return false?

¿Fue útil?

Solución

Because \ is between A-z. See table below, 92 is between 65 and 122. Try [A-Z].

   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

Use the following command to see ASCII chart:

man ascii

Otros consejos

$bar =~ /[A-z]/;

is not same as

$bar =~ /[A-Z]/;

Check all chars between A and z:

perl -le 'print map chr, ord("A") .. ord("z")'

ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

Becauase you've written [A-z]:

See: http://perldoc.perl.org/perlrecharclass.html

[a-z]       #  Matches a character that is a lower case ASCII letter.

Try [A-Z] for uppercase, or [a-zA-Z] for both upper and lower case

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top