URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8915
[ Назад ]

Исходное сообщение
"PLEASE  HELP! Use of uninitialized value in string at"

Отправлено squidward , 01-Ноя-10 10:35 
есть скрипт который работал на red hat нормально а на Freebsd вместо результата выдает ошибки, в чем моя ошибка?

#!/usr/bin/perl
open(FILE1, "/home/user/ip-email");
while (<FILE1>) {chop; split();
$ip1="$_[0]";
$ma="$_[1]";
$des="$_[2]";
open(FILE2, "/home/user/output");
while (<FILE2>) {chop; split('-');
$ip2="$_[0]";
$tr="$_[1]";
foreach ($ip1) {
if ($ma ne "") {
foreach ($ip1) {
if ($ip1 eq $ip2) {
print " $ip1, $ma, $des, $ip2, $tr, /n ";
}}}}}}

отрывки от файла ip-email и output

192.168.0.1 somemail@mail.ru Description1
192.168.0.2 other@mail.ru Description2
192.168.0.3
192.168.0.4 mail_3@mail.ru Description3
192.168.0.5
192.168.0.6

192.168.0.1    - 233    + 16    = 249
192.168.0.2    - 401    + 45    = 446
192.168.0.3    - 26509    + 8278    = 34787
192.168.0.4    - 802    + 9172    = 9974
192.168.0.5    - 4868    + 1665    = 6533
192.168.0.6    - 3    + 0    = 3
192.168.0.7    - 214    + 3331    = 3545
192.168.0.8    - 408    + 3599    = 4007
192.168.0.9    - 5034    + 955    = 5989

на экране должен был быть вот что

192.168.0.1 somemail@mail.ru Description1 192.168.0.1    - 233    + 16    = 249
192.168.0.2 other@mail.ru Description2  192.168.0.2    - 401    + 45    = 446
192.168.0.4 mail_3@mail.ru Description3  192.168.0.4    - 802    + 9172    = 9974

Результат вот какой

Use of implicit split to @_ is deprecated at ./send line 8.
Use of implicit split to @_ is deprecated at ./send line 3.
Use of uninitialized value in string at ./send line 9, <FILE2> line 1.
Use of uninitialized value in string at ./send line 10, <FILE2> line 1.
Use of uninitialized value in string at ./send line 9, <FILE2> line 2.
Use of uninitialized value in string at ./send line 10, <FILE2> line 2.
Use of uninitialized value in string at ./send line 9, <FILE2> line 3.
Use of uninitialized value in string at ./send line 10, <FILE2> line 3.
Use of uninitialized value in string at ./send line 9, <FILE2> line 5.
Use of uninitialized value in string at ./send line 10, <FILE2> line 5.
Use of uninitialized value in string at ./send line 9, <FILE2> line 6.
Use of uninitialized value in string at ./send line 10, <FILE2> line 6.
Use of uninitialized value in string at ./send line 9, <FILE2> line 7.
Use of uninitialized value in string at ./send line 10, <FILE2> line 7.
Use of uninitialized value in string at ./send line 9, <FILE2> line 9.
Use of uninitialized value in string at ./send line 10, <FILE2> line 9.


Содержание

Сообщения в этом обсуждении
"PLEASE  HELP! Use of uninitialized value in string at"
Отправлено Pahanivo , 01-Ноя-10 13:02 
в скрипте какая-то жесть с циклами


"PLEASE  HELP! Use of uninitialized value in string at"
Отправлено squidward , 01-Ноя-10 15:48 
> в скрипте какая-то жесть с циклами

а есть какие- то предложения? как исправить?  


"PLEASE  HELP! Use of uninitialized value in string at"
Отправлено Pahanivo , 01-Ноя-10 15:51 
>> в скрипте какая-то жесть с циклами
> а есть какие- то предложения? как исправить?

1) сформулировать задачу
2) переписать скрипт - думаю хешами тут можно уложить с пять строк и пуру циклов


"PLEASE  HELP! Use of uninitialized value in string at"
Отправлено squidward , 01-Ноя-10 16:30 
>>> в скрипте какая-то жесть с циклами
>> а есть какие- то предложения? как исправить?
> 1) сформулировать задачу
> 2) переписать скрипт - думаю хешами тут можно уложить с пять строк
> и пуру циклов

задача такая  
есть 2 списка, в первом  ip, адрес электронной почты и описание , во втором IP и трафик.
программа должна работать так - проверить если написан электронный  адрес в первом списке(есть такие записи где только ip), найти из 2-го соответствующий трафик и выводить на экран  


"PLEASE  HELP! Use of uninitialized value in string at"
Отправлено erera22 , 01-Ноя-10 16:54 
Какие-то цикли по простой переменной, ниче не понял. Попробуй так:

#!/usr/bin/perl -w
use strict;

my %hash = ();
my ($fpath, $ipemail, $output) = ('/home/user', 'ip-email', 'output');
my ($ipaddr, $mail, $desc);

open (IPEMAIL, "< $fpath/$ipemail") or die "Could not open $fpath/$ipemail\n";
while (<IPEMAIL>) {
   ($ipaddr, $mail, $desc) = split (/\s+/, $_);
   if (length $mail > 0) {
      $hash{ $ipaddr }{ mail } = $mail;
      $hash{ $ipaddr }{ desc } = $desc;
   }
}

open (OUT, "< $fpath/$output");
while (<OUT>) {
   my ($ipaddr, $data) = split (/\s+-\s+/, $_);
   chomp ($data);
   print "$ipaddr $hash{ $ipaddr }{ mail } $hash{ $ipaddr }{ desc } $ipaddr - $data\n" if exists $hash{ $ipaddr };
}


"PLEASE  HELP! Use of uninitialized value in string at"
Отправлено squidward , 02-Ноя-10 08:45 
Огромное спасибо erera22, вроде работает :)


>[оверквотинг удален]
> $desc;
>    }
> }
> open (OUT, "< $fpath/$output");
> while (<OUT>) {
>    my ($ipaddr, $data) = split (/\s+-\s+/, $_);
>    chomp ($data);
>    print "$ipaddr $hash{ $ipaddr }{ mail } $hash{ $ipaddr
> }{ desc } $ipaddr - $data\n" if exists $hash{ $ipaddr };
> }