barcelona.pm curs1211 sess01

44
Barcelona Perl Mongers Curs de Perl 2012-11-10 Dades i Operadors

Upload: javier-arturo-rodriguez

Post on 29-Nov-2014

519 views

Category:

Education


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Barcelona.pm Curs1211 sess01

Barcelona Perl Mongers

Curs de Perl2012-11-10

Dades i Operadors

Page 2: Barcelona.pm Curs1211 sess01

Dades I Operadors

● tipus bàsics: $scalar @array %hash● cadenes de caràcters● operadors numèrics i de cadenes● control del flux: condicionals, bucles i errors● entrada/sortida: STDIN STDOUT

Page 3: Barcelona.pm Curs1211 sess01

* Before we start...

$ perldoc

#!/usr/bin/perl#!/usr/bin/env perl

use strict;

Page 4: Barcelona.pm Curs1211 sess01

Datos y Operadores

Page 5: Barcelona.pm Curs1211 sess01

Datos Escalares

● Strings● Numbers

Page 6: Barcelona.pm Curs1211 sess01

Strings

Datos de texto o binarios, sin significado para el programa, delimitados tipicamente por comillas

sencillas o dobles:

Page 7: Barcelona.pm Curs1211 sess01

Strings

my $world = 'Mundo';my $escaped = 'Dan O\'Bannon';

my $backslash = '\\';

Page 8: Barcelona.pm Curs1211 sess01

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"};

Page 9: Barcelona.pm Curs1211 sess01

Interpolacion

my $hello = "Hola, $world!\n";my $hello = qq{Hola, "$world"!\n};

Page 10: Barcelona.pm Curs1211 sess01

Funciones tipicas de cadena

length EXPRsubstr EXPR,OFFSET,LENGTH,REPLACEMENTsubstr EXPR,OFFSET,LENGTHsubstr EXPR,OFFSETindex STR,SUBSTR,POSITIONindex STR,SUBSTR

Page 11: Barcelona.pm Curs1211 sess01

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///"

=> Mas cuando hablemos de expresiones regulares

Page 12: Barcelona.pm Curs1211 sess01

Numeros

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

Page 13: Barcelona.pm Curs1211 sess01

Hashes, Listas y Arreglos

Page 14: Barcelona.pm Curs1211 sess01

@ 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);

Page 15: Barcelona.pm Curs1211 sess01

# ++$learn

$ perldoc List::Util

Page 16: Barcelona.pm Curs1211 sess01

% Hash

my %name; $name{'Asimov'} = 'Isaac'; $name{'Bear'} = 'Greg'; $name{'King'} = 'Stephen';

Page 17: Barcelona.pm Curs1211 sess01

Funciones tipicas para hashes

keys HASHvalues HASH print "Authors are ".keys(%name)."\n";

Page 18: Barcelona.pm Curs1211 sess01

Identificadores, variables y su notacion

Page 19: Barcelona.pm Curs1211 sess01

Notacion

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);

Page 20: Barcelona.pm Curs1211 sess01

Para acceder el elemento de un arreglo o hash, se utiliza el sigil escalar:

$nombre{$id} = 'Ann';$nombre[$pos] = 'Ben';

Page 21: Barcelona.pm Curs1211 sess01

Es posible acceder multiples valores al mismo tiempo utilizando el sigil de arreglo:@nombre{@keys} = @values;@suspendidos = @nombre[@selected];@authors =("Asimov","Bear","King");@authors = qw(Asimov Bear King);

Page 22: Barcelona.pm Curs1211 sess01

Variables especiales

$ perldoc perlvar$ perldoc English @ARGV @INC %ENV %SIG $@@_ $_

Page 23: Barcelona.pm Curs1211 sess01

I/O

Page 24: Barcelona.pm Curs1211 sess01

Consola

STDINSTDOUTSTDERR

Page 25: Barcelona.pm Curs1211 sess01

e.g.

print STDERR "This is a debug message\n";

Page 26: Barcelona.pm Curs1211 sess01

Operadores y su precedencia

( y su asociatividad ( y su arity ( y su fixity ) ) )

Page 27: Barcelona.pm Curs1211 sess01

$ 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 <><=>=ltgtlege nonassoc ==!=<=>eqnecmp~~ left & left |^ left && left || // nonassoc .. ... right ?: right =+= −= *= etc. left ,=> nonassoc list operators (rightward) rightleftleftnot and or xor

Page 28: Barcelona.pm Curs1211 sess01

=> Atencion!

print ( ($foo & 255) + 1, "\n"); print ++$foo;

Page 29: Barcelona.pm Curs1211 sess01

* Operadores

* Numericos* String

* Logicos* Bitwise

* Especiales

Page 30: Barcelona.pm Curs1211 sess01

* 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

Page 31: Barcelona.pm Curs1211 sess01

e.g.

for(my $i=0; $i<@author; ++$i) { print $i.": ".$author[$i]."\n";}

Page 32: Barcelona.pm Curs1211 sess01

for(0..$#author) { print $_.": ".$author[$_]."\n";}

Page 33: Barcelona.pm Curs1211 sess01

foreach my $i (0..$#author) { print $i.": ".$author[$i]."\n";}

Page 34: Barcelona.pm Curs1211 sess01

for(0..1000000) { print $_,"\n";}

Page 35: Barcelona.pm Curs1211 sess01

while(<$fh>) { ... }

Page 36: Barcelona.pm Curs1211 sess01

* Modificadores

if EXPR unless EXPR while EXPR until EXPR

foreach LISTnext if /^#/;

...

Page 37: Barcelona.pm Curs1211 sess01

e.g.

print "Value is $val\n" if $debug; print $i++ while $i <= 10;

Page 38: Barcelona.pm Curs1211 sess01

Contexto

* Voidfind_chores();

* Listamy @all_results = find_chores();my ($single_element) = find_chores();process_list_of_results( find_chores() );my ($self,@args) = @_;

* Escalarprint "Hay ".@author." autores\n";print "Hay ".scalar(@author)." autores\n";

Page 39: Barcelona.pm Curs1211 sess01

# ++$learn

$ perldoc -f wantarray

Page 40: Barcelona.pm Curs1211 sess01

* 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);

Page 41: Barcelona.pm Curs1211 sess01

* Cadena

my $a = 2;print "The number is ".$a."\n";

Page 42: Barcelona.pm Curs1211 sess01

* 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 contextmy $stringy_x = '' . $x; # forces string contextmy $boolean_x = !!$x; # forces boolean context

Page 43: Barcelona.pm Curs1211 sess01

string context

my $boolean_x = !!$x; # forces boolean context

Page 44: Barcelona.pm Curs1211 sess01

string context

my $boolean_x = !!$x; # forces boolean context