Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

разбивать переменную на массив строк (mae)
Author Message
mae
Заглянувший



Joined: 21 Jun 2003
Posts: 12
Карма: 0
   поощрить/наказать

Location: Талица

PostPosted: Tue Mar 16, 2004 7:36 am ()
   Post subject: разбивать переменную на массив строк
Reply with quote

Зависит ли содержание переменной $/ от ОС, на который запущен сервер?
Я обычно разбиваю переменную на массив строк так
@array=split!\r?\n!,$string;
Может быть стоит делать так:
@array=split!$/!,$string;
?
Или есть какая-то специальная функция?
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Tue Mar 16, 2004 8:44 am (спустя 1 час 7 минут)
   Post subject:
Reply with quote

Code (perl): скопировать код в буфер обмена
print (www.perldoc.com/perl5.6/pod/func/print.html) "Hello, mae$/";
Может почитать чего-нибудь?
RTFM!
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Mar 16, 2004 7:08 pm (спустя 10 часов 23 минуты)
   Post subject:
Reply with quote

Вообще-то, правильнее так:
Code (perl): скопировать код в буфер обмена
@array = split (www.perldoc.com/perl5.6/pod/func/split.html) /\x0d\x0a?|\x0a\x0d?/, $string;
Это работает и в Unix, и в Windows, и на Маке.
Back to top
View user's profile Send private message Send e-mail
mae
Заглянувший



Joined: 21 Jun 2003
Posts: 12
Карма: 0
   поощрить/наказать

Location: Талица

PostPosted: Wed Mar 17, 2004 6:09 am (спустя 11 часов 1 минуту)
   Post subject:
Reply with quote

Дмитрий Котеров, а разве
Code (perl): скопировать код в буфер обмена
@array=split (www.perldoc.com/perl5.6/pod/func/split.html)!$/!,$string;
на какой-то ОС не будет работать?
Я спрашиваю, будет ли изменяться содержимое переменной $/ в зависимости от того, на какой операционке запущен сервер?
Я не могу в данный момент проверить это экспериментально, потому и спрашиваю.
Back to top
View user's profile Send private message Send e-mail
Enilatiar
Участник форума



Joined: 09 Jun 2003
Posts: 690
Карма: 24
   поощрить/наказать


PostPosted: Wed Mar 17, 2004 9:58 am (спустя 3 часа 49 минут)
   Post subject:
Reply with quote

RTFM:
Ларри Уолл и др.
"Программирование на Perl"

Глава 25. Переносимость программ на Perl
Перевод строки (первый раздел!)
Quote:
... В Perl для представления "логического" перевода строки независимо от платформы служит \n. ...
Это означает, что
Code (perl): скопировать код в буфер обмена
split (www.perldoc.com/perl5.6/pod/func/split.html) /\n/, $string
будет работать везде, ибо каждый из конечных интерпретаторов Perl будет его считать по-своему.
  
  
Истинные проблемы, для которых нужен $/, возникают с сокетами, межпроцессорными взаимодействиями и распеределенными приложениями. Да и там, это решается не $/, а скорее точным описанием где какие символы использовать.

P.S. Почувствуйте Perl! Это не Unix, не Mac, не Windows. Perl содержателен сам по себе. В нем \n - свой собственный, это не прямой набор символов. Это "логический" объект перевода строки. При компиляции, полагаю, \n равен $/, то есть перловский \n равен досовскому \r\n, маковскому \r, и юниксовому \n.
Back to top
View user's profile Send private message
mae
Заглянувший



Joined: 21 Jun 2003
Posts: 12
Карма: 0
   поощрить/наказать

Location: Талица

PostPosted: Wed Mar 17, 2004 10:39 am (спустя 40 минут)
   Post subject:
Reply with quote

Действительно! Спасибо.

Вопрос решен, тему можно закрыть.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Mar 18, 2004 1:28 am (спустя 14 часов 49 минут)
   Post subject:
Reply with quote

$/ лучше не использовать по той причине, что пришедшие данные могут быть в любом формате — как в маковском, так и в виндовом. Мы же не знаем, откуда они пришли.
Макcим Зоpин wrote:
Это означает, что Код (perl):
split /\n/, $string
будет работать везде, ибо каждый из конечных интерпретаторов Perl будет его считать по-своему.
Это тоже не совсем верно. Код будет работать, если
а) данные в $string прочитаны в текстовом режиме (а не в бинарном), и
б) пришедшие данные ушли в операционной системы того же типа, что и у обрабатывающего скрипта.

В целях подстраховки ни на а), ни на б) полагаться не следует. Именно поэтому я и привел выражение /\x0d\x0a?|\x0a\x0d?/, которое устойчиво по данным и не зависит операционной системы и источника данных в строке.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies. All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You cannot download files in this forum.
XML