Site Tools


perl

Тот кто плохо вел себя в этой жизни, в следующей жизни будет perl программистом.

Ссылки

www.spravkaweb.ru/perl/specialvar - большинство специальных переменных
http://perldoc.perl.org/functions/-X.html – буквенные чеки
http://www.tutorialspoint.com/perl/perl_regular_expression.htm – действия через regexp

Модули

Проверяем наличие:

perl -MTerm::Size
perl -MCarp::Assert 

Устанавливаем

cpan -i Term::Size
cpan -i Carp::Assert 

Устанавливаем в non-root директорию

original: http://openwall.info/wiki/internal/perl/cpan

How to install and use CPAN modules as a non-root user

It is often preferable to install CPAN modules under a (pseudo-)user account. This avoids having to run any CPAN code as root, makes the install of an application along with its required CPAN modules portable across (similar) systems, and keeps the underlying system “clean”. It's done roughly as follows:

mkdir ~/perl
export PERL5OPT="-I${HOME}/perl/lib/perl5 -I${HOME}/perl/lib/perl5/site_perl"
cpan

You may have to type perl -MCPAN -e shell instead of cpan on some systems other than Owl.

In response to the appropriate prompt, enter PREFIX=~/perl.

Once in the CPAN shell, type install MODULE, where MODULE is the name of the module to install.

In order for Perl scripts to use modules installed in this way, at least _one_ of the following must be true:

1. PERL5OPT be set to imply the appropriate -I… options to Perl. You can add the following line to ~/.bashrc:

export PERL5OPT="-I${HOME}/perl/lib/perl5 -I${HOME}/perl/lib/perl5/site_perl"
This should work great for scripts invoked manually while logged in.

2. The appropriate -I… options be passed to perl explicitly. This may be done by editing the first line of Perl scripts to become:

#!/usr/bin/perl -I/home/.../perl/lib/perl5 -I/home/.../perl/lib/perl5/site_perl

(also include any other options to perl that the script might have already been using).

3. A use lib … directive may be added to the Perl scripts:

use lib qw(/home/.../perl/lib/perl5 /home/.../perl/lib/perl5/site_perl);

Naturally, the last two options are only needed for CGIs where we couldn't have conveniently set PERL5OPT.

4. А далее:

find ./ -type f -name '*.pl' -exec perl -pi -e 's/#!\/usr\/bin\/perl/#!\/usr\/bin\/perl -I\/home\/u\/user\/perl\/lib\/perl5 -I\/home\/u\/user\/perl\/lib\/perl5\/site_perl/g' '{}' \;

Код

use common::Config;
Инклуд common/Config.pm
$common::Config::server_use
Использование переменной $server_use из common/Config.pm
1;
Возвращать код выполнения.
BEGIN{}
END{}
выполнение кода в начале и конце обработки.
sub signal_handler
{
    ... some
}

$SIG{INT} = $SIG{TERM} = \&signal_handler;
Обработка сигналов в функции.
use File::Temp qw(tempfile tempdir);
Подгружает функции tempfile и tempdir из File::Temp
Сама qw() возвращает лист из полученных слов с пробельным разделителем.
my @names = ('Kernighan', 'Ritchie', 'Pike');
идентично
my @names = qw(Kernighan Ritchie Pike);
q(some test); эквивалентно "some test"
# Function definition
sub Average{
   # get total number of arguments passed.
   $n = scalar(@_);
   $sum = 0;

   foreach $item (@_){
      $sum += $item;
   }
   $average = $sum / $n;

   print "Average for the given numbers : $average\n";
}
# Function call
&Average(10, 20, 30);
Пример функции и аргументов. @_ поочерерди вытаскивает аргументы. Сначала $_[0], потом $_[1] и т.д.
use Data::Dumper;
print Dumper $date
Аналог var_dump
() список
{}
@variable		# массив для хранения списка 
$variable		# скаляр для хранения строки или числа
@empty = (); # пустой массив после присвоения пустого списка
@months = (1 .. 12); # массив со списком номеров месяцев 
@days = qw(Пн Вт Ср Чт Пт Сб Вс); # массив дней недели
@week = @days; # копирование значения массива @days в @week
@array = 25; # литерал 25 рассматривается как список (25)
($first) = @array; # в $first скопируется 1-й элемент массива
@first = @second = (1, 2, 3); # каскадное присваивание

@ at символ означает, что это массив. Может одновременно сосуществовать @var и $var

@x - хранит список ЗHАЧЕHИЙ
$x - хранит ЗHАЧЕHИЕ (число или строку)
%x - хранит список пар строка->ЗHАЧЕHИЕ

@a = (1,2);
$a = [ (1,2) ];  # квадратные скобки превращают массив/хеш в ССЫЛКУ на массив
%b = (1=>2);
$b = { (1=>2) }; # фигурные скобки превращают массив/хеш в ССЫЛКУ на хеш
next == continue в других языках
until(bool) выполняем пока не true
unless(bool) выполнить, если не true
eval{}  альтернатива try{} в других языках
Если во время выполнения eval возникает исключительная ситуация, то eval возвращает undef, и помещает в переменную $@ текст произошедшей ошибки.
eval {
      require PDF::API3;
};
if ($@) {
      print "Need install module PDF::API3";
}
eval может выполнять строковые выражения, другими словами соответствуя eval в других языках:

eval "require $ARGV[0]";
if ($@) {
        print "Need install $ARGV[0] \n\n";
}
if($string =~ /Pattern/) 
Проверяет, что в $string присутствует регулярка Pattern. Другими словами, оператор LIKE
$a !~/Pattern/ as "a not like Pattern".
$1 - первый результат от регэксп. К прмеру:
$text = "some text";
$text =~ m/(s.+?)/;
$1; #тут получим "so"
Именованный массив
my $fqdns_conf = {};
$fqdns_conf->{'domainName1'} = 'test1';
$fqdns_conf->{'domainName2'} = 'test2';
print Dumper $fqdns_conf->{'domainName1'};
line1 = <>;
Читает либо:
1. STDIN
2. Переданные в файл аргументы с пробелом в качестве разделителя
3. Построчно содержимое переданных файлов. Содержимое передается с помощью аргумента или внутри ромба.
$handles->{'TestKey1'} = "TestVar1";
$handles->{'TestKey2'} = "TestVar2";
$handles->{'TestKey3'} = "TestVar3";

foreach my $key (keys %$handles) {
      print Dumper $key;
}

$VAR1 = 'TestKey1';
$VAR1 = 'TestKey2';
$VAR1 = 'TestKey3';
Разница между $handles и %$handles
$handles:
$VAR1 = {
        'TestKey1' => 'TestVar1',
        'TestKey2' => 'TestVar2',
        'TestKey3' => 'TestVar3'
 };
 
 
 %$handles:
 $VAR1 = 'TestKey1';
 $VAR2 = 'TestVar1';
 $VAR3 = 'TestKey2';
 $VAR4 = 'TestVar2';
 $VAR5 = 'TestKey3';
 $VAR6 = 'TestVar3';
    my %hash = ();
  $hash->{'test'} = 'test0';
  my $hash_ref = \%hash;

  $hash_ref->{'count_domain'}       = 'test1';
  $hash_ref->{'count_request'}      = 'test2';
  $hash_ref->{'count_all_domain'}   = 'test3';
  $hash_ref->{'count_all_request'}  = 'test4';

print Dumper %hash;

Вывод:
$VAR1 = 'count_all_domain';
$VAR2 = 'test3';
$VAR3 = 'count_domain';
$VAR4 = 'test1';
$VAR5 = 'count_all_request';
$VAR6 = 'test4';
$VAR7 = 'count_request';
$VAR8 = 'test2';
my ($DAY, $MONTH, $YEAR) = (localtime)[3,4,5];
Получение нескольких значений из массива

Discussion

Constantin Conovaloff, 2014/10/06 16:36

ide

komodo
Constantin Conovaloff, 2015/08/04 19:50
добавить путь include
push @INC, 'fully_qualified_path_to_module_wiht_our_REST.pm';
You could leave a comment if you were logged in.
perl.txt · Last modified: 2015/06/22 17:10 by conovaloff

Page Tools