← All posts tagged Perl

teferi

Жуйк, какой в стандартной поставке перла есть модуль для разбора конфигов? Тоесть чтобы гарантировано — есть перл — есть модуль.

teferi

все-таки что мне не нравится в pyhton что есть в перл — так это то что в перле не нужно расставлять скобки, чтобы передать в функцию аргументы =) уж очень лениво мне их ставить ))))

teferi

Я заранее извиняюсь, но уж очень забавно =) может боян, к тому же написано не очень красиво но и не мной слава богу(хоть я чуть и поправил) =) в общем скрипт для мерянья пиписьками )))

$ cat chlen.pl
#!/usr/bin/perl

use strict;

sub chlen{
return ' 8' . '=' x $_[0] . "D\n";
}

`uptime`=~/(\d+)\sdays/ and print "Uptime (days): " . chlen($1) or die "Could not run uptime";
`free | grep Mem`=~/(\d+)/ and print "Memory (MB/20):" . chlen($1/20000) or die "Could not run free";
`cat /proc/cpuinfo | grep MHz`=~/(\d+)/ and print "CPU (MHz/50): " . chlen($1/50) or die "Could not cat cpuinfo";
`uname -r`=~/(\d+)\.(\d+).(\d+)/ and print "Kernel version:" . chlen(($2*10+$3)/2) or die "Could not run uname";

my @df = `df -P -k -x nfs` or die "Could not run df\n";
shift @df;
my ($size, $blocks);
for (@df) {
my ($fs, $blocks) = split;
$blocks *= 2 if $fs =~ m!/scsi|/sd!;
$size += $blocks/1024/750;
}

print "Num. processes:" . chlen(`ps ax|wc -l`/2);
print "Load average: " . chlen(`cat /proc/loadavg|cut -f 1 -d ''`*100);
print "Disk space: " . chlen($size/50);

teferi

Продолжение выползания из зимней спячки. Узнал про оператор ~~ он же smart matching. Море восторгов. Девушки бросают в воздух чепчики, суровые бородатые дяди утирают скупую слезу умиления...

teferi

Узнал что в перл есть нормальный switch. Не тот который в CPAN а тот который в use feature qw(switch); given/when называется =)

my $z = 1;
given ($z) {
when ( 1 ) {
print "z equals 1!\n";
}
default {
print "z is not 1 it's — $z\n";
}
}

Прям-таки человечьим голосом молвит! Люблю когда код на перле напоминает связную речь =)

teferi

проблема оказалась в модуле Crypt::RSA. Вот в таких 2х строчках
use FindBin qw($Bin);
use lib "$Bin/../../lib";
Не очень понятно зачем они там. Закомментить их конечно можно и все даже станет работать, но письмо автору модуля написал.

teferi

надо на выходных заставить себя разобраться в каком месте установка Net::SSH::Perl и deb пакет чтоли собрать. А то как-то не красиво — даже из cpan'а не получается поставить из-за Math::Pari...

teferi

Изучали функциональные возможности перла и питона. Задача — посчитать \sum_{x=i}^n f(g(x)). Пользоваться при вычислении суммы императивщиной запрещалось.
Решение для пайтон — всё нашлось из коробки =)
$ cat tst.py
#!/usr/bin/python

X = range(1,11)
i,n = 5,9
print reduce(lambda x,y: x+y, map(lambda x: 1./x, map(lambda x: x**2, X[i:n+1])))
Решение для перл — к сожалению пришлось ставить Language::Functional ради foldl

$ cat tst.pl
#!/usr/bin/perl -w

use Language::Functional ':all';
use strict;

my @arr = 1..10;
my ($i, $n) = (5,9);

print my $x = foldl1 {shift() + shift()} [map {1/$_} (map {$_**2} @arr[$i..$n])];

Результаты работы:
$ python tst.py
0.0861566200554
$ perl -l tst.pl
0.0861566200554296