Die ISO 3166 ist ein Standard für die Kodierung von geographischen Einheiten, aka Ländern. Jedem Land werden drei Codes zugeordnet: Ein zweistelliger Ländercode (ALPHA-2), ein dreistelliger Ländercode (ALPHA-3) und ein numerischer Ländercode (NUMERIC).
Diese Ländercodes können in der ISO-3166-1-Kodierliste nachgeschlagen werden. Beispielsweise sind Deutschland (Germany) folgende Codes zugeordnet:
- DE (ALPHA-2)
- DEU (ALPHA-3)
- 276 (NUMERIC)
Locale::Countryvon Neil Bowers ermöglicht den Zugriff auf die Ländercodes gemäß ISO 3166.
Über die der Konstanten LOCALE_CODE_ALPHA_2, LOCALE_CODE_ALPHA_3 und LOCALE_CODE_NUMERIC teilt man den Funktionen code2country() bzw. country2code() mit, welcher der drei Codes verwendet werden soll. Ohne diese Angabe wird automatisch LOCALE_CODE_ALPHA_2 verwendet.
Mit Hilfe dieses Moduls lässt sich z.B. leicht prüfen, ob ein gültiger ISO-Code vorliegt.
#!/usr/bin/perl use strict; use warnings; use Locale::Country; $| = 1; # turn off buffering ########################################################### print "Bitte zweistelligen Ländercode eingeben: "; chomp(my $code = <STDIN>); my $country = code2country($code); # LOCALE_CODE_ALPHA_2 implizit if (defined $country) { print "$code = $country\n"; } else { print "'$code' ist kein gültiger Ländercode!\n"; } ########################################################### print "Bitte dreistelligen Ländercode eingeben: "; chomp($code = <STDIN>); $country = code2country($code, LOCALE_CODE_ALPHA_3); if (defined $country) { print "$code = $country\n"; } else { print "'$code' ist kein gültiger Ländercode!\n"; } ########################################################### print "Bitte dreistelligen numerischen Ländercode eingeben: "; chomp($code = <STDIN>); $country = code2country($code, LOCALE_CODE_NUMERIC); if (defined $country) { print "$code = $country\n"; } else { print "'$code' ist kein gültiger Ländercode!\n"; } ###########################################################
Wenn man das Programm als localecountry.pl speichert und anschließend auf der Kommandozeile aufruft, ergibt sich beispielsweise folgende Ausgabe.
per localecountry.pl Bitte zweistelligen Ländercode eingeben: DE DE = Germany Bitte dreistelligen Ländercode eingeben: DEU DEU = Germany Bitte dreistelligen numerischen Ländercode eingeben: 276 276 = Germany
Aus dem Namen eines Landes lassen sich leicht die zugehörigen Ländercodes ermitteln. Gleichzeitig lässt sich prüfen, ob der Name des Landes der ISO 3166 entspricht.
#!/usr/bin/perl use strict; use warnings; use Locale::Country; $| = 1; # turn off buffering print "Bitte den Namen eines Landes eingeben: "; chomp(my $country = <STDIN>); my $code = country2code($country); # LOCALE_CODE_ALPHA_2 implizit if ( defined $code ) { print "$country = $code\n"; } else { print "'$country' ist kein gültiger Name!\n"; exit; } $code = country2code($country, LOCALE_CODE_ALPHA_3 ); print "$country = $code\n"; $code = country2code($country, LOCALE_CODE_NUMERIC ); print "$country = $code\n";
Wenn man das Programm als localecountry2.pl speichert und anschließend auf der Kommandozeile aufruft, ergibt sich beispielsweise folgende Ausgabe.
perl localecountry2.pl Bitte den Namen eines Landes eingeben: Germany Germany = de Germany = deu Germany = 276
Jetzt kommentieren