Попробуем написать программу для того, чтобы из командной строки получать взаимный курс любой пары валют.
Исходные данные: имеем API, возвращающее взаимный курс валют на любую запрошенную пару, например, USD/EUR. На выходе должны получить одно-единственное число — сегодняшний курс.
Пару валют предполагается вводить в командной строке как аргументы при запуске скрипта:
$ rate USD EUR
По умолчанию предполагается, что курс относится к рублю:
$ rate USD
Поскольку скрипт должен работать с любой современной версией языка, use 5.10 и say использовать не получится (а жаль).
#!/usr/bin/perl
Потребуется модуль для загрузки страницы с сервера:
use LWP::Simple;
Проверяем число аргументов в командной строке или печатаем пример использования:
if (length @ARGV < 1) {
print "Usage: rate FROM [TO]\n";
exit;
}
Если нашлолсь два аргумента, то считаем их запрашиваемой парой валют:
my ($from, $to) = @ARGV;
Отсутствующий второй аргумент заменяем валютой по умолчанию:
$to = 'RUB' unless $to;
API ожидает получить названия валют в верхнем регистре:
$from = uc $from;
$to = uc $to;
Делаем простую проверку на то, что коды валют более или менее правильные и содежат ровно три буквы (хотя это можно было сделать и до преобразования в верхний регистр):
unless ($from =~ /^[A-Z]{3}/ && $to =~ /^[A-Z]{3}/) {
print "Wrong currency code requested\n";
exit;
}
И, наконец, происходит запрос к API с нужными параметрами:
my $data = get("http://whoyougle.com/money/api/$from/$to");
Ответ приходит в виде XML, из которого регулярными выражениями (а зачем в таком простом примере делать сложнее?) отыскивается и выбирается число с курсом.
my ($result) = $data =~ /<value>(.*?)<\/value>/;
print "$result\n";
Просто? Да. Переносимо? Более или менее. Поймет ли начинающий? Однозначно.
P. S. II. В этой простой программе мне интересно было прежде всего то, как подойти к обучению перлу на реальных задачах, но при этом использовать минимум дополнительных компонентов, которые необходимо либо изучить, либо установить на компьютер до того, как удастся решить простейшие задачи. Об этом я как-нибудь напишу отдельно. Я днем и ночью думаю о том, как сделать перл доступным :-)
Андрей, по-моему, код надо сразу писать под use strict, это потом можно объяснить, что можно не использовать, а не наоборот.
Мой вариант:
use strict;
use LWP::Simple;
my $from = lc shift;
my $to = lc shift;
print join ' ', get("http://whoyougle.com/money/api/$from/$to") =~ /([^
Проверки опущены, твой сервис решает, что есть, а не прикладной код.