Índice:
- Coletando linhas exclusivas
- Descartar várias linhas em branco
- Imprimir linhas de um arquivo em ordem ordenada
- Imprimir um intervalo de linhas de um arquivo
- Listando apenas os arquivos em um diretório
- Listando um diretório por tamanho
- Classificando diretórios por extensão
- Criando uma calculadora simples
- Em Perl, gerar números aleatórios é fácil, mas aleatorizar a ordem de uma matriz não é tão simples. No entanto, você pode usar a função de emenda para puxar um elemento aleatório de uma matriz e, em seguida, coloque o elemento em outra matriz. O seguinte programa aleatoriza a lista @MyList:
- Tentar convencer os usuários de computadores a criar senhas que não são facilmente adivinhadas é um dos trabalhos mais desafiadores para um administrador de sistema. As pessoas sempre parecem insistir em usar suas datas de nascimento ou nomes de animais de estimação para senhas - violar a segurança e se tornar uma peça de criança.
Vídeo: Java version history 2024
Algumas pessoas acreditam que os programas curtos não são bons para muito, mas isso não acontece com o Perl. Apenas algumas linhas de código Perl podem percorrer um longo caminho. Este artigo lista alguns pequenos e pequenos programas Perl.
Coletando linhas exclusivas
Se seu arquivo de texto tiver muitas linhas duplicadas e você quiser apenas ver as linhas exclusivas, você pode coletá-las em uma matriz (neste caso, é chamado @Unique) com o seguinte programa:
abrir (IN, "somefile. Txt"); @ Unique = ();
enquanto () {a menos que ($ i {$ _} ++) {push (@Unique, $ _)}}
O truque aqui é que $ i {$ _} ++ retorna 0 na primeira vez você cria um par de valores-chave com $ _ como a chave, e um valor diferente de zero depois disso.
Descartar várias linhas em branco
Alguns arquivos de texto têm múltiplas linhas em branco consecutivas, o que dificulta a leitura, especialmente em telas pequenas. O programa a seguir imprime um arquivo de texto, compactando todas as instâncias de duas ou mais linhas em branco em uma única linha em branco.
Nota: Uma linha em branco pode ter caracteres de espaço em branco, como espaços e guias, mas sem caracteres exibíveis.
abrir (IN, "somefile. Txt"); $ PrevBlank = 0;
enquanto () {
se (/ S / ou! $ PrevBlank) {print $ _}
$ PrevBlank = / ^ s * $ /;
}
A instrução if no exemplo anterior é verdadeira se houver caracteres não negativos na linha ou se a linha anterior não estava em branco. A atribuição $ PrevBlank diz se a linha atual está em branco, o que significa que ela tem zero ou mais caracteres de espaço em branco e nada mais.
Imprimir linhas de um arquivo em ordem ordenada
É fácil esquecer o quão útil é a função de classificação do Perl. O seguinte programa lê o arquivo inteiro em uma matriz, classifica a matriz e imprime o resultado. Curto e doce, e muito eficiente para inicializar:
abrir (IN, "somefile. Txt");
impressão tipo ();
Imprimir um intervalo de linhas de um arquivo
Alguma vez você já quis ler apenas algumas linhas de um arquivo e não o todo? O programa a seguir imprime apenas uma variedade de linhas. Você executa o programa com dois argumentos: o intervalo que deseja e o nome do arquivo. Por exemplo, se você nomear seu programa "showline" e deseja ver as linhas 10 a 20 do somefile. arquivo txt, você usa esta linha de comando:
showline 10-20 somefile. txt
O programa a seguir imprime um intervalo de linhas:
abrir (IN, $ ARGV [1]) ou morrer "Não foi possível ler $ File. n ";
($ Start, $ Stop) = split (/ - /, $ ARGV [0]);
para ($ i = 1; $ i <= $ stop; $ i + = 1)
{$ Line =; se ($ i> = $ Start) {print $ Line}}
Listando apenas os arquivos em um diretório
Por vezes, você pode querer ignorar os subdiretórios em um diretório e apenas se concentrar nos arquivos.Você pode usar o seguinte teste de arquivo -f para listar todos os arquivos em um diretório:
foreach $ f () {if (-f $ f) {print "$ fn"}}
Listando um diretório por tamanho
Para classificar, uma listagem de diretórios por qualquer coisa que não seja seus nomes de arquivos, seu programa deve manter uma lista de registros consistindo nos nomes e outros itens na listagem. Hashes são ótimos para usar para esse tipo de lista que possui registros com uma chave (o nome do arquivo) e um valor (a outra informação do diretório). O programa a seguir cria um hash que lista o tamanho de cada arquivo no diretório e, em seguida, classifica os itens para saída. (Você pode modificar facilmente este programa para classificar por data em vez de por tamanho.)
foreach $ f () {$ i {$ f} = -s $ f};
foreach $ k (classifique {$ i {$ b} <= & gt $ i {$ a}} chaves% i)
{printf "% 8d% sn", $ i {$ k}, $ k }
Classificando diretórios por extensão
A classificação por uma parte de um nome de arquivo é um processo ligeiramente mais difícil do que a classificação pelo tamanho do arquivo ou pela data em que o arquivo foi modificado. O segundo programa quebra o nome do arquivo em dois e tipos pela segunda parte. Se você estiver executando Perl em um sistema UNIX ou Macintosh, este programa funciona previsivelmente somente se os nomes dos arquivos não tiverem um período ou um período:
foreach $ FullName () {
($ Name, $ Ext) = split (/. /, $ FullName, 2);
push (@Temp, "$ Extt $ FullName");
}
foreach $ Val (classificar (@Temp)) {
($ Ext, $ FullName) = dividir (/ t /, $ Val);
imprimir "$ FullNamen";
}
Criando uma calculadora simples
Já precisou de uma calculadora simples de usar para eliminar algumas matemáticas rápidas e sujas? O programa a seguir usa a função eval de Perl para imprimir as respostas para qualquer equação que você inserir. Para encerrar o programa, insira uma linha em branco. Aqui está esse programa para criar sua própria calculadora:
while () {
$ i = $ _; chomp ($ i); a menos que ($ i) {último}
$ o = eval ($ i); imprimir "Answer = $ on";
}
Quando você executa o programa, você pode inserir algo como o seguinte:
((2 ** 8) + (3 ** 8))
e você obtém esse resultado: > Answer = 6817
Randomizing a list
Em Perl, gerar números aleatórios é fácil, mas aleatorizar a ordem de uma matriz não é tão simples. No entanto, você pode usar a função de emenda para puxar um elemento aleatório de uma matriz e, em seguida, coloque o elemento em outra matriz. O seguinte programa aleatoriza a lista @MyList:
my @TempList = ();
enquanto (@MyList)
{push (@TempList, splice (@MyList, rand (@MyList), 1))}
@MyList = @TempList;
O truque aqui é que rand (@MyList) escolhe um número entre 0 eo número de elementos em @MyList, e o splice altera esse número aleatório para um número inteiro.
Gerando senhas mnemônicas aleatórias
Tentar convencer os usuários de computadores a criar senhas que não são facilmente adivinhadas é um dos trabalhos mais desafiadores para um administrador de sistema. As pessoas sempre parecem insistir em usar suas datas de nascimento ou nomes de animais de estimação para senhas - violar a segurança e se tornar uma peça de criança.
O programa a seguir gera senhas aleatórias. Em vez de uma mistura de cartas difíceis de lembrar, as senhas são um pouco mnemônicas porque aparecem em pares de consoantes e vogais que são pronunciáveis.Ao juntar umas poucas sílabas, você pode gerar frases sem sentido fáceis de lembrar.
Cada sílaba da senha pode representar qualquer um dos 100 números; portanto, uma única senha de quatro sílabas, como
votahubo, é uma das 100 milhas (100 para a quarta potência) possíveis senhas que o programa gera. Ter um administrador do sistema atribuir essas senhas fornece mais segurança do que deixar os usuários escolher suas próprias senhas facilmente adivinhadas: imprimir "Digite um número de semente:"; $ s =;
srand ($ s ^ time);
@ c = split (/ * /, "bcdfghjklmnprstvwxyz");
@ v = split (/ * /, "aeiou");
para ($ i = 1; $ i <= 4; $ i + = 1)
{print $ c [int (rand (20))], $ v [int (rand (5))] }
As primeiras duas linhas deste programa inicializam a semente para os números aleatórios e as próximas duas linhas criam listas contendo as 20 consoantes (menos
q ) e 5 vogais do alfabeto. O loop for simplesmente imprime as quatro sílabas.