# MLIST Parameter Passing > [HTML Version](mlistparameterpassing.htm) MLISTs can be passed by reference to functions and procedures. This is similar to the way it works with [Ordered Maps](orderedmaps.htm.md) except that with MLISTs there is also a variation for passing sublists. To pass a regular MLIST to a function or procedure, use the following syntax (nearly identical to that for ORDMAPs except for the "AS" clause): call Proc( \$m() ) \! passing the entire \$m list by reference Procedure Proc( \$mloc() as MLIST(varstr) ) \$mloc(.PUSHBACK) = "new element" EndProcedure The above example adds the element "new element" to the MLIST \$m(). Note that the local list \$mloc() is effectively just an alias for the \$m() list. As with passing ORDMAP arrays and other [DIMX](dynamic_arrays_(dimx).htm.md) arrays by reference, you have to initialize the array first in the calling routine. The pre-initialization requirement does not apply to sublists though, which are automatically initalized when passing them to another routine: call Proc( \$m(.back).SUBLIST ) In the above example, the sublist for the last element of the \$m() list is passed to the Proc procedure (given in the previous example). Note that the procedure does not know, or care, that the caller passed a sublist rather than an MLIST base reference; they are indistinguishable from the perspective of the procedure. Also note that since the sublist gets auto-initialized if necessary, the same syntax works regardless of whether the sublist initially exists. You can also pass a sublist of an iterator, e.g. foreach \$\$i in \$m() if \$\$i = "something" then call Proc(\$\$i.sublist) endif next \$\$i In the above example, for each element in the MLIST \$m() whose value is "something", we pass the sublist to the Proc procedure, which adds a "new element" to the end of that sublist.