Skip to content

Instantly share code, notes, and snippets.

View koorchik's full-sized avatar
🇺🇦

Viktor Turskyi koorchik

🇺🇦
View GitHub Profile
@koorchik
koorchik / perl_private_methods.pl
Created October 25, 2011 17:12
Приватные методы
# Private accessors/methods
# Помещаем ссылку на локальную анонимную функцию в локальную переменную
my $name = sub {
my $self = shift;
...
}
# Используем как обыкновенный метод, но доступен оно только внутри класса
$self->$name();
@koorchik
koorchik / perl_private_methods_named.pl
Created October 25, 2011 17:25
Приватные методы в Perl с корректным отображением стека вызовов
# Private accessors/methods with correct "caller"
use Sub::Name;
# Помещаем ссылку на локальную анонимную функцию в локальную переменную
# и присваиваем ей имя "name"
my $name = subname "name" => sub {
my $self = shift;
...
}
@koorchik
koorchik / 0_but_true.pl
Created October 25, 2011 17:40
Истинный ноль
my $rows_affected = $dbh->do('UPDATE ... WHERE') or die;
my $rows_affected = $sth->execute(...) or die; # Для не "select" запросов.
# $rows_affected может содержать ноль, но быть истинным.
# Значит в Perl может быть истинное нулевое значение
# И вот несколько вариантов при использовании
# которых Perl не сыпет предупреждения
"0.0" # Десятичная нотация. Я обычно использую именно этот вариант
# строка, которая в числовом контексте соответствуют
# нулю, а в логическом - истине
"0 but true"
perl -wE 'say "0 but true"+5'
#Получим 5 без никаких предупреждений
# Но стоит изменить хоть один символ в заветной строке
perl -wE 'say "0 but true!"+5'
'Argument "0 but true!" isn't numeric in addition (+) at -e line 1.
#---------------------------------------------------------#
# Локализация пакетных переменных
our $l = 5;
{
local $l = 4;
say $l
};
say $l;
#4
$content = do {local(@ARGV, $/) = $f; <ARGV>}
perl -e 'while (<ARGV>){ … }' f1 f2 f3
use everywhere 'MooseX::Declare',
matching => '^MyApp',
use_here => 0;
if ( "test1" =~ /t1/ ) {
say "YES";
} else {
say "NO"
}
if ( "test2" =~ // ) {
say "YES";
} else {
say "NO"
$text =~ m/$re/;
# Такая запись тоже является опасной, поскольку
# переменная $re может содержать пустую строку
# Лучше записывайте так
$text =~ m/(?:$re)/;