From b5dedee06b3a8fbec962fe23b0d474d7cf037a3d Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Sat, 19 Apr 2014 15:12:13 -0500 Subject: Perl: add step1_read_print, types. --- perl/printer.pm | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 perl/printer.pm (limited to 'perl/printer.pm') diff --git a/perl/printer.pm b/perl/printer.pm new file mode 100644 index 0000000..9741eda --- /dev/null +++ b/perl/printer.pm @@ -0,0 +1,33 @@ +package printer; +use feature qw(switch); +use strict; +use warnings; +use Exporter 'import'; +our @EXPORT_OK = qw( _pr_str ); + +use types qw($nil $true $false); + +sub _pr_str { + my($obj) = @_; + given (ref $obj) { + when(/^List/) { + return '(' . join(' ', map {_pr_str($_)} @$obj) . ')'; + } + when(/^Vector/) { + return '[' . join(' ', map {_pr_str($_)} @$obj) . ']'; + } + when(/^HashMap/) { + my @elems = (); + foreach my $key (keys %$obj) { + push(@elems, _pr_str(String->new($key))); + push(@elems, _pr_str($obj->{$key})); + } + + return '{' . join(' ', @elems) . '}'; + } + when(/^String/) { return '"' . $$obj . '"'; } + default { return $$obj; } + } +} + +1; -- cgit v1.2.3