El ejemplo que sigue muestra un pequeño intérprete. El usuario llama al programa con un comando y un glob que especifica un conjunto de ficheros.
lhp@nereida:~/Lperl/src/perl_testing_adn_examples/chapter_09$ symbolic.pl dirs /p* /pendriver /proc lhp@nereida:~/Lperl/src/perl_testing_adn_examples/chapter_09$ symbolic.pl latest * symbolic.pl lhp@nereida:~/Lperl/src/perl_testing_adn_examples/chapter_09$ symbolic.pl sort_by_time *.pl symbolic.pl simplecalc.pl make_test_files.pl filefilter.pl lhp@nereida:~/Lperl/src/perl_testing_adn_examples/chapter_09$ symbolic.pl chuchu *.pl Unknown command 'chuchu'Para cada comando el programa implanta una función de filtro e imprime el resultado del filtro.
lhp@nereida:~/Lperl/src/perl_testing_adn_examples/chapter_09$ cat -n symbolic.pl
 1  #!/usr/local/bin/perl
 2  use strict;
 3  use warnings;
 4
 5  main( @ARGV );
 6
 7  sub main {
 8      die "Usage:\n$0 <command> [file_pattern]\n" unless @_;
 9      my $command = shift;
10
11      die "Unknown command '$command'\n" unless  main->can( $command );
12
13      no strict 'refs';
14      my @r = $command->( @_ );
15      local $" = "\n";
16      print "@r\n";
17  }
18
19  sub sort_by_time {
20      map  { $_->[0] }
21      sort { $a->[1] <=> $b->[1] }
22      map  { [ $_, -M $_ ] } @_
23  }
24
25  sub latest {
26      (sort_by_time( @_ ) )[0];
27  }
28
29  sub dirs {
30      grep { -d $_ } @_;
31  }
La principal novedad en este código se refiere al control (línea 11)
de que comandos están disponibles. La función  can  puede ser llamada
de la forma:
paquete->can('nombre_de_subrutina')
devuelve cierto si existe una subrutina con ese paquete y falso en caso contrario. De hecho devuelve una referencia (dura/no simbólica) a la subrutina si esta existe.
Casiano Rodríguez León
