split serve per separare e genera un array (lo si usa anche in javascript):

se avessi scritto

@prova = split(/ls\n/,$var);

avrei ottenuto un array contenente gli elementi divisi da "ls\n"
Mettendolo così invece:

$quanti_ls = split(/ls\n/,$var)-1;

la variabile rappresenta il numero degli elementi da cui naturalmente devi togliere l'ultimo poichè non è seguito da un "ls\n"!

Per quanto riguarda il ciclo normalmente io faccio così:
1) genero un array contenente le variabili:
@variabili=("ls","cd", ....);

2) poi faccio un ciclo sull'array:
foreach $variabile(@variabili)
{
#qui scrivo:
$mom="quanti_$variabile"; #serve per definire il nome della variabile in uscita (es. $quanti_ls)
${$mom}= split(/$variabile\n/,$var)-1;
}

3) Così sei a posto.
Attento però, accertati che il tuo compilatore perl non sia vecchissimo perchè altrimenti non considererebbe la forma ${$mom}!