kot

d11he11


i-t-шные заметки

Teach Yourself Programming in Ten Years


Очередная задачка по Perl
kot
d11he11
Что напечатается в результате?

perl -le '"ok" =~ /(.*)/; sub { "huh?" =~ /(.*)/; print for @_ }->( "$1", $1 )'

З.Ы. В процессе решения открыл для себя факт, что $1 динамически локализуется для текущего блока %)
Метки:

Perl arcana
kot
d11he11
Imho, неплохой вопрос для собеседования по Perl.
Каким будет результат выполнения блоков BEGIN в данных случаях (и почему ;)

BEGIN {
    die;
    use NonExistentPackage;
}

BEGIN {
    $x = 1;
    use strict;
}
Метки:

Bring the power of PERL programming to your Perl programs
kot
d11he11
Inline::PERL
Метки:

MySQL: что означает число n в INT(n)
kot
d11he11
Вопрос, который возникает с завидным постоянством (даже у тех кто пользует MySQL не первый день):

Что означает число в скобках в определении типа integer (e.g. INT(4)) и ограничивает ли оно диапазон значений, которые могут быть сохранены в столбце?
Ответ: это число определяет ширину столбца при отображении. С занимаемым местом и диапазоном значений оно никак не связано.

Из доки MySQL:
This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used or not is up to the application.)
Метки: ,

Perl: забавная фича glob()
kot
d11he11
$ touch f{1,2,3,4}
$ perl -e 'for (qw(f1 f2 f3 f4)) { printf "$_: %s\n", glob($_) ? "found" : "not found" }'
f1: found
f2: not found
f3: found
f4: not found
Метки: , ,

Perl: как отфильтровать каждый второй элемент списка
kot
d11he11
Прикольный способ:

perl -le 'print grep --$|, 1..10'
13579


И еще:

perl -le '$t=0; print grep $t^=1, 1..10'
13579


Больше тут.
Метки:

Вопрос на засыпку
kot
d11he11
Что напечатает функция:

func() { local var=$(false); echo "exit status: $?"; }
Метки: ,

Perl: функция glob
kot
d11he11
Довольно экзотическое применение функции glob - создание перестановок.

perl -e 'print "$_ " for glob "{A,B,C}{1,2,3}"'
A1 A2 A3 B1 B2 B3 C1 C2 C3

Эта фича даже документирована в perldoc -f glob:

If non-empty braces are the only wildcard characters used in the glob, no filenames are matched, but potentially many strings are returned. For example, this produces nine strings, one for each pairing of fruits and colors:

@many = glob "{apple,tomato,cherry}={green,yellow,red}";
Метки: , ,

Оператор ||= и массивы
kot
d11he11
Иногда использую перловый оператор ||= для присвоения переменным дефолтных значений:

$x ||= 1;

Сегодня попался в ловушку, написал @array ||= (1,2,3). Этот код вызывает ошибку синтаксиса, поскольку он эквивалентен scalar(@array) = @array || (1,2,3) и левая часть присваивания не является lvalue.

Забавно, что текст ошибки разный в зависимости от того, является переменная глобальной или лексической:

perl -e '@a ||= 1'
Can't modify array dereference in logical or assignment (||=) at -e line 1, at EOF

perl -e 'my @a ||= 1'
Can't modify private array in logical or assignment (||=) at -e line 1, at EOF
Метки: , , ,

(без темы)
kot
d11he11
perl -e 'print sort { eval "BEGIN { 1/0 }"; return $a <=> $b } 0..1'
Can't return outside a subroutine at -e line 1.
Метки: , ,

?

Log in