Наткнулся на интересную и нетривиальную языковую особенность, при которой ключи хеша в итоге интерпретируются не совсем очевидно, но в то же время достаточно логично:
# 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
No comments:
Post a Comment