in reply to Open Function Question

This is just conjecture, but I think what is happening is that in the second case you are stringifying your reference.

The terms after the open are just an argument list. By using the 2-argument form of open, you are creating a string that looks like < SCALAR(0x182f4c4). Open then takes that string and looks for a file named SCALAR(0x182f4c4), which presumably does not exist on your system. This is in contrast to three argument form, where you actually pass the reference to the variable.