Проблема с функцией chomp

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Diver mps
Сообщения: 20
Зарегистрирован: 25 фев 2004, 12:55
Контактная информация:

Суть проблемы
Из 1 файла достаются построчно значения
вид такой
192.168.0.1\n
192.168.0.2\n
192.168.0.3\n
и т.д.
После чего значение ipшников записывается в массив, а затем оттуда достается для формирования запроса к iptables
Необходимо просто отрезать последний /n для чего используется команда chomp.
Результат ее работы меня поражает, если не сказать матом.
След. кусок выдает след результат:
...
print @mass[$i];
$chm=chomp(@mass[$i]);
print $chm;
...

Результат
192.168.0.1
1

Может мне кто-то объяснить почему чомп работает таким злым способом в моем случае?
print
Diver mps
Сообщения: 20
Зарегистрирован: 25 фев 2004, 12:55
Контактная информация:

Мда вопрос решил но проблему так и не понял
Сделал chomp перед передачей данных в массив, т.е. chomp для переменной по умолчанию. Все заработало. Но почему в первом случае chomp так отрезал я так и не понимаю. Объясните, новичку.
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

Функция chomp удаляет последний перевод строки (а точнее, значение переменной $/) у аргумента (-ов) и возвращает количество удалений.

Между прочим. Если у тебя в коде переменная $i принимает числовые значения, а не строки типа '0 .. 2', то надо вместо 'собаки' @ использовать 'доллар' $.

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

print $mass[$i]; 
$chm=chomp($mass[$i]); 
print $chm; 
vlg
Сообщения: 5
Зарегистрирован: 26 сен 2004, 06:09

Вообще-то тоже не правильно, сам же написал, что она возвращает!

print $mass[$i];
chomp($chm=$mas[$i]);
print $chm;

Или так (без чомпанья):

$chm=$mas[$i]; $chm =~ s/\s+$//;
Diver mps
Сообщения: 20
Зарегистрирован: 25 фев 2004, 12:55
Контактная информация:

Ответа на СВОЙ вопрос я так и не услышал.
Проехали похоже
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

vlg, кусок кода я привел для примера использования символов @ и $.
Ответа на СВОЙ вопрос я так и не услышал.
Интересно было бы еще раз услышать твой вопрос.
Diver mps
Сообщения: 20
Зарегистрирован: 25 фев 2004, 12:55
Контактная информация:

Повторюсь...
Когда применять chomp к переменной по умолчанию, то все чомпится нормально, а если разбить в массив, а потом делать chomp для каждой ячейки массива, то chomp выдает полную хрень.
Отчего так?
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

chur писал(а):Функция chomp удаляет последний перевод строки (а точнее, значение переменной $/) у аргумента (-ов) и возвращает количество удалений.
Еще раз тоже самое, только медленней.
Есть массив:
@mass = ("1\n", "2\n", "3", "4\n");
Мы его чомпим (кстати, это можно сделать сразу с целым массивом):
$cmp = chomp @mass;
Теперь в массиве будут значения ("1","2","3","4"), а переменная $cmp будет равна 3 (сделано 3 удаления).
Diver mps
Сообщения: 20
Зарегистрирован: 25 фев 2004, 12:55
Контактная информация:

Все. Теперь я понял. Я не то делал :)
Спасибо.
Ответить