File Coverage

File:blib/lib/Geo/Address/Parser/Rules/NZ.pm
Coverage:84.2%

linestmtbrancondsubtimecode
1package Geo::Address::Parser::Rules::NZ;
2
3
2
2
2
390
2
34
use strict;
4
2
2
2
3
2
59
use warnings;
5
6 - 10
=head1 VERSION

Version 0.07

=cut
11
12our $VERSION = '0.07';
13
14
2
2
2
4
7
257
use Exporter 'import';
15our @EXPORT_OK = qw(parse_address);
16
17# NZ postcode: 4 digits
18my $postcode_re = qr/\b(\d{4})\b/;
19
20sub parse_address {
21
3
10
        my ($class, $text) = @_;
22
3
4
        return unless defined $text;
23
24
3
12
6
41
        my @parts = map { s/^\s+|\s+$//gr } split /,/, $text;
25
26
3
4
        my ($name, $road, $suburb, $city, $postcode);
27
28
3
60
        if ($parts[-1] =~ /(.+?)\s+($postcode_re)$/) {
29
3
5
                $postcode = $2;
30
3
3
                $parts[-1] = $1;        # keep city without postcode
31        }
32
33
3
5
        $city = pop @parts if @parts;
34
3
3
        $suburb = pop @parts if @parts;
35
3
4
        $road = pop @parts if @parts;
36
3
4
        $name = join(', ', @parts) if @parts;
37
38        return {
39
3
16
                name => $name,
40                road => $road,
41                suburb => $suburb,
42                city => $city,
43                postcode => $postcode,
44        };
45}
46
471;
48