* Before we start... $ perldoc #!/usr/bin/perl use strict; * Datos y Operadores * Datos Escalares * Strings Datos de texto o binarios, sin significado para el programa, delimitados típicamente por comillas sencillas o dobles: my $world = 'Mundo'; my $escaped = 'Dan O\'Bannon'; my $backslash = '\\'; * Comillas dobles my $newline = "\n"; my $tab = "\t"; my $input = "hello\nworld!"; my $data = "08029\t25"; my $data = "08029,\"Eixample Esquerra\""; my $data = qq{08029,"Eixample Esquerra"}; * Interpolación my $hello = "Hola, $world!\n"; my $hello = qq{Hola, "$world"!\n}; * Funciones típicas de cadena length EXPR substr EXPR,OFFSET,LENGTH,REPLACEMENT substr EXPR,OFFSET,LENGTH substr EXPR,OFFSET index STR,SUBSTR,POSITION index STR,SUBSTR Functions for SCALARs or strings "chomp", "chop", "chr", "crypt", "hex", "index", "lc", "lcfirst", "length", "oct", "ord", "pack", "q//", "qq//", "reverse", "rindex", "sprintf", "substr", "tr///", "uc", "ucfirst", "y///" => Más cuando hablemos de expresiones regulares * Números $ perldoc perlnumber $n = 1234; # decimal integer $n = 0b1110011; # binary integer $n = 01234; # *octal* integer $n = 0x1234; # hexadecimal integer $n = 12.34e−56; # exponential notation $n = "−12.34e56"; # number specified as a string $n = "1234"; # number specified as a string * Hashes, Listas y Arreglos @ Arreglo my @author; $author[0] = 'Asimov'; $author[1] = 'Bear'; $author[2] = 'King'; print "First author is " . $author[0] . "\n"; print "Last author is " . $author[$#author] . "\n"; print "Last author is " . $author[-1] . "\n"; print "There are " . @author . " authors\n"; my @num = (0..10); my @a = (@b,@c); * Funciones típicas para arreglos sort SUBNAME LIST sort BLOCK LIST sort LIST grep BLOCK LIST grep EXPR,LIST join EXPR,LIST split /PATTERN/,EXPR,LIMIT split /PATTERN/,EXPR split /PATTERN/ # ++$learn $ perldoc List::Util % Hash my %name; $name{'Asimov'} = 'Isaac'; $name{'Bear'} = 'Greg'; $name{'King'} = 'Stephen'; * Funciones típicas para hashes keys HASH values HASH print "Authors are ".keys(%name)."\n"; * Identificadores, variables y su notación Notación Las variables son precedidas de un sigil que indica el tipo de valor de la variable: $ Escalar @ Arreglo % Hash e.g. my($nombre, @nombre, %nombre); Para acceder el elemento de un arreglo o hash, se utiliza el sigil escalar: $nombre{$id} = 'Ann'; $nombre[$pos] = 'Ben'; Es posible acceder múltiples valores al mismo tiempo utilizando el sigil de arreglo: @nombre{@keys} = @values; @suspendidos = @nombre[@selected]; @authors =("Asimov","Bear","King"); @authors = qw(Asimov Bear King); Variables especiales $ perldoc perlvar $ perldoc English @ARGV @INC %ENV %SIG $@ @_ $_ * I/O * Consola STDIN STDOUT STDERR e.g. print STDERR "This is a debug message\n"; #!/usr/bin/perl use strict; use Chatbot::Eliza; my $eliza = Chatbot::Eliza->new(); while() { chomp; print "> ".$eliza->transform($_),"\n"; } * Ficheros $ perldoc -f open $ perldoc perlopentut # # Reading from a file # # Please don't do this! open(FILE,"<$file"); # Do *this* instead open my $fh, '<', 'filename' or die "Cannot read '$filename': $!\n"; while (<$fh>) { chomp; say "Read a line '$_'"; } # # Writing to a file # use autodie; open my $out_fh, '>', 'output_file.txt'; print $out_fh "Here's a line of text\n"; say $out_fh "... and here's another"; close $out_fh; # $fh->autoflush( 1 ); # # There's much more! # :mmap, :utf8, :crlf, ... # open($fh, ">:utf8", "data.utf"); print $fh $out; close($fh); # ++$learn $ perldoc perlio $ perldoc IO::Handle $ perldoc IO::File * Operadores y su precedencia ( y su asociatividad ( y su arity ( y su fixity ) ) ) $ perldoc perlop left terms and list operators (leftward) left −> nonassoc ++ −− right ** right ! ~ \ and unary + and − left =~ !~ left * / % x left + − . left << >> nonassoc named unary operators nonassoc < > <= >= lt gt le ge nonassoc == != <=> eq ne cmp ~~ left & left | ^ left && left || // nonassoc .. ... right ?: right = += −= *= etc. left , => nonassoc list operators (rightward) right not left and left or xor => Atencion! print ( ($foo & 255) + 1, "\n"); print ++$foo; * Operadores * Numericos * String * Logicos * Bitwise * Especiales * Estructuras de Control if (EXPR) BLOCK if (EXPR) BLOCK else BLOCK if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK LABEL while (EXPR) BLOCK LABEL while (EXPR) BLOCK continue BLOCK LABEL until (EXPR) BLOCK LABEL until (EXPR) BLOCK continue BLOCK LABEL for (EXPR; EXPR; EXPR) BLOCK LABEL foreach VAR (LIST) BLOCK LABEL foreach VAR (LIST) BLOCK continue BLOCK LABEL BLOCK continue BLOCK e.g. for(my $i=0; $i<@author; ++$i) { print $i.": ".$author[$i]."\n"; } for(0..$#author) { print $_.": ".$author[$_]."\n"; } foreach my $i (0..$#author) { print $i.": ".$author[$i]."\n"; } for(0..1000000) { print $_,"\n"; } while(<$fh>) { # Skip comments next if /^#/; ... } * Modificadores if EXPR unless EXPR while EXPR until EXPR foreach LIST e.g. print "Value is $val\n" if $debug; print $i++ while $i <= 10; Contexto * Void find_chores(); * Lista my @all_results = find_chores(); my ($single_element) = find_chores(); process_list_of_results( find_chores() ); my ($self,@args) = @_; * Escalar print "Hay ".@author." autores\n"; print "Hay ".scalar(@author)." autores\n"; # ++$learn $ perldoc -f wantarray * Numerico my $a = "a"; my $b = "b"; print "a is equal to b " if ($a==$b); # Really? print "a is equal to b " if ($a eq $b); * Cadena my $a = 2; print "The number is ".$a."\n"; * Booleano my $a = 0; print "a is true\n" if $a; $a = 1; print "a is true\n" if $a; $a = "a"; print "a is true\n" if $a; my $numeric_x = 0 + $x; # forces numeric context my $stringy_x = '' . $x; # forces string context my $boolean_x = !!$x; # forces boolean context