It's all down to scope.

The following is a better solution as it avoids exposing the variables in the function:
code:
Break ON 

Report(InitialiseVariables())

Function InitialiseVariables()
Dim $PCsetting[4]
$PCsetting[1]='one'
$PCsetting[2]='two'
$PCsetting[3]='three'
$InitialiseVariables=$PCSetting
EndFunction

Function Report($PCSetting)
For Each $element In $PCsetting
$element ?
Next
EndFunction

If you really need the array to have a global scope then the following works:
code:
Break ON 

GLOBAL $PCSetting
$PCSetting=InitialiseVariables()
Report()

Function InitialiseVariables()
Dim $PCsetting[4]
$PCsetting[1]='one'
$PCsetting[2]='two'
$PCsetting[3]='three'
$InitialiseVariables=$PCSetting
EndFunction

Function Report()
For Each $element In $PCsetting
$element ?
Next
EndFunction

Don't forget the array subscript starts at zero, not one.

[ 03 May 2002, 12:36: Message edited by: Richard Howarth ]