Perl - etc


There is More Than One Way To Do It - TWTOWTDI - “Тим Тоуди”

Попалась довольно интересная статья Ларри Уолла про дизайн языка Perl http://wall.org/~larry/natural.html Может помочь понять особенности перла

http://perl-tutorial.org/ - список всяого туториала

Последний эл. в arrayref


my $test = [1,2,3];
for my $index ( 0..$#$test ){
    print 'index = ' . $index . '; el = ' . $test->[$index] . "\n";
};

__DATA__
$ perl last_el.pl 
index = 0; el = 1
index = 1; el = 2
index = 2; el = 3

Сортировка списка через get запрос


my @sort = $c->req->param('order_by') ? map { ( $_ =~ m/^(\-?)\s*(.+)$/ && $1 eq '-' ? [$2,'DESC'] : [$2,'ASC'] ) } $c->req->param('order_by') : [ 'name', 'ASC' ];

Текущая дата


my @lt = localtime( time );
printf("Сегодня - %02d.%02d.%d %02d:%02d\n", $lt[3], $lt[4] + 1, $lt[5] + 1900, $lt[2], $lt[1]);

# Сегодня - 03.03.2018 10:52

Регулярка трима

$search_string =~ s/^\s+|\s+$//g;

Старые вопросы

Чем список отличается от массива

TODO

Как проверять и в чем разница, значение хеша в if-е? exists, defined, или просто условие?

TODO

Какой из способов создания обьекта использовать, ведь они оба работают?


my $obj = Some::Class->new($params);
my $obj = new Some::Class $params; 

Специальные переменные в perl

man perlvar

Переменная Описание Значение по умолчанию
$ARG
$_
Получает значение по умолчанию, если не обьявлена другая переменная
$OS_ERROR
$ERRNO
$!
Содержит сообщение об ошибке выполнения системного вызова, например открытие несуществующего файла. Частая запись:

open my $fh, '<', 'test.txt' or die "Can't open test.txt. Error - $!";
$ perl script.pl 
Can't open test.txt. Error - No such file or directory at script.pl line 5.    
$EVAL_ERROR
$@
Содержит сообщение об ошибке произошедшей внутри eval.

eval { my $test = 2 / 0 };
die "Error - $@" if $@;
$ perl script.pl 
Error - Illegal division by zero at script.pl line 6.
$PERL_VERSION
$]
Содержит версию perl запущеного процесса.

print $] . "\n";
$ perl script.pl
5.022001
$0 Содержит название запускаемого скрипта

use feature 'say';
say $0;

$ perl script.pl 
script.pl

use strict;

{ 
    package MyTest;
    sub test { print $0 . "\n" };
}

MyTest::test();

$ perl script.pl 
script.pl
$$ Содержит пид процесса
$.
$/
$\ "\n"
$| OUTPUT_AUTOFLUSH 0
$< Содержит uid пользователя запустившего скрипт. Можно использовать чтобы проверить запуск из под рута

        die "Not root" if $<;
print "You are ROOOT\n";

$ perl script.pl 
Not root at script.pl line 5.
$ sudo perl script.pl 
You are ROOOT