LINUX.ORG.RU

Perl переменные и \n


0

0

Подскажите пож. Если скаляр или хеш создать в самом скрипте то все символы \n обрабабатываюся как положено. Если запись в переменную сделать с файла например то они идут как простые буквы? Вот пример: #!/usr/bin/perl -w open( F, "/usr/meteo/tmp/file33") ; ## открыть файл со строкой ###privet\nprivet $aa = <F> ; ## считать его в скаляр print $aa; ## распечатать скаляр ################# $aa = "privet\nprivet" ; ## нарисовать тоже самое в самом скрипте print $aa ; ## распечатать снова exit ; Дает на выходе : privet\nprivet privet privet Прямо заглохло у меня все дело в др скриптике.

anonymous

Извиняюсь неаккуратно напечатал.
Подскажите пож.
Если скаляр или хеш создать в самом скрипте то все символы \n обрабабатываюся как положено.
Если запись в переменную сделать с файла например то они идут как простые буквы?
Вот пример:
#!/usr/bin/perl -w
open( F, "/usr/meteo/tmp/file33") ; ## открыть файл со строкой ###privet\nprivet
$aa = <F> ; ## считать его в скаляр
print $aa; ## распечатать скаляр
#################
$aa = "privet\nprivet" ; ## нарисовать тоже самое в самом скрипте
print $aa ; ## распечатать снова
exit ;
Дает на выходе :
privet\nprivet
privet
privet
Прямо заглохло у меня все дело в др скриптике.

anonymous
()
Ответ на: комментарий от asgard

Sprintf? Плохо знаю его. Но в AWK printf аналог. Его прекрасно изучил. Он только со строками работает и все.

anonymous
()
Ответ на: комментарий от anonymous

Тоже извиняюсь байда. $aaa =~ s/\\n/\n/g И так пробовал. Вообщем все клавиши перепробовал. Также на выходе print печатает ту же загогулину. Вы сами попробуйте. Скриптик тут есть. Может у меня чего по незнанию. А может скрытый глюк в перле? Сей лежит перед мною толстенькая книжулька наших отечественных гуру по Perl Чаунина и Матросова. Ну нет там ничего про эту простую проблему.

anonymous
()
Ответ на: комментарий от anonymous

> $aa = <F> ; ## считать его в скаляр
> print $aa; ## распечатать скаляр
> ################# 

eval "print \"$aa\"";

sdio ★★★★★
()
Ответ на: комментарий от asgard

Надо же, пошло. Наверное я в кавычки двойные это дело по привычки воткнул Спасибо. Извините что побеспокоил. Правда все равно странное решение. Тему закрыл. С наступившим Вас 2008 !

anonymous
()
Ответ на: комментарий от anonymous

не надо путать два символа \ и n и символ перевода строки \n. Символ перевода строки занимает один байт, \ и n занимают один байт каждый. Таким образом, если у вас написано прямо privet\nprivet, то это так и прочитает как два символа. Если хотите увидеть символ перевода строки в файле, то нажмите Enter в текстовом редакторе :)

То, что строка отрабатывает, как положено, так это ничего удивительного. При инициализации строки \n воспринимается именно как символ перевода строки, два символа будут, если экранировать слеш, т.е. privet\\nprivet.

Странно такие откровения читать от человека, работающего с perl.

can3p
()
Ответ на: комментарий от can3p

Ниче не понимаю: "То, что строка отрабатывает, как положено," Вообщето речь шла о содержимых хешев и скаляров а вобщемто не о строчных. Читайте внимательнее.

anonymous
()
Ответ на: комментарий от anonymous

Ну так учись понимать. На пальцах: последовательность символов '\' и 'n' спицияльным образом обрабатывается (меняется на символ перевода строки) только внутре текста скриптов. Полученная извне (например, при чтении из файла) - никак не обрабатывается.

Хеши и тому подобные скаляры тут ни причем совсем.

anonymous
()
Ответ на: комментарий от anonymous

"Только внутре текста скриптов" Это я и так понял из других ответов. Да и сам допер. В других постах тоже популярно обьяснили насчет 1 байт ....

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.