Algunos antecedentes breves:
Desafortunadamente, la API de Unix no proporciona un programa en ejecución con la ruta completa al ejecutable. De hecho, el programa que ejecuta el suyo puede proporcionar lo que quiera en el campo que normalmente le dice a su programa qué es. Hay, como señalan todas las respuestas, varias heurísticas para encontrar posibles candidatos. Pero nada menos que buscar en todo el sistema de archivos siempre funcionará, e incluso eso fallará si el ejecutable se mueve o se elimina.
Pero no desea el ejecutable de Perl, que es lo que realmente se está ejecutando, sino el script que está ejecutando. Y Perl necesita saber dónde está el guión para encontrarlo. Almacena esto __FILE__
, mientras que $0
es de la API de Unix. Esto todavía puede ser un camino relativo, así que tome la sugerencia de Mark y canonícela conFile::Spec->rel2abs( __FILE__ );