Perl -e вставить новую строку

865
portoalet

Возможный дубликат:
вставьте новую строку в оператор perl -e

Привет

Если я сделаю это в Bash

perl -e '$x; $y' 

Есть ли персонаж, который может вести себя как новая строка?

т.е. я хочу сделать

perl -e '$x; some_chars_as_new_line $y' 

где some_chars_as_new_line может быть \, а не метасимволом.

где интерпретатор Perl фактически видит новую строку.

$x;  $y; 

Большое спасибо

0
Дубликат http://superuser.com/questions/123467/insert-newline-in-perl-e-statement Josh K 14 лет назад 2
пожалуйста, не делайте двойной пост. Вы можете отредактировать свой предыдущий вопрос, чтобы добавить информацию, если вам нужно. quack quixote 14 лет назад 0
Этот вопрос немного отличается от http://superuser.com/questions/123467/insert-newline-in-perl-e-statement (на который уже дан ответ). Пожалуйста, не закрывайте. portoalet 14 лет назад 0
хорошо, да, я вижу незначительную разницу. но есть ответ на ваш другой вопрос (который я * только * расширил), который также отвечает на этот вопрос. (да, не так, как ответ Криса ниже ...), поскольку они так тесно связаны (у них практически одинаковый заголовок), я все еще думаю, что они должны быть в одном посте. quack quixote 14 лет назад 0

1 ответ на вопрос

-1
Chris Johnsen

Вопрос, который вы задали, касается только того, как оболочка интерпретирует свой ввод и передает его другим программам. По сути, это не имеет ничего общего с Perl.

Вы должны просто иметь возможность поместить это в скрипт:

foo '$x; $y;' 

Аргумент, переданный команде, будет иметь новую строку в том же месте, что и в самом скрипте. Возможно, вам придется позаботиться о сохранении такого скрипта таким образом, чтобы он заканчивался переносами строк в стиле Unix (только для LF), в противном случае вы можете получить CR + LF (разрывы строк в DOS / Windows) или просто CR (старый Линейка в стиле Mac достигает максимума). Вы также можете сделать это в интерактивной подсказке, но перед второй и всеми последующими строками вы увидите подсказку продолжения:

$ foo '$x; > $y;' 

В bash вы также можете использовать синтаксис $''цитирования для кодирования символа новой строки, например:

foo $'$x;\n$y;' 

Аргумент, передаваемый программе, будет обрабатываться аналогично строке C ANSI. Если вы хотите, чтобы в строке был фактический обратный слеш \\, вместо этого вы должны будете экранировать его как .

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

@ Крис: этот вопрос будет закрыт как дубликат; пожалуйста отправьте это к дубликату и удалите это здесь. (вы потеряете понижающий голос, когда вы это сделаете!) quack quixote 14 лет назад 0
@quack: Я не настолько обеспокоен понижением, что скопировал бы этот ответ на другой вопрос в том виде, в каком он есть (во всяком случае, там тоже может быть отказано). Мне бы хотелось, чтобы другие опрошенные явно расширились и включили смысл «начального ввода» (наряду с оригинальным смыслом «редактировать / вставить»). Но мой редакторский редактор слишком свеж, чтобы я мог начать такое переписывание без согласия ОП. @lydonchandra, ИМО, эти вопросы достаточно близки, чтобы их можно было объединить. Я мог бы сделать это, если хотите (просто скажите «давай, объединяй их»). Вы можете легко отменить изменения, если вам не понравился результат. Chris Johnsen 14 лет назад 0
я пошел дальше и отредактировал другой вопрос, включив в него обе части, так что теперь этот ответ уже актуален. если вы не хотите делать репост, его могут перенести моды в какой-то момент в будущем. quack quixote 14 лет назад 0