Commit | Line | Data |
---|---|---|
a1150c53 JM |
1 | package interop; |
2 | use strict; | |
3 | use warnings FATAL => qw(all); | |
01c97316 | 4 | no if $] >= 5.018, warnings => "experimental::smartmatch"; |
a1150c53 JM |
5 | use feature qw(switch); |
6 | use Exporter 'import'; | |
7 | our @EXPORT_OK = qw( pl_to_mal ); | |
8 | use Scalar::Util qw(looks_like_number); | |
9 | ||
10 | use types; | |
11 | ||
12 | sub pl_to_mal { | |
13 | my($obj) = @_; | |
14 | given (ref $obj) { | |
15 | when(/^ARRAY/) { | |
16 | my @arr = map {pl_to_mal($_)} @$obj; | |
17 | return List->new(\@arr); | |
18 | } | |
19 | when(/^HASH/) { | |
20 | my $hsh = {}; | |
21 | foreach my $key (keys %$obj) { | |
22 | $hsh->{$key} = pl_to_mal($obj->{$key}); | |
23 | } | |
24 | return HashMap->new($hsh) | |
25 | } | |
26 | default { | |
27 | if (looks_like_number($obj)) { | |
28 | return Integer->new($obj); | |
29 | } else { | |
30 | return String->new($obj); | |
31 | } | |
32 | } | |
33 | } | |
34 | } | |
35 | ||
36 | 1; |