O hífen tem apenas um significado especial quando não é o primeiro ou o último caractere em uma classe de caracteres entre colchetes.
[a-z]corresponde a todas as letras minúsculas ASCII de aa z. [-a-z]corresponde a todas as letras minúsculas ASCII de apara z e o hífen -.
Isso está documentado na documentação do Perl :
Dentro de uma lista, o caractere "-" especifica um intervalo de caracteres, para que az represente todos os caracteres entre "a" e "z", inclusive. Se você deseja que "-" ou "]" seja membro de uma classe, coloque-o no início da lista (possivelmente após um "^") ou escape com uma barra invertida. "-" também é considerado literalmente quando está no final da lista, pouco antes do fechamento "]".