Я согласен с ответом от zacherates.
Но вы можете сделать вызов intern () в ваших нелиберальных строках.
Из примера zacherates:
// ... but they are not the same object
new String("test") == "test" ==> false
Если вы ставите нелитеральное равенство строки, это правда
new String("test").intern() == "test" ==> true
TL; DR Я думаю, это предназначено для обеспечения безопасности. Сообщение об ошибке LTA . Комментарии к вашему вопросу объясняют, что вам нужно сделать. Этот ответ дает то, что я считаю обоснованием.
Я думаю, что этот вопрос, возможно, следует обсудить дополнительно с целью улучшения одного или нескольких сообщений об ошибках, документации P6, p6doc
и / или компилятора P6.
Я буду изучать исходный код компилятора, чтобы лучше понять, что происходит, и планирую обновить этот ответ позже.
Аббревиатура / слово «pod» было придумано для оригинальной серии Perl и означало «простая старая документация». В P6 это стало Pod (обратите внимание на скорректированное соглашение правописания, чтобы отличить его от оригинального p5 pod / POD). Pod выглядит как pod / POD, но это другой формат.
В частности, он больше не простой и не старый - это код. Предположим, это означает «производит оптимальную документацию» или что-то подобное.
Согласно документации P6 для Pod это:
Простой в использовании язык разметки для документирования модулей и программ Perl
blockquote>] Imo довольно легко читать в исходном виде и довольно легко писать . (Хотя, как и большинство из нас, я привык к уценке, которую я использую, чтобы написать это ...)
Но наиболее существенная характеристика imo Pod, по крайней мере, в контексте с использованием [1116 ] это то, что это код. Так что его так же легко использовать, как и код. Иными словами, это не обязательно просто, учитывая проблему вредоносного кода и функции безопасности, которые обеспечивают безопасность.
SO, начинающийся с «Документация в программах на Perl 6, использующих Pod 6 DSL, фактически анализируется как часть кода» - это шаг к ясности в этом вопросе. Но важно понимать, что он не только анализируется, но и компилируется и что компиляция включает в себя запуск компилятора, а в P6 может даже включать запуск кода в компилируемой программе.
Это связано с природой синтаксиса и семантики P6.
На странице Википедии о языках разметки они представляют собой систему для:
аннотирования документа способом, который синтаксически отличается от текста
blockquote>Но синтаксис (и семантика) P6 могут быть динамически изменены модулями. Это имеет убедительные преимущества 1 sup>, но это также означает, что код P6 должен быть скомпилирован для того, чтобы компилятор определил, как его анализировать.
1137 И это включает в себя выяснение того, что такое Pod и как его анализировать. Кроме того, Pod может вызывать код P6 во время компиляции. Таким образом, Pod (и любой код, который он вызывает) также должен быть скомпилирован, и для его определения может потребоваться запустить , чтобы выяснить, каковы окончательные данные Pod.
Конечно, вы можете читать Pod на месте, используя инструменты просмотра текста. Он специально разработан для того, чтобы его было довольно легко прочитать в необработанном виде.
Но если вы используете
p6doc
, вы компилируете код P6. (На самом деле,p6doc
является очень простой оболочкой для компилятора .)И поскольку в компиляцию P6 может входить работающий код , те же политики безопасности, которые один относится к запуску кода в целом должен применяться к использованию
p6doc
для извлечения P6 Pod.С точки зрения безопасности, никогда не следует запускать код, который ищет каталоги в вашей системе и запускает код, который он там находит, без вашего разрешения.
Когда вы пишете
p6doc foo/bar
, вы, как считается, говоритеp6doc
, что все в порядке, чтобы скомпилироватьfoo/bar
и запустить любой код, который является частью компиляции этого кода.Но прагма
use lib
намеренно игнорируется, когда компилятору предоставляется опция--doc
. Отсюда и ответ на ваш SO в комментариях к нему.Сноски
1 sup> Это делает P6 способным к неограниченным мутациям, как в рамках одной программы, так и в качестве языка, развивающегося со временем. Как с любым полным языком тьюринга, что означает, что почти все из них, если это возможно, P6 может сделать это. В отличие от почти на всех языках, если вы делаете это и чувствуете, что он принадлежит языку, а не модулю, вы можете настроить язык P6, чтобы он впитался в вашу копию P6. И если люди P6 хотят, чтобы ваш языковой трюк впитался в каждый P6, ваш твик может стать частью будущего языка. Таким образом, P6 позволяет легко модифицировать сам P6 и максимально открыт для будущего улучшения языка и по существу устраняет одну из вещей, которая может тратить много времени и энергии, а именно борьбу за то, что характерно для языка.