Este tutorial de 10 minutos no pretende comparar Java con Perl. El propósito es explorar cómo aprender rápidamente Perl como desarrollador de Java. Las siguientes son algunas notas clave desde mi perspectiva.
1. Conceptos básicos para comenzar
A diferencia de Java, no es necesario reclamar un método «principal» como punto de entrada. Para ejecutar un programa Perl simple como el siguiente:
# comment starts with "#"
# the name is hello.pl
print "Hello Perl!";
|
# el comentario comienza con «#» # el nombre es hello.pl print «¡Hola Perl!»;
Solo haz:
perl hello.pl
2. Tipos de datos
Los tipos de fecha en Perl son muy simples, solo tiene 3 tipos: Scalar, Array y Hash.
Scalar es un valor único, básicamente puede ser cualquier cosa que no sea Array o Hash.
Array es una matriz que puede contener diferentes tipos de elementos, como enteros y cadenas.
Hash es básicamente como HashMap en Java.
El siguiente código combina el uso de todos ellos.
#claim a hash and assign some values
my %aHash;
$aHash{'a'}=0;
$aHash{'b'}=1;
$aHash{'c'}=2;
$aHash{'d'}=3;
$aHash{'e'}=4;
#put all keys to an array
my @anArray = keys (%aHash);
#loop array and output each scalar
foreach my $aScalar (@anArray){
print $aScalar."n";
}
|
# reclamar un hash y asignar algunos valores my% aHash; $ aHash {‘a’} = 0; $ aHash {‘b’} = 1; $ aHash {‘c’} = 2; $ aHash {‘d’} = 3; $ aHash {‘e’} = 4; # poner todas las claves en una matriz my @anArray = keys (% aHash); #arreglo de bucle y salida de cada escalar para cada mi $ aScalar (@anArray) {print $ aScalar. » n»; }
La salida sería:
mi
C
a
B
D
Si desea ordenar la matriz, simplemente puede usar la función de clasificación como la siguiente:
foreach my $aScalar (sort @anArray){
print $aScalar."n";
}
|
foreach my $ aScalar (ordenar @anArray) {imprimir $ aScalar. » n»; }
3. Declaraciones condicionales y de bucle
Perl tiene Si, tiempo, por, para cada palabras clave para condicionales y bucles, que es muy similar con Java excepto cambiar.
El siguiente ejemplo los usa todos.
#if
my $condition = 0;
if( $condition == 0){
print "=0n";
}elsif($condition == 1){
print "=1n";
}else{
print "othersn";
}
#while
while($condition < 5){
print $condition;
$condition++;
}
for(my $i=0; $i< 5; $i++){
print $i;
}
#foreach
my @anArray = ("a", 1, 'c');
foreach my $aScalar (sort @anArray){
print $aScalar."n";
}
|
#if mi $ condición = 0; if ($ condición == 0) {imprimir «= 0 n»; } elsif ($ condición == 1) {imprimir «= 1 n»; } else {imprimir «otros n»; } # while while ($ condición <5) {imprimir $ condición; $ condición ++; } para (mi $ i = 0; $ i <5; $ i ++) {imprimir $ i; } #foreach my @anArray = ("a", 1, 'c'); foreach my $ aScalar (ordenar @anArray) {imprimir $ aScalar. " n"; }
4. Lectura / escritura de archivos
El siguiente ejemplo muestra cómo leer y escribir en un archivo. Tenga en cuenta que la diferencia entre «>» y «>>» es que «>>» agrega contenido al archivo mientras que «>» crea uno nuevo.
#read from a file
my $file = "input.txt";
open(my $fh, "<", $file) or die "cannot open < $file!";
while ( my $aline = <$fh> ) {
#chomp so no new line character
chomp($aline);
print $aline;
}
close $fh;
# write to a file
my $output = "output.txt";
open (my $fhOutput, ">", $output) or die("Error: Cannot open $output file!");
print $fhOutput "something";
close $fhOutput;
|
#leer de un archivo my $ file = «input.txt»; abrir (mi $ fh, «<", $ archivo) o morir "¡no se puede abrir <$ archivo!"; while (my $ aline = <$ fh>) {#chomp por lo que no hay un carácter de nueva línea chomp ($ aline); imprimir $ aline; } cerrar $ fh; # escribir en un archivo my $ output = «output.txt»; abrir (mi $ fhOutput, «>», $ salida) o morir («Error: ¡No se puede abrir $ archivo de salida!»); imprimir $ fhOutput «algo»; cerrar $ fhOutput;
5. Expresión regular
Hay principalmente dos funciones que usa la expresión regular: my s.
El siguiente código hace coincidir la cadena $ str con una expresión regular.
$str =~ m/program(creek|river)/
|
$ str = ~ m / program (arroyo | río) /
Si $ str es «programcreek», la expresión devuelve verdadero y puede usarse como condición para condicionales y bucles.
6. Analizar por valor / referencia
No es necesario definir métodos / funciones para un programa Perl, pero hacerlo mejoraría enormemente la modularidad y la reutilización del código. Entonces debemos tener cuidado con el paso de parámetros.
Es sencillo pasar un escalar, pero cuando se trata de matriz y hash. Necesita atención adicional.
Formación
my @testArray = (1, 3, 2);
#In sub
sub processArrayByReference($) {
my $arrayref = shift;
my @array = @$arrayref;
#...
}
#In sub processarray:
sub processArrayByValue($){
my @array = @_;
#...
}
processArrayByValue(@testArray);
processArrayByReference( @testArray );
|
mi @testArray = (1, 3, 2); #In sub sub processArrayByReference ($) {my $ arrayref = shift; my @array = @ $ arrayref; # …} #En subarreglo de proceso: subprocesoArrayByValue ($) {mi @array = @_; # …} processArrayByValue (@testArray); processArrayByReference ( @testArray);
Picadillo
sub printHash($) {
my %hash = %{ shift() };
for my $key ( sort keys %hash ) {
my $value = $hash{$key};
print "$key => $valuen";
}
}
printHash(%twoLettersCount);
|
sub printHash ($) {mi% hash =% {shift ()}; para mi $ clave (ordenar claves% hash) {mi $ valor = $ hash {$ clave}; imprimir «$ clave => $ valor n»; }} printHash (% twoLettersCount);
7. Algunos ejemplos interesantes / complicados
1). Recorre cada carácter de una cadena
my @lineCharArray = split('',$aline);
foreach my $character (@lineCharArray){
print $character."n";
}
|
my @lineCharArray = split (», $ aline); foreach my $ carácter (@lineCharArray) {imprimir $ carácter. » n»; }
2). Crea una matriz con las 26 letras
En lugar de repetir 26 veces, simplemente puede hacer lo siguiente:
my @charArray = ('a'..'z' );
my @twoCharArray = ('aa'..'zz');
|
my @charArray = (‘a’ .. ‘z’); my @twoCharArray = (‘aa’ .. ‘zz’);
Esta es la primera edición de los 10 minutos. Actualizaré alguna parte en base a los comentarios.