Проблема с функцией chomp
Суть проблемы
Из 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
Из 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
Может мне кто-то объяснить почему чомп работает таким злым способом в моем случае?
Мда вопрос решил но проблему так и не понял
Сделал chomp перед передачей данных в массив, т.е. chomp для переменной по умолчанию. Все заработало. Но почему в первом случае chomp так отрезал я так и не понимаю. Объясните, новичку.
Сделал chomp перед передачей данных в массив, т.е. chomp для переменной по умолчанию. Все заработало. Но почему в первом случае chomp так отрезал я так и не понимаю. Объясните, новичку.
Функция chomp удаляет последний перевод строки (а точнее, значение переменной $/) у аргумента (-ов) и возвращает количество удалений.
Между прочим. Если у тебя в коде переменная $i принимает числовые значения, а не строки типа '0 .. 2', то надо вместо 'собаки' @ использовать 'доллар' $.
Между прочим. Если у тебя в коде переменная $i принимает числовые значения, а не строки типа '0 .. 2', то надо вместо 'собаки' @ использовать 'доллар' $.
Код: Выделить всё
print $mass[$i];
$chm=chomp($mass[$i]);
print $chm;
Вообще-то тоже не правильно, сам же написал, что она возвращает!
print $mass[$i];
chomp($chm=$mas[$i]);
print $chm;
Или так (без чомпанья):
$chm=$mas[$i]; $chm =~ s/\s+$//;
print $mass[$i];
chomp($chm=$mas[$i]);
print $chm;
Или так (без чомпанья):
$chm=$mas[$i]; $chm =~ s/\s+$//;
Ответа на СВОЙ вопрос я так и не услышал.
Проехали похоже
Проехали похоже
vlg, кусок кода я привел для примера использования символов @ и $.
Интересно было бы еще раз услышать твой вопрос.Ответа на СВОЙ вопрос я так и не услышал.
Повторюсь...
Когда применять chomp к переменной по умолчанию, то все чомпится нормально, а если разбить в массив, а потом делать chomp для каждой ячейки массива, то chomp выдает полную хрень.
Отчего так?
Когда применять chomp к переменной по умолчанию, то все чомпится нормально, а если разбить в массив, а потом делать chomp для каждой ячейки массива, то chomp выдает полную хрень.
Отчего так?
Еще раз тоже самое, только медленней.chur писал(а):Функция chomp удаляет последний перевод строки (а точнее, значение переменной $/) у аргумента (-ов) и возвращает количество удалений.
Есть массив:
@mass = ("1\n", "2\n", "3", "4\n");
Мы его чомпим (кстати, это можно сделать сразу с целым массивом):
$cmp = chomp @mass;
Теперь в массиве будут значения ("1","2","3","4"), а переменная $cmp будет равна 3 (сделано 3 удаления).
Все. Теперь я понял. Я не то делал 
Спасибо.

Спасибо.