Разный вывод perl на разных ОС

Модератор: Модераторы разделов

Аватара пользователя
plab
Сообщения: 298
ОС: Gentoo

Разный вывод perl на разных ОС

Сообщение plab »

Код:

#!/usr/bin/perl -w open(CONFIG, "rsync_bakup.conf") or die "Config error: $1 \n"; while ($line = <CONFIG>) { next if $line =~ /^#/; next if $line eq "\n"; if ($line =~ /^\[/) { chomp($line); ($line, ) = split("#", $line); $line =~ s/\[|\]//g; $block = $line; } else { chomp($line); ($line, ) = split("#", $line); $_=$line; if (/user_name/) { $line =~ s/user_name = //; $user = $line; } elsif (/passwd_file/) { $line =~ s/passwd_file = //; $pass = $line; } elsif (/other_args/) { $line =~ s/other_args = //; $args = $line; } else { ($dest, $targ) = split(" = ", $line); print "rsync "."--password-file=".$pass." ".$args." ".$user."\@".$block."\:\:".$dest." ".$targ."\n"; } } }


Запускаем на windows:

Код: Выделить всё

E:\perl\rsync_bak>perl rsync.pl
rsync  --password-file=/etc/rsyncd.pass -avu --delete backup@localhost::bin /mnt/backup/bin

Запускаем на генте:

Код: Выделить всё

plab rsync_bak # rsync.pl
::bin /mnt/backup/bine=/etc/rsyncd.pass

Почему так?
PIV 2.4GHz, 1.5GB RAM, Nvidia 7600GS && Xinerama, 420GB hdd
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Разный вывод perl на разных ОС

Сообщение diesel »

chomp в линуксе не отрезает \r, а файл конфига у вас пришел с винды, и там переводы строк \r\n? это первое что в голову пришло, не уверен что не отрезает.
Спасибо сказали:
Аватара пользователя
plab
Сообщения: 298
ОС: Gentoo

Re: Разный вывод perl на разных ОС

Сообщение plab »

файл конфига я писал в gvim под винду, вот сейчас написал заново через нано, тот же самый результат.
тут проблема какая то другая, я поэксперементировал, если в принте больше 2-х переменных связывать через ".", то с третьей переменной начинает печататся опять с начала строки, заменяя то что уже напечатано, таким образом:

Код: Выделить всё

rsync  --password-file=/etc/rsyncd.pass - выходит нормально
-avu --delete backup@localhost::bin /mnt/backup/bin выходит опять с начала строки, с начала верхней строки, но неизвестно почему "-avu --delete backup@localhost" отрезается вовсе.

так же я заметил, если делать

Код: Выделить всё

print "\"" . $pass . "\"\n";

то на винде вывод будет правильный, с кавычками в начале и в конце, а на линуксе ковычки только в начале. Очень странно.. Сейчас еще попробую на другом линуксе
PIV 2.4GHz, 1.5GB RAM, Nvidia 7600GS && Xinerama, 420GB hdd
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Разный вывод perl на разных ОС

Сообщение diesel »

plab писал(а):
21.03.2009 17:50
так же я заметил, если делать

Код: Выделить всё

print "\"" . $pass . "\"\n";

то на винде вывод будет правильный, с кавычками в начале и в конце, а на линуксе ковычки только в начале. Очень странно.. Сейчас еще попробую на другом линуксе



Вот так?

Код: Выделить всё

diesel@enisey:~$ perl -e '$pass="tmp"; print "\"" . $pass . "\"\n";'
"tmp"
diesel@enisey:~$ perl -e '$pass="tmp\r"; print "\"" . $pass . "\"\n";'
"tmp
diesel@enisey:~$


посмотрите на кофиг типа: od -abc configname.conf - что там в конце строк стоит?
Спасибо сказали:
Аватара пользователя
plab
Сообщения: 298
ОС: Gentoo

Re: Разный вывод perl на разных ОС

Сообщение plab »

хмм, что самое интересное, на убунте этот же перл выполняется нормально, в чем может быть проблема в генте?

спасибо, в были правы насчет \r, просто на убунте мне было лень загружать конфиг и я копипастил из гвима в нано. А как можно сделать так, чтобы отрезать заодно и \r(не прибегая к s///)?
PIV 2.4GHz, 1.5GB RAM, Nvidia 7600GS && Xinerama, 420GB hdd
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Разный вывод perl на разных ОС

Сообщение diesel »

plab писал(а):
21.03.2009 18:16
А как можно сделать так, чтобы отрезать заодно и \r(не прибегая к s///)?

разумного способа сделать без s/// не приходит в голову :)
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Разный вывод perl на разных ОС

Сообщение pcodr »

Читайте perldoc -f chomp

Код: Выделить всё

$/ = "\r\n";


Дальше можете обрезать с помощью chomp.
remote system type is unix
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Разный вывод perl на разных ОС

Сообщение diesel »

pcodr писал(а):
21.03.2009 18:55
Читайте perldoc -f chomp

Код: Выделить всё

$/ = "\r\n";


Дальше можете обрезать с помощью chomp.

а если файл поменяется? то есть на самом деле надо аналог s/\r?\n?$//
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Разный вывод perl на разных ОС

Сообщение pcodr »

Ok. А чем автора не устраивает s/// ?

Код: Выделить всё

sub trim
{
    my $string = shift;
    $string =~ s/^\s+//;
    $string =~ s/\s+$//;
    return $string;
}
remote system type is unix
Спасибо сказали: