Estoy tratando de obtener un bloque de código en una línea. Necesito una manera de obtener la cantidad de elementos en una lista. Mi código actualmente se ve así:Perl - Cómo obtener la cantidad de elementos en una matriz anónima, para recortar de forma concisa nombres de ruta
# Include the lib directory several levels up from this directory
my @ary = split('/', $Bin);
my @ary = @ary[0 .. $#ary-4];
my $res = join '/',@ary;
lib->import($res.'/lib');
Eso está muy bien, pero me gustaría hacer que una línea, algo como esto:
lib->import(join('/', ((split('/', $Bin)) [0 .. $#ary-4])) );
Pero, por supuesto, la sintaxis $#ary
no tiene sentido en la línea anterior .
¿Hay forma equivalente de obtener la cantidad de elementos en una lista anónima?
Gracias!
PS: La razón de la consolidación de esto es que será en la cabecera de un grupo de scripts de Perl que son accesorias a la aplicación principal, y yo quiero que esto poco encantamiento para ser más corta & prueba de pasta.
Gracias a todos
No parece ser una abreviatura para el número de elementos de una lista anónima . Eso parece un descuido. Sin embargo, las alternativas sugeridas fueron todas buenas.
voy con:
lib->import(join('/', splice(@{[split('/', $Bin)]}, 0, -4)).'/lib');
Pero Éter sugerido lo siguiente, que es mucho más correcto y portátil:
my $lib = File::Spec->catfile(
realpath(File::Spec->catfile($FindBin::Bin, ('..') x 4)),
'lib');
lib->import($lib);
Por qué estás tratando de obtener un bloque de código a una sola línea? SI es solo para cortar y pegar, ese es tu problema. En lugar de eso, crea una biblioteca que haga lo que necesites para que no tengas que cortar y pegar. Es por eso que existen subrutinas. :) –
No se puede poner en una lib, porque esta es la línea de código que establece el directorio de inclusión para las libs personalizadas. Además, no quiero :) Pero creo que es una pregunta interesante por sí misma de todos modos. – NXT