Ich glaube ich verstehe Deine Frage nicht ganz. Wenn eine Skalarvariable "zufällig" eine Referenz auf ein anderes Datenobjekt enthält, dann ist sie wohl oder übel eine Referenz. Wenn man in eine Variable einfach einen Stash schreibt, dann ist sie ein String. Wo soll da das Problem sein?
Wenn du wissen willst ob ref das tut, was du haben willst, probiere es doch einfach aus. Oder lies den Quellcode von Perl. Ich nehme mal an, dass ref die Flags eines Skalares analysiert um herauszufinden, ob es ein PV, IV, NV oder eben ein RV ist. Gib mal perldoc perlguts ein und suche nach SvROK und SvTYPE, da steht ein wenig mehr über das C-Interface zu Referenzen in Skalaren.
When C++ is your hammer, every problem looks like your thumb.