Hello Kevin,

if I anderstand you correctly, several your Cache systems (development, life, ...) will store their files on a third server (possibly on a file server) and you want to put the files from each (source) Cache (instance) into a different (target) folder, where the folder name being the "name" of the source Cache system - am I correct?

If yes, I think, your best choice ist:


or, as John Murray suggested


or just a fixed string like


You can put (John's) GUID or my "fixed string"
in a (possibly system) Global like ^%Zconfig("path")=...

Things like MAC- or IP-Addresses can change more often then you think. Especially IP-Addresses will change, hence are there DNS servers.

On the other hand, it's uncommon to change host- or instance names (of Cache or of whatever installation).

Your IP-Address preference has an other downside too. Many servers have more then one IP-Address (and if they do not have one today, maybe tomorrow!).

If you persist to take the systems IP-Address, here is, what you wanted:

set iplist = $system.INetInfo.GetListOfConfiguredInterfaces(0)
for i = 1:1:$listlength(iplist) zw $list(iplist,i)

Regards and
have a nice day

You are comparing apples wih oranges!

The line  (your case 1):

set dat=$lg(^TestD(id))    //dat=$lb("a","b","c","d","e")

sets dat to the FIRST list item (if present, or to "", if the list item is NOT present) of ^TestD(id)  but ONLY if ^TestD(id) is defined AND it is a Cache list.

In elsecase, you will get an <UNDEF> if ^TestD(id) does not exists or an <LIST> error, if ^TestD(id) exists but the content is not a list!

The line (your case 2):

 set dat=$g(^TEST2(id))   //dat = "a#b#c#d#e"

sets dat to the content of ^TEST2(id) , if  it exists or to "", if there is no ^TEST2(id)

If you want to compare collections, then you have to know what do you compare.
Let look on this examples:

1) Hobbies
   old: music, sport
   new: sport, music
   One could say, there is no difference (if all hobbies are equally preferred) 
2) Work instructions
   old: format_disk, create_backup
   new: create_backup, format_disk
   In this example, if the work is done in a wrong sequence, the data are lost.

In other words, if you compare collections, you have to take in account the
importance or unimportance of sequencies, which means, the compare function
needs a third input argument

compare(old, new, relyOnSequence, ...)

By the way, your test() method has his very special "point of view" of lists:

set old1=$lb("blue","red","green"),    new1=$lb("green","red","blue")
set null=$lb("", "", "")

do ##class(...).test(old, new, .add, .del) write add=nul, del=nul --> 11
do ##class(...).test(old, old, .add, .del) write add=nul, del=nul --> 11
do ##class(...).test(nul, nul, .add, .del) write add=nul, del=nul --> 11

Is this an expected behavior?

Class your.class
Property Colors As list Of %String;

ClassMethod toJson(list) As %String [ SqlProc ]
    s json=""
    f i=1:1:$ll(list) {
        s:i>1 json=json_"," s item=$lg(list,i)
        if '$ld(list,i) { s json=json_"null" }
        elseif item="" { s json=json_"""""" }
        elseif $lv(item) { s json=json_..toJson(item) }
        elseif $num(item,".")=item { s json=json_$fn(item,"N") }
        else {
            f c="\","/","""",$c(8),$c(9),$c(10),$c(12),$c(13) s item=$replace(item,c,"\"_$tr(c,$c(8,9,10,12,13),"btnfr"))
            f  q:'$locate(item,"[:cntrl:]",0,j,v)  s $e(item,j-1)="\u"_$e($zh($a(v)+65536),2,5)
            s json=json_""""_item_""""
    q "["_json_"]"

select your.class_toJson(Colors) from your.class

gives you the expected result . If you prefer  a direct  use of globals, then use

write ##class(your.class).toJson($lg(^your.global(theOID),theSlotNumber))