PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 62


$stnng ="

Преобразования, выполняемые в следующем примере, позволяют подготовить строку для передачи командному интерпретатору. На практике преобразование сим­волов и " еще не сделает произвольную строку полностью безопасной для ко­мандного интерпретатора. Правильно собрать весь список символов так сложно, а риск так велик, что для запуска программ лучше воспользоваться списковыми формами system и exec (см. рецепт 16.11) — в этом случае вы вообще избегаете взаимодействия с интерпретатором.


54   Глава 1 • Строки

$string = q(Mom said,   "Don't do that."), Sstnng =~ s/([

Две обратные косые черты в секции заменителя были использованы потому, что эта секция интерпретируется по правилам для строк в кавычках. Следовательно, чтобы получить одну обратную косую черту, приходится писать две. Приведем аналогичный пример для VMS DCL, где дублируются все апострофы и кавычки:

$stnng = q(Mom said,   "Don't do that."), Istring =" s/(["'])/$1$1/g;

С командными интерпретаторами Microsoft дело обстоит еще сложнее. В DOS и Windows COMMAND. COM работает с кавычками, но не с апострофами; не име­ет представления о том, как поступать с обратными апострофами, а для превра­щения кавычек в литерал используется обратная косая черта. Почти все бесплат­ные или коммерческие Unix-подобные интерпретаторы для Windows пытаются исправить эту удручающую ситуацию.

Кроме того, можно определить интервал с помощью символа -, а затем инвер­тировать его с помощью символа ". Следующая команда преобразует все симво­лы, не входящие в интервал от А до Z:

Sstring ="  s/([-A-Z])/\\$1/g,

Для преобразования всех неалфавитных символов следует воспользоваться метасимволами \Q и \Е или функцией quotemeta. Например, следующие команды эквивалентны:

$stnng = "this \Qis a test1 \E"; $string = "this is\\ a\\ test1"; $string = "this  "  .   quotemeta("is a test!'),

> Смотри также---------------------------------------------------------------------------------------------




Начало  Назад  Вперед



Книжный магазин