Как мне сжать строку, если у меня есть Perl 4?

Я пишу сценарий на моем персональном компьютере, который подключен к удаленному серверу. Я думаю, что на удаленном сервере установлена ​​Perl 4.0 или более поздняя версия, и поэтому он не может распознать то же самое. Есть ли альтернатива chomp команда?

3 ответа

Решение

Это не точная замена, но вы можете попробовать:

$var =~ s/\r?\n?$//

который будет раздвигать либо CRLF (DOS), LF (Unix), CR (Mac?).

Обычный оператор chomp всегда удаляет текущий определенный $INPUT_RECORD_SEPARATOR для текущего O/S.

Ходить по пути рубки не рекомендуется, я бы использовал регулярные выражения, они более понятны и прозрачны для других. Привычная модификация переменной записи в конечном итоге приведет к тому, что в результате будет получен какой-то плохой пакет и возникнут странные вещи.

Я полагаю, что chop () использовался в pre-5 perl. Не так полезно, как chomp (), конечно. Если вы обрабатываете произвольный ввод, вам, вероятно, лучше использовать регулярное выражение, но если вы всегда анализируете файл в формате unix:

while (<F>) {
  chop();
  do_stuff();
}

Как говорится в комментарии ниже, chop () всегда удаляет последний символ lvalue, а не только если это символ новой строки (или то, что находится в конце строки var). Я знал это (отсюда и комментарий "не так полезен, как chomp ()"), но почему-то забыл его напечатать.

Другие вопросы по тегам