2009-01-06 6 views
1

Это относится к предыдущему вопросу: How can I read Perl data structures from Python?. Это может быть ошибка в версии парсера YAML, что я работаю с (0.66), но когда я бегу:Явные типизированные регулярные выражения, разрешенные как ключи в дампе Perl YAML?

perl -MYAML -le 'do shift; print YAML::Dump($CPAN::Config)' simple.pl 

На следующий simple.pl:

%config = (
    'color' => 'red', 
    'numbers' => [5, 8], 
    qr/^spam/ => qr/eggs$/, 
); 

я получаю:

--- 
(?-xism:^spam): !!perl/regexp (?-xism:eggs$) 
color: red 
numbers: 
    - 5 
    - 8 

Обратите внимание, что ключевое регулярное выражение не имеет явного типа. Что дает? (Спасибо!)

+0

Я бы порекомендовал YAML :: XS –

+0

В качестве альтернативы, YAML :: Любой использует наилучший доступный модуль YAML в вашей системе (или YAML :: XS, YAML: : Syck, YAML :: Старый, YAML или YAML :: Tiny, в этом порядке). – mirod

ответ

4

От man perldata:

Хэши неупорядоченные коллекции скалярных значений, проиндексированных по их соответствующей строки ключа.

Ключи не имеют типа в дампе YAML, потому что у них нет типа в Perl. Это просто струны. В вас то строка (?-xism:^spam)

Попробуйте это: perl -l -e'%config = (qr/^spam/ => qr/eggs$/); print $config{"(?-xism:^spam)"}'

+0

Отличная причина! :-) Я полагал, что они были просто неизменными объектами - мой мозг иногда застревает на земле Питона. – cdleary