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
Siehe auch