em branco (newline, tab, etc) Em cada caso, o programa deve mostrar toda linha, mas somente as especificas devem ser numeradas. Tente usar a variavel $_ para evitar o uso do operador de comparacao =~. Substituicao e traducao Uma vez identificadas as expressoes regulares, Perl permite fazer substituicoes baseadas naquelas comparacoes. O modo de fazer isso e usando a funcao s que e parecida com o modo de substituicao usado pelo editor de texto vi do Unix. Mais uma vez o operador de comparacao e usado, e mais uma vez se ele for omitido entao a substituicao utilizara a variavel $_ em seu lugar. Para substituir uma ocorrencia de londres por Londres na $sentenca devemos usar a expressao: $sentenca =~ s/londres/Londres/ e para fazer o mesmo com a variavel $_ use: s/londres/Londres/ Note que as duas expressoes regulares estao usando um total de tres barras. O resultado desta expressao e o numero de substituicoes feitas, de modo que pode ser tanto zero (falso) como um (verdadeiro), no caso acima. Opcoes Recordando modelos Traducao Exercicios Opcoes Este exemplo somente substitui a primeira ocorrencia da string, mas pode ser que tenha mais do que uma string que desejamos substituir. Para fazer uma substituicao global, a ultima barra deve ser seguida por um g: s/londres/Londres/g que obviamente utiliza a variavel $_. Novamente a expressao retorna o numero de substituicoes realizadas, que e zero ou alguma coisa maior que zero (verdadeiro). Se desejarmos tambem substituir ocorrencias de lOndres, lonDRES, LoNDrES e assim por diante, entao podemos usar: s/[Ll][Oo][Nn][Dd][Rr][Ee][Ss]/Londres/g mas um modo mais facil e usar a opcao i (para ignorar letras maiusculas ou minusculas). A expressao: s/londres/Londres/gi fara uma substituicao global nao importando se foi usado letras maiusculas ou minusculas. A opcao i tambem pode ser usada em expressoes regulares basicas. Recordando modelos E frequentemente util recordar modelos que tem sido comparados de modo que eles possam ser usados novamente. Isto ocorre porque qualquer coisa comparada entre parenteses retorna nas variaveis $1,...,$9. Estas strings tambem podem ser usadas da mesma forma que nas expressoes regulares (ou substituicoes) utilizando os codigos especiais ER \1,...,\9. Esse teste: $_ = "Lorde Whopper de Fibbing";s/([A-Z])/:\1:/g;print "$_\n"; colocara cada letra maiuscula entre : (dois pontos). Neste exemplo, mostrara :L:orde :W:hopper de :F:ibbing. As variaveis $1,...,$9 sao somente de leitura, voce nao pode altera-las. Como outro exemplo, o teste: if (/(\b.+\b) \1/){print "Encontrou $1 repetida\n";} ira identificar qualquer palavra repetida. Cada \b representa uma palavra limitada e .+ compara qualquer string nao vazia, entao \b.+\b compara qualquer coisa entre duas palavras limitadas. O resultado e entao armazenado como \1 para expressoes regulares e como $1 para o resto do programa. Se $_ for igual a "teste teste teste2 teste2", a mensagem sera mostrada, mas somente com a primeira ocorrencia. O seguinte exemplo troca o primeiro e ultimo caracteres da linha na variavel $_: s/^(.)(.*)(.)$/\3\2\1/ O ^ e o $ comparam o inicio e o fim da linha. O codigo \1 armazena o primeiro caractere, o \2 armazena cada string entre os dois e o ultimo caractere e armazenado no codigo \3. Entao