indietro

  • splice ARRAY,SCOSTAMENTO,LUNGHEZZA,LISTA
  • splice ARRAY,SCOSTAMENTO,LUNGHEZZA
  • splice ARRAY,SCOSTAMENTO
  • splice ARRAY

    Rimuove da un array gli elementi indicati da OFFSET e LUNGHEZZA, e li sostituisce con gli elementi di LISTA, se specificata. In contesto di lista, restituisce gli elementi rimossi dall'array. In contesto scalare, restituisce l'ultimo elemento rimosso, o undef se nessun elemento viene rimosso. L'array si espande o rimpicciolisce come necessario. Se SCOSTAMENTO è negativo, allora esso viene considerato a partire dalla fine dell'array. Se LUNGHEZZA viene omesso, rimuove tutto da SCOSTAMENTO in poi. Se LUNGHEZZA è negativo, rimuove tutti gli elementi da SCOSTAMENTO in poi, tranne -LUNGHEZZA elementi alla fine dell'array. Se sia SCOSTAMENTO che LUNGHEZZA vengono omessi, rimuove tutto. Se SCOSTAMENTO è oltre la fine dell'array, perl emette un avvertimento, e unisce alla fine dell'array.

    Si hanno le seguenti equivalenze (assumendo $[ == 0 e $#a = $i>):

        push(@a,$x,$y)	splice(@a,@a,0,$x,$y)
        pop(@a)		splice(@a,-1)
        shift(@a)		splice(@a,0,1)
        unshift(@a,$x,$y)	splice(@a,0,0,$x,$y)
        $a[$x] = $y		splice(@a,$x,1,$y)

    Ad esempio, assumendo che le lunghezze degli array siano passate prima degli array:

        sub aeq {	# confronta due liste
    	my(@a) = splice(@_,0,shift);
    	my(@b) = splice(@_,0,shift);
    	return 0 unless @a == @b;	# stessa lunghezza?
    	while (@a) {
    	    return 0 if pop(@a) ne pop(@b);
    	}
    	return 1;
        }
        if (&aeq($lungh,@pippo[1..$lungh],0+@pluto,@pluto)) { ... }