Sto cercando di ottenere un blocco di codice su una riga. Ho bisogno di un modo per ottenere il numero di elementi in una lista. Il mio codice attualmente appare così:Perl - Come ottenere il numero di elementi in un array anonimo, per tagliare concisamente i nomi di percorso
# 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');
che è grande, ma mi piacerebbe fare che una linea, qualcosa di simile:
lib->import(join('/', ((split('/', $Bin)) [0 .. $#ary-4])) );
Ma naturalmente la sintassi $#ary
è privo di significato nella riga sopra .
Esiste un modo equivalente per ottenere il numero di elementi in un elenco anonimo?
Grazie!
PS: La ragione per consolidare questo è che sarà nell'intestazione di un mucchio di script perl ausiliarie al l'applicazione principale, e voglio che questo piccolo incantesimo per essere più tagliare & pasta di prova.
Grazie a tutti
Non sembra essere una scorciatoia per il numero di elementi in un anonimo lista. Sembra una svista. Tuttavia le alternative suggerite erano tutte buone.
che sto andando con:
lib->import(join('/', splice(@{[split('/', $Bin)]}, 0, -4)).'/lib');
Ma Ether suggerito il seguente, che è molto più corretto e portatile:
my $lib = File::Spec->catfile(
realpath(File::Spec->catfile($FindBin::Bin, ('..') x 4)),
'lib');
lib->import($lib);
Perché stai cercando di ottenere un blocco di codice fino a una riga? Se è solo per tagliare e incollare, allora questo è il tuo problema. Invece di fare una libreria per fare ciò che ti serve, non devi tagliare e incollare. Ecco perché esistono le subroutine. :) –
Impossibile inserirlo in una lib, poiché questa è la riga di codice che imposta la directory di inclusione per le librerie personalizzate. Inoltre, non voglio :) Ma penso che sia comunque una domanda interessante. – NXT