Thanks all. Both parameters and boxes work for me with guile-3.0.9, which is what I run on my local machine.
>> I get the impression that you were asking this more for curiosity about how the language implementation works than to solve a problem I am trying to solve a problem. I have old code running on a remote server using guile-3.0.5. When I pull to local (guile-3.0.9) that code no longer works using 3.0.9. I find the problem is that globals are not properly exported. If I run my original test code on the server - works fine (without boxes, parameters). To clarify I am using: -------------testexport.scm begin---------------------------------- (define-module (testexport) #:use-module (ice-9 pretty-print) #:use-module (env) ) (define (main) (pretty-print (string-append "varA in main: " varA)) (pretty-print (string-append "varB in main: " varB)) (pretty-print (string-append "varC in main: " varC)) ) (main) -------------testexport.scm end---------------------------------- ------------env.scm begin----------------------------------- (define-module (env) #:use-module (ice-9 pretty-print) #:export(varA varB varC)) (define varA "A") (define varB "") (define varC "") (define testval "x") (cond ((string= testval "x") (set! varB "B")) ((string= testval "y") (set! varB "error")) ((string= testval "z") (set! varB "null")) ) (pretty-print (string-append "varB post cond: " varB)) (if (string= testval "x") (set! varC "C")) (pretty-print (string-append "varC post if: " varC)) -------------env.scm end---------------------------------- remote server running guile 2.2.7: admin@ip-172-31-16-153:~/testexport$ guile -L . ./testexport.scm ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0 ;;; or pass the --no-auto-compile argument to disable. ;;; compiling /home/admin/testexport/./testexport.scm ;;; compiling ./env.scm ;;; compiled /home/admin/.cache/guile/ccache/2.2-LE-8-3.A/home/admin/testexport/env.scm.go "varB post cond: B" "varC post if: C" ;;; compiled /home/admin/.cache/guile/ccache/2.2-LE-8-3.A/home/admin/testexport/testexport.scm.go "varA in main: A" "varB in main: B" "varC in main: C" admin@ip-172-31-16-153:~/testexport$ guile -v guile (GNU Guile) 2.2.7 Copyright (C) 2020 Free Software Foundation, Inc. License LGPLv3+: GNU LGPL 3 or later <http://gnu.org/licenses/lgpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. ----------------------------------------------------------------- remote server running guile-3.0.5: admin@ip-172-31-16-153:~/testexport$ /gnu/store/q8brh7j5mwy0hbrly6hjb1m3wwndxqc8-guile-3.0.5/bin/guile -L . ./testexport.scm ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0 ;;; or pass the --no-auto-compile argument to disable. ;;; compiling /home/admin/testexport/./testexport.scm ;;; compiling ./env.scm ;;; compiled /home/admin/.cache/guile/ccache/3.0-LE-8-4.4/home/admin/testexport/env.scm.go "varB post cond: B" "varC post if: C" ;;; compiled /home/admin/.cache/guile/ccache/3.0-LE-8-4.4/home/admin/testexport/testexport.scm.go "varA in main: A" "varB in main: B" "varC in main: C"