Perl 5.12.1
Версия реализации Perl языка программирования PerlВерсия языка Perl.
Примеры:
Hello, World! - Perl (177):
print "Hello, World!\n";
Факториал - Perl (179):
Используется функция reduce
из модуля List::Util
. Дополнительная единица в начале списка добавлена для того, чтобы пример работал даже тогда, когда список 1..$n пуст, т.е. при $n=0.
use List::Util qw(reduce);
sub fact {
my $n = shift;
reduce { $a * $b } 1, 1 .. $n
}
foreach my $i (0..16) {
print "$i! = ", fact($i), "\n";
}
Факториал - Perl (180):
Используется рекурсивное определение факториала. Не совместим с Perl 6.
sub fact {
my $n = shift;
$n == 0 ? 1 : $n*fact($n-1);
}
foreach my $i (0..16) {
print "$i! = ", fact($i), "\n";
}
Факториал - Perl (181):
Используется итеративное определение факториала. Не совместим с Perl 6.
sub fact {
my $n = shift;
my $result = 1;
foreach my $i (1 .. $n) {
$result *= $i;
}
$result
}
foreach my $i (0..16) {
print "$i! = ", fact($i), "\n";
}
Числа Фибоначчи - Perl (183):
Используется рекурсивное определение чисел Фибоначчи.
sub fibonacci {
my $n = shift;
$n < 3 ? 1 : fibonacci($n-1) + fibonacci($n-2)
}
foreach (1..16) {
print fibonacci($_), ", ";
}
print "..."
Квадратное уравнение - Perl (208):
В Perl 6 нет обратной совместимости, поэтому этот пример не работает в Perl 6.
$A = <>;
if ($A == 0) {
print "Not a quadratic equation.";
}
else {
$B = <>;
$C = <>;
$D = $B * $B - 4 * $A * $C;
if ($D == 0) {
print "x = ", -0.5 * $B / $A;
}
else {
if ($D > 0) {
print "x1 = ", 0.5*(-$B + sqrt($D))/$A, "\nx2 = ", 0.5*(-$B - sqrt($D))/$A
}
else {
print "x1 = (", -0.5*$B/$A, ",", 0.5*sqrt(-$D)/$A, ")\nx2 = (", -0.5*$B/$A, ",", -0.5*sqrt(-$D)/$A, ")\n"
}
}
}
CamelCase - Perl (402):
В этом примере строка разбивается на части, разделенные небуквенными символами, затем к каждой части применяется функция ucfirst
, переводящая ее в нужный регистр (команда map
), и, наконец, все части конкатенируются командой join
.
my $text = <STDIN>;
$text = join('', map(ucfirst, split(/[^a-z]+/, lc $text)));
print $text, "\n";
CamelCase - Perl (347):
Первая строка читает строку для обработки. Вторая — заменяет все не-буквы на пробелы; для этого используется операция замены регулярных выражений c опцией g
, которая ищет все соответствия паттерну в строке. Третья строка переводит в верхний регистр первую букву каждого слова и в нижний — следующие буквы. Паттерн \b(\w+)\b
соответствует максимальному одиночному слову (окруженному со всех сторон пробелами). Переменная $1
в выражении замены содержит слово, соответствующее паттерну. Выражение замены ucfirst($1)
в сочетании с опцией /e
заменяет слово на результат вычисления этой функции от него (/e
активирует интерполяцию переменных в строке). Наконец, четвертая строка удаляет все пробелы из строки.
Во всех действиях с регулярными выражениями используется оператор привязки =~
, который позволяет применять их к произвольной переменной, а не к переменной по умолчанию $_
.
$A = <>;
$A =~ s/[^a-zA-Z]+/ /g;
$A =~ s/\b(\w+)\b/ucfirst($1)/ge;
$A =~ s/[ ]+//g;
print $A;
CamelCase - Perl (403):
Этот пример работает так же, как этот, но для разбития строки на слова используется регулярное выражение, выделяющее максимальные последовательности букв
my $text = <STDIN>;
$text = join('', map(ucfirst, lc($text) =~ /[a-z]+/g));
print "$text\n";
Комментарии
]]>blog comments powered by Disqus
]]>