aboutsummaryrefslogtreecommitdiff
path: root/perl/interop.pm
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-04-21 22:37:41 -0500
committerJoel Martin <github@martintribe.org>2014-04-21 22:37:41 -0500
commita1150c535cdcca2a6206c0e1bece5b3d4293dbf7 (patch)
tree0212ac194ab97abf098f0a53b55d5a55f47be770 /perl/interop.pm
parentb50cb97c27d4047aa843b4f1369c39e075f33bee (diff)
downloadmal-a1150c535cdcca2a6206c0e1bece5b3d4293dbf7.tar.gz
mal-a1150c535cdcca2a6206c0e1bece5b3d4293dbf7.zip
Perl: add step9_interop with type conversion.
Diffstat (limited to 'perl/interop.pm')
-rw-r--r--perl/interop.pm35
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;