Repaso

Perl Básico

  1. ¿Cómo puedo saber con que versión de Perl estoy trabajando?
  2. ¿Con que opción debo usar Perl para ejecutar un programa en la línea de comandos?
  3. ¿Cual es la función de la declaración use 5.008004?
  4. ¿Cuál es la función de la declaración use strict?
  5. ¿Que diferencia hay entre use warnings y perl -w?
  6. ¿Cuál es la función de la declaración use Carp? ¿Que diferencia hay entre croak y die?
  7. ¿Que hace la declaración package nombredepaquete?
  8. ¿Qué hace la declaración our? ¿En que ámbito es visible una variable declarada con our? ¿Cuál es el nombre completo de una variable de paquete?
  9. ¿En que variable especial se situán los argumentos pasados a una subrutina? ¿En que variable especial se situán los argumentos pasados en línea de comandos?
  10. ¿Que imprime el siguiente código?
    print
    
  11. ¿Que hace local?
  12. ¿Cómo se declara una variable léxica?
  13. ¿Cómo se hace referencia a un elemento de un hash %h de clave k?
  14. ¿Cómo se hace referencia a un elemento de un array @a de índice 7? ¿Que lugar ocupa ese elemento en el array?
  15. ¿Cuál es el el valor devuelto por una variable escalar sin inicializar? ¿Y por una variable de tipo lista?
  16. Señale la diferencia entre

    my ($input) = @_;
    
    my $input = @_;
    

  17. ¿Cómo se evalúa una referencia en un contexto de cadena?
  18. ¿Que hace el operador =>?.
  19. Sea el código:
    @a = undef;
    if (@a) { &tutu(); }
    
    ¿Se ejecuta &tutu? Explique su respuesta
  20. Explique las líneas:
    eval {
      my ($a, $b) = (10, 0);
      my $c = $a / $b;
    };
    
    print "$@" if $@;
    

  21. Explique la salida del siguiente programa:
    lhp@nereida:~/Lperl/src$ cat -n privacy.pl
     1  #!/usr/bin/perl -w
     2  use strict;
     3  package tutu;
     4  my $a = 10;
     5
     6  package titi;
     7
     8  if (defined($tutu::a)) { print "$tutu::a\n" }
     9  else { print "No esta definida \$tutu::a\n"};
    10  print "\$a = $a\n";
    

  22. ¿Que ocurre cuando un código esta rodeado de un BEGIN?

  23. Explique la línea:
    perl -e 's/nereida\.deioc\.ull\.es/miranda.deioc.ull.es/gi' -p -i.bak *.html
    

  24. Salida con Formato:

    Indique como saldrá formateada la salida del siguiente código:

    my @items = qw(un dos tres);
    my $format = "Los items son:\n".("%10s\n"x @items);
    printf $format, @items;
    

  25. ¿Que queda en @text?
      DB<1> @text = (1, 2, 3, 4, 5)
      DB<2> @text[@text] = 0
      DB<3> x 0+@text
    0  6
    

  26. ¿Que variable de entorno gobierna la búsqueda de módulos? ¿Que variables de entorno debo modificar si estoy instalando distribuciones en directorios que no son los de búsqueda por defecto? (Se supone que las distribuciones además de módulos pueden tener ejecutables y documentación)

Módulos y Distribuciones

  1. ¿Cómo se llama el programa que me permite crear el esqueleto para una distribución de un módulo? ¿Con que opciones debo llamarlo? ¿Como queda la jerarquía de directorios?
  2. ¿Qué es Makefile.PL? ¿Cuál es su función? ¿Que secuencia de comandos conocida como mantra de instalación es necesario ejecutar para instalar un módulo? ¿Que significa la frase looks good?
  3. ¿En que lugar se dejan los ejecutables asociados con una distribución? ¿Cómo se informa a Perl que se trata de ejecutables?
  4. ¿Cuál es la función de MANIFEST? ¿Cuál es la función de MANIFEST.SKIP? ¿Que hace make manifest?
  5. Quiero añadir objetivos al Makefile generado a partir de Makefile.PL ¿Que debo hacer?
  6. ¿Que hace la opción -I?
  7. ¿Cuál es la función de la variable mágica $/?

  8. Plain Old Documentation:
    1. ¿Cómo se puede ver la documentación de un módulo Perl?

    2. ¿Como puedo ver la documentación de una función/primitiva Perl?

    3. ¿Que hacen los siguientes comandos?
      =head1 Texto
      =over número
      =item stuff
      =back
      =cut
      =pod
      

    4. Indique que salida produce el siguiente fragmento de pod: C<$a E<lt>=E<gt> $b>

  9. Cual es la secuencia de pasos a la que da lugar la sentencia:
    use Modulo::Interesante qw(one two);
    

  10. Supongamos el módulo:

    package Trivial::Tutu;
    our @EXPORT = qw(uno dos);
    our @EXPORT_OK = qw(tres cuatro cinco);
    use Exporter;
    our @ISA = qw(Exporter);
    

    Indique que es importado y que no cuando se usan las siguientes declaraciones: la exportación:

    1. use Trivial::Tutu;

    2. use Trivial::Tutu qw(uno dos)

    3. use Trivial::Tutu qw(tres cinco)

    4. use Trivial::Tutu();

    5. use Trivial::Tutu(siete);

    6. Cuando el intérprete Perl encuentra una sentencia
      use Este::Modulo;
      
      ¿Donde busca el fichero Modulo.pm?
    7. ¿Cómo se llama el programa que me permite crear el esqueleto para una distribución de un módulo? ¿Con que opciones debo llamarlo?
    8. ¿En que subdirectorio queda el fichero conteniendo el esqueleto del módulo creado Tutu.pm?
    9. ¿Cuál es la función de MANIFEST?
    10. ¿Con que comando se crea el Makefile para trabajar en la plataforma actual?
    11. Toda referencia es verdadera ¿Cierto o falso?
    12. ¿Que diferencia hay entre use y require?
    13. ¿Que hace la línea our @ISA = qw(Exporter)?.

    14. ¿Que hace la línea our @EXPORT = qw( compile compile_from_file)?
    15. ¿Que diferencia hay entre EXPORT Y EXPORT_OK?.
    16. ¿En que lugar se dejan los ejecutables asociados con una distribución? ¿Cómo se informa a Perl que se trata de ejecutables?

    17. ¿Que subrutina es llamada siempre que una subrutina no existe? ¿Donde queda el nombre de la subrutina llamada?

    18. ¿Cómo puedo saber donde está instalado un módulo?

    19. ¿Que ocurre cuando un código esta rodeado de un BEGIN?

  11. ¿Cómo puedo saber donde está instalado un módulo?

cpan

  1. ¿Que hace el comando o conf de cpan?
  2. ¿Como se modifica la lista de mirrors para descarga?
  3. ¿Cuál es el significado de la opción makepl_arg?
  4. ¿Que hacen los comandos h, a, d, i, r, !, de cpan?

  5. ¿Que hacen los comandos upgrade, ls, look de cpan?

Pruebas

  1. Describa las siguientes funciones use_ok , diag , ok , is , isnt , like , unlike , can_ok , isa_ok e is_deeply

  2. ¿Como se le indica a Test::More el número de pruebas a realizar? ¿Cómo se le indica a Test::More que no conocemos el número de pruebas a realizar?

  3. Supongamos que queremos hacer pruebas con módulos como Test::Exception, Test::Pod, etc. que no forman parte de la distribución núcleo de Perl. ¿Como deben ser diseñadas dichas pruebas de cara a no entorpecer la correcta distribución de su módulo?

  4. ¿Cómo se llama el módulo que permite hacer un estudio del cubrimiento de las pruebas?

  5. ¿Que es cubrir un if?

  6. ¿Cual es el número mínimo de ejecuciones necesarias de la siguiente condición para cubrirla completamente?

    $N > 0 and $R > 0 and $N == int $N and $R == int $R
    

  7. ¿Como ejecuto los tests de mi distribución?
  8. ¿Donde residen los tests de mi distribución?
  9. ¿Que extensión deben tener los programas de prueba?
  10. ¿Cuáles son los parámetros de la función ok?
  11. ¿Cuáles son los parámetros de la función is?
  12. ¿Porqué es conveniente nombrar las pruebas con un nombre que empiece por un número?
  13. ¿Como puedo ejecutar los tests en modo verbose?
  14. ¿Porque decimos que el diseño de la interfaz debe preceder a la implementación de las pruebas?
  15. ¿Como puedo probar un código que produce la detención del programa?
  16. ¿Que contiene la variable $@?
  17. ¿Que hace la función like?
  18. ¿Porqué la función use_ok es llamada dentro de un BEGIN?
  19. ¿Que es una prueba SKIP?
  20. ¿Que es una prueba TODO?
  21. Durante el desarrollo detecta un fallo en su código. Una vez resuelto el problema ¿Cómo debe afectar la detección del fallo a la fase de pruebas?
  22. ¿Que hace la función pod_file_ok? ¿A que módulo pertenece?
  23. ¿Que hace la llamada use Test::More qw(no_plan);?
  24. ¿Que hace la función can_ok? ¿Qué argumentos tiene?
  25. ¿Que diferencia hay entre is_deeply e is?

  26. ¿Que argumentos recibe la función throws_ok? ¿En que módulo se encuentra?

  27. ¿Que hace el comando HARNESS_PERL_SWITCHES=-MDevel::Cover make test?

  28. ¿Cómo se interpreta el cubrimiento de las subrutinas?
  29. ¿Cómo se interpreta el cubrimiento de las ramas? ¿y las condiciones lógicas?
  30. ¿En cual de estos factores es realista y deseable lograr un cubrimiento del %100 con nuestras pruebas?

  31. ¿Que hace la función lives_ok? ¿En que módulo está?

Subversion

  1. ¿Cual es la orden para crear un repositorio subversion?

  2. ¿Cual es la orden subversion para crear un proyecto en un cierto repositorio?

  3. ¿Cual es la orden subversion para crear una copia de trabajo de un proyecto?

  4. ¿Cual es la función de los directorios trunk, branches y tags?

  5. ¿Que hace, svn commit? ¿Que hace svn update? ¿Que hace svn log?

  6. ¿Que hace svn -vu satus? ¿Que significan las opciones usadas?
  7. ¿Que es Request Tracker?
  8. Que significa -p1 en

    $ patch -p1 < ../newknap.patch
    

  9. ¿Que hace el comando svn update?
  10. ¿Que hace el comando svn commit -m 'changed this and that'?
  11. Suponga que se ha editado dos copias del mismo fichero en dos copias de trabajo. Actualicemos la segunda copia en el repositorio. ¿Que se observa?

  12. ¿Que hace gvim -d file1 file2?
  13. ¿Que hace diffupdate?
  14. ¿Que hace ]c?
  15. ¿Que hace [c?
  16. ¿Que hace 8]c?
  17. ¿Que hace do?
  18. ¿Que hace dp?
  19. ¿Que hace :diffg?
  20. ¿Que hace :12,20diffg?
  21. ¿Que hace el comando :buffers?
  22. ¿Que hace el comando :buffer 2?
  23. ¿Que hace :diffg 3?
  24. ¿Que hace :diffg batch.mine?
  25. ¿Que hace :diffput?
  26. ¿Que hace :12,20diffput?
  27. ¿Que hace zo?
  28. ¿Que hace zO?
  29. ¿Que hace zc?
  30. ¿Que hace zO?
  31. ¿Que hace :vnew?
  32. ¿Que hace CTRL-W v?
  33. ¿Que hace :set foldmethod=manual?
  34. ¿Que hace zf}?
  35. ¿Que hace :diffthis?
  36. ¿Que hace :diffsplit filename?
  37. ¿Que hace :windo ?
  38. Explique la siguiente secuencia de comandos vim:
    :1,5yank a
    :6,10yank  b
    :tabedit | put a | vnew | put b 
    :windo diffthis
    
  39. ¿Cómo se resuelve un conflicto usando vimdiff?

  40. ¿Que hace el comando patch? ¿Cómo se crea un patch?
  41. ¿Que hace :diffpatch filename?
  42. ¿Que hace :vert diffpatch filename?
  43. ¿que hace esta secuencia de comandos?
    $ svn diff modulos.tex -r PREV:HEAD > patch
    $ vi 
              :.!svn cat modulos.tex -r PREV
              :vert diffpatch patch
    

ssh

  1. ¿Como se genera una pareja clave privada-pública?

  2. ¿Como se "publica" una clave?

  3. ¿Cual es el formato de una línea del fichero ~/.ssh/authorized_keys ¿Cómo se pinene comentarios en dicho fichero? ¿que ocurre con las líneas en blanco?

  4. ¿Que hace esta opción?

      from="!enemy.my_isp.net,*.my_isp.net,home.example.com"
    

  5. ¿Cómo se restringe el comando que se puede ejecutar para una determinada clave?

  6. ¿Que hace el programa svnserve?

  7. ¿Como podemos hacer que nuestro repositorio sea accesible por otros usuarios mediante el protocolo svn+ssh si no tenemos privilegios de administrador?

  8. ¿Que hace la opción --tunnel-user=user de svnserve?

  9. ¿En que fichero se pone esta línea?
    command="/usr/bin/svnserve -t -r /home/casiano/repository --tunnel-user=lgforte",no-port-forwarding  ssh-dss ....
    

Procesos

  1. ¿Que diferencia hay entre ejecutar system con uno o con varios argumentos?
  2. ¿Que diferencia hay entre ejecutar system con o sin redirección, pipes, background, etc.?
  3. ¿Que diferencia hay entre ejecutar system y exec?
  4. En Perlmonks apareció la siguiente pregunta (puede encontrarla buscando en http://www.perlmonks.org/ por 'Environmental Settings'.
    I require some assistance. I am writing a CGI script in Perl on Solaris
    that needs to run external commands using the 'system' operator. These
    commands are part of a larger package that needs the system initialized
    (via a command) properly before execution, or else each individual
    command cannot interact with the other, like the following.
    
    1: system "/PATH/initialize_system"; # init the environment
    2: system "/PATH/skew.k ARG_FOR_FRAME_NUMBER"; # create image
    3: system "/PATH/savegif.k FRAME_NUMBER"; # save image off
    4: system "exit"; # exit the environment created with initialize_system
    
    When running a command using 'system', the environment appears to only
    lasts until the next line of Perl code, so line 2 can't talk to line
    3 because the environment required for them to communicate isn't there
    which is initialized by line 1. The above code snippet would the way it
    is run from a command line. 
    
    Any help would be appreciated. 
    Thanks.
    

    ¿Cuál es su respuesta?

  5. Ejecute los comandos:
    $ set | grep "^[A-Z]" |wc
    $ perl -e 'print "$_ = $ENV{$_}\n" for sort keys %ENV;' | wc
    
    ¿A que se debe la diferencia?. Consulte el módulo Env::Bash . Discuta su funcionalidad.

  6. Que diferencia hay entre
    system 'echo $PATH'
    
    y
    system "echo $PATH"
    
  7. Que salida se obtiene al ejecutar:
    system('echo','hola','>','juan.txt');
    
  8. ¿Que valor devuelve system?

  9. ¿Que hace la asignación *a = *b?
  10. ¿Que hace la asignación *a = \$b?
  11. ¿Que hace la asignación *a = \&Paquete::Con::Un::Largo::Nombre::resuelve?
  12. ¿Que hace la asignación *a = \*STDOUT?
  13. Cual es la salida en la siguiente sesión:
      DB<1> *a = \*STDOUT
      DB<2> print a "hola"
    

  14. ¿Que contiene el hash %ENV?
  15. ¿Que relación hay entre interpolación y backticks?
  16. ¿Que ocurre si los backticks se ejecutan en un contexto de lista?
  17. ¿Que hace el operador qx?
  18. ¿Que hace el comando tee?
  19. ¿Que error se produjo si $? == -1?
  20. ¿Que error se produjo si $? & 127?
  21. ¿Que contiene $? & 128?
  22. ¿Que contiene la expresión $? >> 8?
  23. Ejecute la siguiente sesión en el depurador (el programa bc implementa una calculadora). Explique la secuencia de eventos:
    pp2@nereida:~/alu$ perl -wde 0
    main::(-e:1):   0
      DB<1> open $F, "|bc"
      DB<2> print $F "4*3\n"
      DB<3> print $F "5*2\n"
      DB<4> close($F)
    12
    10
      DB<5>
    

  24. Ejecute la siguiente sesión en el depurador. Explique la secuencia de eventos:
      DB<6> $F->autoflush(1)
      DB<7> open $F, "|bc"
      DB<8> print $F "4*3\n"
    12
      DB<9> print $F "5*2\n"
    10
    

  25. Abra un pipe con bc y alimente la calculadora usando syswrite. ¿Que diferencias observa?

  26. ¿Que ocurre en un contexto de lista en una ejecución con backticks si se ha redefinido $/?

  27. Explique la diferencia de conducta entre estos dos ejemplos

  28. ¿Cómo puedo hacer que en un segmento de mi programa Perl todas las salidas a STDOUT sean redirigidas a un determinado fichero?

  29. ¿Que contiene el hash %SIG?

  30. ¿Como puedo hacer que un programa no se detenga debido a una señal PIPE? ¿Cuándo se genera una señal PIPE?



Subsecciones
Casiano Rodríguez León
2010-03-22