Al igual que Hugo dijo, no se puede afectar a la función CCW del proceso principal, por lo que no hay problema.
Donde la pregunta es más aplicable es si no controla todo el proceso, como en una subrutina o módulo. En esos casos, usted desea salir de la subrutina en el mismo directorio que ingresó, de lo contrario, la sutil acción a distancia se arrastra y causa errores.
Puede que esto a mano ...
use Cwd;
sub foo {
my $orig_cwd = cwd;
chdir "some/dir";
...do some work...
chdir $orig_cwd;
}
pero que tiene problemas. Si la subrutina regresa temprano o muere (y la excepción queda atrapada) su código seguirá estando en some/dir
. Además, el chdir
s puede fallar y debe recordar verificar cada uso. Bleh.
Afortunadamente, hay un par de módulos para hacerlo más fácil. File :: pushd es uno, pero prefiero File::chdir.
use File::chdir;
sub foo {
local $CWD = 'some/dir';
...do some work...
}
Archivo :: chdir hace que el cambio en la asignación de directorios a $CWD
. Y puede localizar $CWD
para que se restablezca al final de su alcance, no importa qué. También verifica automáticamente si el chdir
tiene éxito y arroja una excepción en caso contrario. Algunas veces lo usa en scripts porque es muy conveniente.
No entiendo la pregunta. ¿Cómo puede alguien decir que su secuencia de comandos hizo un CD a un nuevo directorio? –
Las respuestas actuales se aproximan a esto desde una perspectiva de "es sintaxis válida y no afecta el shell de los padres, por lo que está bien". Veo otra parte de esta pregunta, algo así como "está codificando en estilo de codificación feo de scripts, similar a las líneas excesivamente largas de Python o nombres de variables mal elegidos, algo que se puede hacer pero es una buena práctica para evitar". – dfarrell07