From 89bd4de1e2704c1bc562788b2c5e4fc08b71a538 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Wed, 23 Apr 2014 21:46:57 -0500 Subject: Perl: add vector, hash-map, metadata, atom support. TCO let* - Changes all collections to be one level of inderection where the top level is always a hash containing 'meta' and 'val'. --- perl/reader.pm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'perl/reader.pm') diff --git a/perl/reader.pm b/perl/reader.pm index cd1e19d..e49d5a1 100644 --- a/perl/reader.pm +++ b/perl/reader.pm @@ -81,6 +81,12 @@ sub read_form { read_form($rdr)]) } when('~@') { $rdr->next(); List->new([Symbol->new('splice-unquote'), read_form($rdr)]) } + when('^') { $rdr->next(); my $meta = read_form($rdr); + List->new([Symbol->new('with-meta'), + read_form($rdr), $meta]) } + when('@') { $rdr->next(); List->new([Symbol->new('deref'), + read_form($rdr)]) } + when(')') { die "unexpected ')'" } when('(') { return read_list($rdr, 'List') } when(']') { die "unexpected ']'" } @@ -94,7 +100,8 @@ sub read_form { sub read_str { my($str) = @_; my @tokens = tokenize($str); - #print join(" / ", @tokens) . "\n"; + #print "tokens: " . Dumper(\@tokens); + if (scalar(@tokens) == 0) { die BlankException->new(); } return read_form(Reader->new(\@tokens)); } -- cgit v1.2.3