kot

d11he11


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

Teach Yourself Programming in Ten Years


Когнитивный диссонанс
kot
d11he11
В документации к Perl приводится два способа кодирования бесконечного цикла. Это всем известные while (1) { ... } и for (;;) { ... }.

Между тем, есть еще один (и самый лаконичный!) способ: while () { ... }.

Ты тоже испытал сабж, %username%?
Метки: ,

Perl: особенность "use"
kot
d11he11
Строки кода:
use CGI 3.52;
и
use 3.52 CGI;
интерпретируются Perl-ом одинаково. Поэтому, если случайно поменять местами имя модуля и версию, можно этого и не заметить. Проблемы могут появиться при добавлении параметров импорта:
use 3.52 CGI qw(:standard);  # ok
use 3.52 CGI ":standard";    # error
use CGI 3.52 ":standard";    # ok
 
Метки: ,

полезная фича bash
kot
d11he11
$ printf '%d' "'a"
97
Метки: ,

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

my @a = qw(a b c);
my $x = (1, 2, 3, @a);
say $x;
Метки: ,

Perl: недокументированная фича оператора "->"
kot
d11he11
Оператор "->" в Perl может использоваться не только с объектами или именами классов, но и вообще с любым скаляром при условии, что в правой части ссылка на функцию:

my $say_array = sub { print "@{$_[0]}\n" };
[1, 2, 3]->$say_array; # prints 1 2 3


perlop об этом скромно умалчивает.
Метки: , ,

Perl: оператор yada-yada
kot
d11he11
В Perl 5.12 появился интересный оператор - "..." (не путать с разновидностью оператора ".."). Данный оператор служит заглушкой для еще не написанного кода. При попытке выполнения кода, генерируется исключение с текстом "Unimplemented":

sub unimplemented { ... }

eval { unimplemented() };
if ($@ eq "Unimplemented" ) {
    say "Oh look, an exception--whatever.";
}

Может быть полезным при использовании TDD.
Метки: , ,

EAV FAIL
kot
d11he11


EAV
Метки:

FreeBSD доставляет
kot
d11he11
/usr/ports/UPDATING:


20110822:
  AFFECTS: users of lang/ruby
  AUTHOR: stas@FreeBSD.org

  The default ruby version has been updated to 1.9. Please rebuild all ports that
  depends on it.
(BSD-шники радостно компилят свежий руби). Ровно через день:


20110823:
  AFFECTS: users of lang/ruby
  AUTHOR: swills@FreeBSD.org

  The default ruby version has been reverted from 1.9 to 1.8. If you followed
  the procedure in the 20110822 entry, you may need to follow these steps:

  If you use portmaster:
  # portmaster -o lang/ruby18 lang/ruby19
  # portmaster -R -r ruby-1.8

  If you use portupgrade:
  # portupgrade -f lang/ruby19
  # portupgrade -f lang/ruby18 # if you have it installed
  # portupgrade -f ports-mgmt/portupgrade
  # portupgrade -x ruby-1.9.\* -fr lang/ruby19
Метки:

Как корабль назовёте..
kot
d11he11
Никогда бы не подумал, что имена серверов вроде "apple" или "banana" могут иметь такой скрытый смысл.

Another gotcha for you
kot
d11he11
perl -wle 'package A; our $_; print map $_, 1..3'
Use of uninitialized value in print at -e line 1.
Use of uninitialized value in print at -e line 1.
Use of uninitialized value in print at -e line 1.


WTF? $_ по идее всегда находится в main. Однако, после вызова our
$_ ссылается на $A::_, в то время как map по-прежнему использует $main::_.
Метки: , ,

?

Log in