Страница 1 из 1

объединение результатов в строку

Добавлено: 2009-10-10 21:58:31
zingel
Товарищи! Есть простой скрипт который берёт айпи из списка iplist и ставит перед стройкой которую бертё из списка domains, как не трудно догадатся скрипт нужен для записей в зоне домена:

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

#!/usr/bin/perl
open f, "./iplist.txt";
my @file = <f>;
close f;
open f2, "./domains.txt";
my @php = <f2>;
close f2;
my $j = 0;
foreach $k (@php) {
print "$k IN A $file[$j]";
if($j < 100) {
$j++;
} else {
$j = 0;
}
}
но результат получается не в одну строку а в две то есть вместо
domain.tld IN A 123.45.67.89
получается
domain.tkd
IN A 123.45.67.89
Отсюда вопрос: как объединить в одну строку или лучше поставить после print "$k символ перевода строка *\*?

Re: объединение результатов в строку

Добавлено: 2009-10-10 22:02:24
paradox
дай догадаюсь
у тебя не просто
вот так
domain.tkd
IN A 123.45.67.89
а еще и
domain.tkd
IN A 123.45.67.89

domain.tkd
IN A 123.45.67.89

domain.tkd
IN A 123.45.67.89
тоесть пустые строки))
потому что у тебя переменные $k $file[$j]
уже содержат и \n
стрипай их как там в перле это делаеться ~\\\ или типа того
или можно попробовать split сделать им

Re: объединение результатов в строку

Добавлено: 2009-10-10 22:25:18
zingel
а еще и
Цитата:
domain.tkd
IN A 123.45.67.89

domain.tkd
IN A 123.45.67.89

domain.tkd
IN A 123.45.67.89
ну вообще там по задумке взять ip и с 1 до 100 сунуть их к именам поддоменов чтобы потом строки сунуть в файл зоны домена

можно ещё и через

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

unshift ($k, $j)
но это какое то колдунство, может проще что есть, strings не берёт на выходе....

P.s. то есть мне по сути нужно избваиться от *\n* где то по середине

Re: объединение результатов в строку

Добавлено: 2009-10-10 22:31:51
paradox
не посредине
а отдельно каждую переменную отрезать по \n
прежде чем ты ее будешь print

Re: объединение результатов в строку

Добавлено: 2009-10-10 22:34:27
ProFTP
то что я вижу пока:
chomp( f2 );
и
$_ =~ s/\r+/\n/g for (@php);

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

#!/usr/bin/perl
open f, "./iplist.txt";
my @file = <f>;
close f;
open f2, "./domains.txt";
chomp( f2 );
my @php = <f2>;
close f2;
my $j = 0;
foreach $k (@php) {
print "$k IN A $file[$j]";
if($j < 100) {
$j++;
} else {
$j = 0;
}
}


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

#!/usr/bin/perl
open f, "./iplist.txt";
my @file = <f>;
close f;
open f2, "./domains.txt";
my @php = <f2>;
close f2;
 $_ =~ s/\r+/\n/g for (@php);
my $j = 0;
foreach $k (@php) {
print "$k IN A $file[$j]";
if($j < 100) {
$j++;
} else {
$j = 0;
}
}


Re: объединение результатов в строку

Добавлено: 2009-10-10 22:35:23
ProFTP
там может симво стоять какой-то левый, который ты не видишь редатор... а тот символ означает проблел - его надо как-то снести

Re: объединение результатов в строку

Добавлено: 2009-10-10 22:40:52
paradox
=~ s/\r+/\n/g
вот это я и имел ввиду
токо по каждой переменной нужно сделать до того внутри цикла что бы print уже выводил без \n
а в самом print добавить в конце \n

Re: объединение результатов в строку

Добавлено: 2009-10-10 22:42:03
paradox
точнее

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

=~ s//\n/g
наверное так
суть порезать все \n \r

Re: объединение результатов в строку

Добавлено: 2009-10-10 22:45:20
ProFTP
сделай, выведет чистый - все как есть :)

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

open f, "./iplist.txt";
my @file = <f>;
close f;
open f2, "./domains.txt";
my @php = <f2>;
close f2;


use Devel::Peek;

for (0..@php) {
Dump(@php[$_]);
last if ($_ > 10);
}

Re: объединение результатов в строку

Добавлено: 2009-10-10 23:14:36
zingel
use Devel::Peek;
хитрец, откуда же в жопе алмазы ? =) ну ладно сейчас поставлю и сделаю

Re: объединение результатов в строку

Добавлено: 2009-10-10 23:22:08
zingel

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

# ./subSPIS.pl
SV = NULL(0x0) at 0x604160
  REFCNT = 1
  FLAGS = ()
ну сделал, тоже самое в итоге, а если пример парадокса то вообще пустота =)

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

./subDNS.pl | sed "s/'/\n/g" - то же самое

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

./subDNS.pl | tr "\'" "\n"  - то же самое

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

./subDNS.pl | tr "\n" "\'" 
- В кучу всё =)

Re: объединение результатов в строку

Добавлено: 2009-10-10 23:26:12
ProFTP
у меня работает, странно

попробуй тогда так, потом оборви ctrl+c

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

use Devel::Peek;

for (@php) {
Dump($_);
}
а то что вверху не работает, что парадокс написал?

Re: объединение результатов в строку

Добавлено: 2009-10-10 23:30:22
paradox

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

foreach $k (@php) {
+
+ сдесь нужно обрезать пероеменные от \n \r
+
+
print "$k IN A $file[$j]";  сюда нужно добавить \n

Re: объединение результатов в строку

Добавлено: 2009-10-10 23:32:36
zingel
for (@php) {
Dump($_);
}
пустую строку возвращает, ну ладно сама суть понятна...

Re: объединение результатов в строку

Добавлено: 2009-10-11 0:08:52
ProFTP
странно у меня выводит

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

./perl.pl
SV = PV(0x8103850) at 0x810017c
  REFCNT = 2
  FLAGS = (POK,pPOK)
  PV = 0x8104898 "sf"\0
  CUR = 2
  LEN = 4
SV = PV(0x81038c8) at 0x81002a8
  REFCNT = 2
  FLAGS = (POK,pPOK)
  PV = 0x81178c8 "sdfsdf"\0
  CUR = 6
  LEN = 8
SV = PV(0x8103844) at 0x8100098
  REFCNT = 2
  FLAGS = (POK,pPOK)
  PV = 0x810c3e8 "dswer"\0
  CUR = 5
  LEN = 8
SV = PV(0x8103910) at 0x8100b30
  REFCNT = 2
  FLAGS = (POK,pPOK)
  PV = 0x8117968 "wsdf"\0
  CUR = 4
  LEN = 8
это сразу все будет видно
это строка dswer"\0