From a1150c535cdcca2a6206c0e1bece5b3d4293dbf7 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Mon, 21 Apr 2014 22:37:41 -0500 Subject: Perl: add step9_interop with type conversion. --- perl/interop.pm | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 perl/interop.pm (limited to 'perl/interop.pm') diff --git a/perl/interop.pm b/perl/interop.pm new file mode 100644 index 0000000..44657ec --- /dev/null +++ b/perl/interop.pm @@ -0,0 +1,35 @@ +package interop; +use strict; +use warnings FATAL => qw(all); +use feature qw(switch); +use Exporter 'import'; +our @EXPORT_OK = qw( pl_to_mal ); +use Scalar::Util qw(looks_like_number); + +use types; + +sub pl_to_mal { + my($obj) = @_; + given (ref $obj) { + when(/^ARRAY/) { + my @arr = map {pl_to_mal($_)} @$obj; + return List->new(\@arr); + } + when(/^HASH/) { + my $hsh = {}; + foreach my $key (keys %$obj) { + $hsh->{$key} = pl_to_mal($obj->{$key}); + } + return HashMap->new($hsh) + } + default { + if (looks_like_number($obj)) { + return Integer->new($obj); + } else { + return String->new($obj); + } + } + } +} + +1; -- cgit v1.2.3