Just some random thoughts about self-referential structures
and their literal representations:

$ perl -MData::Dumper -e '$a=[1,\$a]; print Dumper($a)'
$VAR1 = [
         1,
         \$VAR1
       ];

$ perl -MYAML -e '$a=[1,\$a]; print Dump($a)'
--- &1
- 1
- !perl/ref:
 =: *1

$ pugs -e 'my @a = (1,[EMAIL PROTECTED]); say @a.perl'
$_ := [1, \$_]

So the current pugs implementation is using $_ at compile time to
stitch the value together, is that right?

(Does the $_ binding need to be local/temp, even with $_'s new scoping
and the fact that this is a compile time thing?)

Are there any situations where a yaml-like literal representation
has an advantage over one that requires binding code?

The two main use cases would proabably be debugging and serialization.
For debugging .perl's fine, although many indirections in a more complex
structure may be tougher to decipher than a yaml style label.

Deserialization requires an eval anyway (unless there's some yet-to-be-invented hook to parse and return a literal only)
so the binding doesn't seem to matter.  The .perl method is
unlikely to be the serialization method of choice anyhow.

Nevertheless, I have a vague feeling that the YAML approach may be better in some way...

For another perspective:

$ python -c 'a=[1]; a.append(a); print repr(a)'
[1, [...]]

Ahem, time for the appropriate signature,
Brad

--
There are times when a person gets carried away and talks on without
thinking too much. But this can be seen by observers when one's mind is
flippant and lacking truth. -- Hagakure http://bereft.net/hagakure/

Reply via email to