Para aquellos de ustedes que trabajan en entornos de líneas de comandos con el shell Bash, saben que desde hace unos años existe la posibilidad de agregar completado de comandos y argumentos en el momento de escribir el comando, con tan solo pulsar la tecla TAB.
Así, es posible completar los nombres de los ficheros, directorios, servidores, recursos externos, opciones de programas importantes (como apt-get, por ejemplo).
Ahora tenemos una posibilidad más: la de autocompletar el comando
perldoc, incluido con cada distribución estándar de Perl.
Ya saben que
perldoc saca la documentación de Perl, tanto de la documentación oficial como de las páginas de manual de los módulos y distribuciones. Lo que ahora se trata es de facilitar aún más la búsqueda de los términos que deseamos consultar.
El proceso de
instalación es muy sencillo. El primer paso es copiar
este programa Perl en cualquier ruta conocida por nuestra variable de entorno PATH. En mi caso, lo he guardado en ~/bin/ (la carpeta bin/ de mi directorio $HOME). Y le damos permisos de ejecución, con
chmod 755. El segundo paso consiste en agregar la siguiente línea a .bashrc (o en cualquier otro bashrc que se ejecute en el login del usuario):
Using bash Syntax Highlighting
complete -C perldoc-complete -o nospace -o default perldoc
Opcionalmente, también podrías crear un alias llamado pod, que realice la misma tarea que perldoc:
Using bash Syntax Highlighting
alias pod=perldoc
complete -C perldoc-complete -o nospace -o default pod
Y ya está. La próxima vez que entremos en el sistema, ya estará funcionando el autocompletado.
Hacemos una prueba. Escribo en la línea de comandos 'pod M' y pulso dos veces la tecla TAB. En la pantalla aparece
Using bash Syntax Highlighting
explorer@casa:~> pod M
Mail:: Memoize MIME:: MLDBM:: Module:: Moose:: Mouse MP3::
Math:: Memoize:: MLDBM Modern:: Moose MooseX:: Mouse:: MRO::
explorer@casa:~> pod M
Salen todos los módulos instalados en mi sistema que empiezan por la 'M'.
Ahora, si escribo 'pod -f bin' y pulso dos veces TAB, sale
Using bash Syntax Highlighting
explorer@casa:~> pod -f bin
bind binmode
explorer@casa:~> pod -f bin
Salen las dos funciones de Perl que comienzan por 'bin'.
Naturalmente, si solo escribo 'pod' y pulso dos veces la tecla TAB, salen todos los comandos que empiezan por 'pod':
Using bash Syntax Highlighting
explorer@casa:~> pod
pod pod2latex pod2man~ pod2usage pod_cover podselect
pod2html pod2man pod2text podchecker podlint podtidy
explorer@casa:~> pod
porque es Bash quien está autocompletando para encontrar cualquier comando que empiece por pod'. Pero... si en lugar de eso escribo 'pod ', y pulso dos veces TAB (nótese el espacio en blanco que le sigue. Bash ahora sabe que se trata del comando 'pod' y que le estamos pidiendo que autocomplete el resto), sale:
Using bash Syntax Highlighting
explorer@casa:~> pod
Display all 301 possibilities? (y or n)
Antes de sacarnos todas las combinaciones, Bash nos avisa de que son ¡un motón! Pulsamos 'y' y salen todas las distribuciones. Los documentos perl* están resumidos en una sola entrada:
perl* (174 hidden).
Lo mismo pasa si escribimos 'pod -f ' (lo mismo: hay un espacio en blanco al final) y pulsamos dos veces TAB: sale una lista con todas las funciones posibles de Perl (aquí, las de mi Perl v5.12.3):
Using bash Syntax Highlighting
explorer@casa:~> pod -f
Display all 218 possibilities? (y or n)
abs endnetent getprotobynumber lstat read setpwent telldir
accept endprotoent getprotoent m readdir setservent tie
alarm endpwent getpwent map readline setsockopt tied
atan2 endservent getpwnam mkdir readlink shift time
bind eof getpwuid msgctl readpipe shmctl times
binmode eval getservbyname msgget recv shmget tr
bless exec getservbyport msgrcv redo shmread truncate
break exists getservent msgsnd ref shmwrite uc
caller exit getsockname my rename shutdown ucfirst
chdir exp getsockopt next require sin umask
chmod fcntl glob no reset sleep undef
chomp fileno gmtime oct return socket unlink
chop flock goto open reverse socketpair unpack
chown fork grep opendir rewinddir sort unshift
chr format hex ord rindex splice untie
chroot formline import our rmdir split use
close getc index pack s sprintf utime
closedir getgrent int package say sqrt values
connect getgrgid ioctl pipe scalar srand vec
continue getgrnam join pop seek stat wait
cos gethostbyaddr keys pos seekdir state waitpid
crypt gethostbyname kill print select study wantarray
dbmclose gethostent last printf semctl sub warn
dbmopen getlogin lc prototype semget substr write
defined getnetbyaddr lcfirst push semop symlink -X
delete getnetbyname length q send syscall y
die getnetent link qq setgrent sysopen
do getpeername listen qr sethostent sysread
dump getpgrp local quotemeta setnetent sysseek
each getppid localtime qw setpgrp system
endgrent getpriority lock qx setpriority syswrite
endhostent getprotobyname log rand setprotoent tell
explorer@casa:~> pod -f
Desde luego, una herramienta muy útil para localizar información.