Forum Webscript.Ru
Программирование => Perl => Тема начата: Yaroslav от 06 Сентября 2003, 01:08:59
-
приветствую всех :)
вопрос в том, что при использовании push, он перед строчками (всех кроме 1 (в Перле "0")) ставит пробел.
как этого избавиться?
и примерчик:
open (FILE, "file");
@file=;
close (FILE);
for ($str=0;$str<=@file;$str++) {
if ($str eq "2") { push @copyfile,"ok\\n"; }
else { push @copyfile,@file[$str]; } }
open (CFILE, ">copyfile");
print CFILE "@copyfile";
close (CFILE);
-
И не только push...
Самый простой вариант:
foreach (@copyfile) {
$_ =~s /^\\s//;
}
-
:D
print CFILE "@copyfile";
замени на
print CFILE @copyfile;
-
Кстати, вот это неправильно:
$str<=@file
ты не можешь сравнивать скаляр с массивом, я вообще удивляюсь как это у тебя работает (?). Надо так:
$str<=$#file
и по поводу пробелов. Я бы делал просто так:
@copyfile = (@file[$str], @copyfile);
и никаких пробелов нигде.
-
norden
Пучему же, при приравнивании скаляра к массиву, массив возвращает количество записей массива, единственно зачем использовать "<=" если счет начинается с нуля, цикл будет проходить на один раз больше. Значения массива @file[max] не существует в данном цикле, конечное значение будет @file[max - 1]
А пробелы вставляются действительно как сказал Alone при записи файла, я немного перепутал с выборкой массива из textarea
-
Пробелы - это не ошибка оператора push, это особенность print, который в случае, если массив указан в кавычках, выводит его содержимое, разделяя его содержимым переменной $" (пробел по умолчанию):
@a = (1..5);
print "@a";
$"="\\n";
print "@a"
-
Alone:
print CFILE "@copyfile";
замени на
print CFILE @copyfile
спасибочки, так правда и не понял что произошло, но все равно работает.
-
norden:
Кстати, вот это неправильно:
$str<=@file
правильно, я по книге Шварца пишу. :)
norden:
ты не можешь сравнивать скаляр с массивом, я вообще удивляюсь как это у тебя работает (?). Надо так:
$str<=$#file
что это?norden:
и по поводу пробелов. Я бы делал просто так:
@copyfile = (@file[$str], @copyfile);
ну.... как умею так и делаю. Вот лучше бы обьяснил ,например, чем твой метод лучше :)
-
Phoinix:
Пучему же, при приравнивании скаляра к массиву, массив возвращает количество записей массива, единственно зачем использовать "<=" если счет начинается с нуля, цикл будет проходить на один раз больше. Значения массива @file[max] не существует в данном цикле, конечное значение будет @file[max - 1]
это все практика
-
mike:
@a = (1..5);
print "@a";
$"="\\n";
print "@a"
поучительно, только не понятно что делает $"="\\n"; ?
-
Yaroslav:
поучительно, только не понятно что делает $"="\\n"; ?
Я ж вроде написал :) $" - это переменная, в которой содержится разделитель, используемый print при выводе массива в строку.
Иначе говоря,
$" = "\\n";
print "@array";
аналогичен
print join "\\n", @array;