# Splicing Lists > [HTML Version](splicinglists.htm) One or more elements from one list can be spliced on to another using the dot statement .SPLICE. Note no elements are actually allocated or deleted in this operation; they are just moved from the source list to the destination list. The general syntax for the .SPLICE statement is: **.SPLICE dst-list-ref, src-list-ref \{, count\} \{, dstpos\}** _dst-list-src, src-list-ref _ specify the destination and source lists, respectively, either as base arrays (e.g. _\$m()_ or as explicit iterator references (e.g. _.REF(\$\$i)._ _count _ specifies the number of elements to move (defaulting to the entire _src-list-ref_) _dstpos _ specifies the splice position within the destination list, according to the following: | **Value** | **Meaning** | |------|------| | \-1 (default) | end of the destination list | | 0 | the start of the destination list | | n (n > 0) | after the nth item in the destination list | Note that the dstpos parameter only applies when the destination list is expressed as a base array, e.g. \$m(). Attempting to specify dstpos when the destination is expressed as an iterator or other individual element reference, e.g. .REF(\$\$i), will result in a syntax error. **Example1** If _\$kids()_ contains the list: "john", "fred", "sally", "pilar", and \$pets() contains the list "dog", "cat", "mouse", "lizard", then: .SPLICE \$kids(), \$pets(), 1, 0 would splice "dog" to the start of the \$kids() array. .SPLICE \$kids(), \$pets(), 3, 2 would splice the first 3 pets ("dog", "cat", "mouse") after the 2nd kid, i.e. in between "fred" and "sally". .SPLICE \$kids(), \$pets(), 0, -1 would be the same as .SPLICE \$kids(), \$pets() i.e. would splice all of the pets (count=0), to the end of the kids (-1). .SPLICE \$kids(), \$pets(), 0, 0 would splice all of the pets to the start of the kids array. **Example2** To splice _from_ the middle of the source list, specify a position via an iterator reference. For example, to move the 3rd and 4th items from _\$m2()_ to the end of _\$m1()_ ... count = 0 foreach \$\$i in \$m2() count += 1 if count = 3 then \! 3rd iterated item .SPLICE \$m(), .REF(\$\$i), 2 \! splice 3rd \& 4th items exit \! iterator corrupted after splice\! must exit\! endif next \$\$i The _.REF(\$\$i)_ iterator technique also works for the destination, i.e. to insert at a destination other than the end of the target list. To splice from an arbitrary Xth position in the source to the Yth position in the destination, use a double-nested [FOREACH](foreach.htm.md) loop: \! splice count elements from position srcpos in m1\$() to dstpos in m2\$ idst = 0 \! counter for dest position foreach \$\$i in \$m2() idst += 1 if idst >= dstpos then \! \$\$i is the dst splice-to position isrc = 0 foreach \$\$j in \$m1() isrc += 1 if isrc >= srcpos \! \$\$j is the src splice-from position .splice .ref(\$\$i), .ref(\$\$j), count exit \! must exit after splice\! endif next \$\$j exit \! must exit after splice\! endif next \$\$i Note that as with other modifications to a collection, the use of .SPLICE corrupts the iterator; thus you must exit from the [FOREACH](foreach.htm.md) loop after the .SPLICE operation. In the above example, we have to exit from both loops. **History** 2016 October, A-Shell 1532: .SPLICE now accepts limited use of a reverse iterator, but only when the count is 1. Also, the third argument, count, can be any numeric expression. **Subtopics** - [SPLICE Parameter DSTPOS](spliceparameterdstpos.htm.md)