diff options
| author | Joel Martin <github@martintribe.org> | 2014-04-21 22:37:41 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-04-21 22:37:41 -0500 |
| commit | a1150c535cdcca2a6206c0e1bece5b3d4293dbf7 (patch) | |
| tree | 0212ac194ab97abf098f0a53b55d5a55f47be770 /perl/interop.pm | |
| parent | b50cb97c27d4047aa843b4f1369c39e075f33bee (diff) | |
| download | mal-a1150c535cdcca2a6206c0e1bece5b3d4293dbf7.tar.gz mal-a1150c535cdcca2a6206c0e1bece5b3d4293dbf7.zip | |
Perl: add step9_interop with type conversion.
Diffstat (limited to 'perl/interop.pm')
| -rw-r--r-- | perl/interop.pm | 35 |
1 files changed, 35 insertions, 0 deletions
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; |
