Tuesday, July 12, 2016

Hash keys

Наткнулся на интересную и нетривиальную языковую особенность, при которой ключи хеша в итоге интерпретируются не совсем очевидно, но в то же время достаточно логично:


# foo.pl:

#!/usr/bin/env perl

use Data::Dumper;

my %hash = (
   '-'   => { -key   => 'value' },
   '+'   => { +key   => 'value' },
   '-+'  => { -+key  => 'value' },
   '+-'  => { +-key  => 'value' },
   '-+-' => { -+-key => 'value' },
);
print Dumper \%hash;

# output:
$VAR1 = {
         '-' => {
                  '-key' => 'value'
                },
         '-+' => {
                   '-key' => 'value'
                 },
         '-+-' => {
                    '+key' => 'value'
                  },
         '+-' => {
                   '-key' => 'value'
                 },
         '+' => {
                  'key' => 'value'
                }
       };

Посмотрим, каким такое объявление хеша видит интерпретатор:

perl -MO=Deparse foo.pl

my (%hash) = (
 '-',   {-'key', 'value'},
 '+',   {'key',  'value'},
 '-+',  {-'key', 'value'},
 '+-',  {-'key', 'value'},
 '-+-', {-(-'key'), 'value'}
);

Как видим, интерпретация осуществляется согласно математических правил, ключ воспринимается не как строка, а как число, то есть плюс необязателен (по умолчанию все числа с плюсом), минус меняет знак на противоположный:

'-',   {-'key',    меняет знак, поэтому -key
'+',   {'key',    необязателен, поэтому просто key
'-+',  {-'key,    меняет знак положительного числа, поэтому -key
'+-',  {-'key,    сначала меняет знак, плюс необязателен, поэтому -key
'-+-', {-(-'key'), меняет знак, плюс необязателен, затем опять меняет знак (с отрицательного уже на положительный), поэтому +key

Tuesday, June 7, 2016

Pod viewers

Кто на чём пишет документацию?

Для Мака нашёл пока что tkpod, он требует установки пакета XQuartz. Полёт нормальный, если не обращать внимание на отсутствие сглаживания буковок.

Tuesday, May 17, 2016

Set::IntSpan

Наткнулся на интересный модуль: Set::IntSpan, который проверяет диапазоны целых чисел.
Статья здесь.