Perl: wtf

Мне очень стыдно, но моим первичным языком для хаканья является перл. Да, тот самый, который похож на base64. Как-то так получается, что именно с его помощью у меня лучше всего у меня получается get things done. Он уже мало развивается, следовательно стабилен. Он неплохо вылизан за все эти прошедшие годы. Он быстро работает, в моём понимании - быстро грузится, не занимает много памяти. Мой rss аррегатор работал на виртуалке с 32мб памяти, и там был ещё веб-сервер, ssh, cron и что-то ещё. И в целом он не подводит меня, я чувствую что могу на него положиться, и быть уверен что программа будет вести себя именно так, как я оожидаю, а не случится какой-нибудь ерунды.

Но вчера буквально за 1 вечер я узнал 2 новых вещи про него:

$perl -e 'use Data::Dumper; $a = {}; print Dumper($a); map { $_; } @{$a->{arr}}; print Dumper($a);'; 
$VAR1 = {};
$VAR1 = {
          'arr' => []
        };

Говоря короче, если у тебя переменная имеет значение unref, то если её использовать как ссылку на массив для чтения - этот массив создастся (пустой) и в переменной будет ссылка на массив. Это настолько не вяжется с обычным поведением перла - как правило он валится с ошибкой, что я подозреваю какой-то баг. По крайней мере, в документации я ничего не нашёл об этом.

Второе я нашёл в доках, но тоже выглядит не очень хорошо:
$perl -e 'use Data::Dumper; $a = [1,2]; sub a() { $_ = 'aa'; } map { a(); } @$a; print Dumper($a);'                                         
$VAR1 = [
          'aa',
          'aa'
        ];

- "$_" в map - глобальная (не my), поэтому её изменение в a() протекает в вызывающую функцию и меняет итерируемый массив. Решение - поставить my $_ перед map

PS: вот это второе, кстати - типичный косяк этого вашего метапрограммирования на макросах.
яничегонепонял.tiff

нет, Lua няшней. а D просто круче, и у него есть rdmd, который можно в шебанг написать.
В конкретно случае git-rebase2 (и вообще всего что я сейчас делаю) есть один нюанс: Windows. Машина типикал windows разработчика - это кромешный ад, там столько всякого понаставлено. Если туда поставить _ещё_ один фреймворк - она может запросто этого не выдержать и взорваться как demon core. Так что я предпочитаю стоять на плечах гигантов, которые сделали msysgit - его в любом случае надо ставить. А там 2 языка - перл и тикль. Зато аккуратно скидываю один текстовый скриптик куда-нибудь в PATH - и всё работает, и ничего не надо ставить и компилять.

И вот такая херня что-то всё время происходит, то лисп слишком много памяти жрёт, то я в очередной раз не осиливаю rebar. Поэтому беру что работает, а не что няшно.