Я очень новичок в perl и изо всех сил пытаюсь заставить этот скрипт работать.Missmatch в сообщении об ошибке сравнения массива «Аргумент» «не является числовым в элементе массива в '
Я взял кусочки или perl и gooten их, чтобы работать как отдельные разделы, но пытаясь объединить их вместе, он терпит неудачу. Даже с сообщениями об ошибках, которые появляются, я не могу найти, где моя ошибка.
Сценарий при работе и завершении читает выходной файл и проходит через него раздел моего раздела и использует новый выходной файл с не более чем заголовком с некоторым дополнительным текстом и значением количества строк в этом раздел.
Мои проблемы в том, когда он выполняет цикл для каждого ключевого слова в массиве, в котором он теперь терпит неудачу, с сообщением об ошибке «Аргумент» «не является числовым в элементе массива в '. Perl направляет меня в раздел в скрипте, но я не вижу, как я неправильно вызываю элемент. Все элементы в массиве являются альфа, но сообщение об ошибке ссылается на числовое значение.
Может ли кто-нибудь увидеть мою ошибку.
Спасибо
Вот сценарий
#!/usr/bin/perl -w
use strict;
use warnings;
use diagnostics;
# this version reads each variable and loops through the 18 times put only displays on per loop.
my $NODE = `uname -n`;
my $a = "/tmp/";
my $b = $NODE ;
my $c = "_deco.txt";
my $d = "_deco_mini.txt";
chomp $b;
my $STRING = "$a$b$c";
my $STRING_out = "$a$b$d";
my @keyword = ("Report", "Last", "HP", "sulog", "sudo", "eTrust", "proftp", "process", "active clusters", "pdos", "syslog", "BNY", "syslogmon", "errpt", "ports", "crontab", "NFS", "scripts", "messages");
my $i = 0;
my $keyword="";
my $x=0;
my $y=0;
my $jw="";
my $EOS = "########################################################################";
my $qty_lines=0;
my $skip5=0;
my $skipcnt=0;
my $keeplines=0;
my @HPLOG="";
do {
print "Reading File: [$STRING]\n";
if (-e "$STRING" && open (IN, "$STRING")) {
# ++$x; # proving my loop worked
# print "$x interal loop counter\n"; # proving my loop worked
for (++$i) { # working
while (<IN>) {
chomp ;
#if ($_ =~ /$keyword/) {
#if ($_ =~/$i /) {
#if ($_ =~ /$keyword[ $i ]/) {
if ($_ =~ /$keyword $i/) {
print " $i \n";
$skip5=1;
next;
# print "$_\n";# $ not initalized error when tring to use it
}
if ($skip5) {
$skipcnt++;
print "SKIP LINE: $_\n";
print "Header LINE: $_\n";
next if $skipcnt <= 5;
$skip5=0;
$keeplines=1;
}
if ($keeplines) {
# ++$qty_lines; # for final output
last if $_ =~ /$EOS/;
print "KEEP LINE: $_\n";
# print "$qty_lines\n"; # for final output
push @HPLOG, "$_\n";
# push @HPLOG, "$qty_lines\n";# for final output
}
} ## end while (<IN>)
} ## end for (++$i)
} ## end if (-e "$STRING" && open (IN, "$STRING"))
close (IN);
} while ($i < 19 && ++$y < 18);
Вот типовой раздел или входной файл. ################################################################################################################ ##############################
Checking for active clusters.
@@@@@@@@@
root 11730980 12189848 0 11:24:20 pts/2 0:00 egrep hagsd|harnad|HACMP|haemd
If there are any processes listed you need to remove the server from the cluster.
############################################################################
This is the output from Pdos log
Please review it for anything that looks like a users may be trying to run something.
@@@@@@@@@
This server is not on Tamos
############################################################################
This is the output from syslog.conf.
Look for any entries on the right side column that are not the ususal logs or location.
@@@@@@@@@
# @(#)34 1.11 src/bos/etc/syslog/syslog.conf, cmdnet, bos610 4/27/04 14:47:53
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
#
# bos610 src/bos/etc/syslog/syslog.conf 1.11
Я усеченный остальную часть файла
Добро пожаловать в Переполнение стека. Нет, мы не можем видеть вашу ошибку. Включите свой код с вашим вопросом. – mob
Да, я вижу вашу ошибку. Вы спрашиваете о коде, который вы не показывали. – TLP
Вот сообщение об ошибке вывода, поскольку оно терпит неудачу. – CharlieB