Perl ошибка сценария Не может использовать неопределенное значение в качестве ссылки на символ в строке ./sendEvent.pl 66 - PullRequest
0 голосов
/ 14 апреля 2020

Привет всем, я новичок в perl сценариях и ниже мой perl сценарий

#!/usr/bin/perl
#use strict;
use warnings;
use 5.010;

Я получаю сообщение об ошибке Не могу использовать неопределенное значение в качестве ссылки на символ в ./sendEvent .pl line 66.

Может кто-нибудь сказать, в чем проблема?

Ответы [ 2 ]

4 голосов
/ 14 апреля 2020

Кажется, что ваш сокет не подключен, так как именно здесь генерируется неопределенная ссылка. Попробуйте убедиться, что ваш сокет открыт с помощью вызова IO :: Socket ...

$sock = IO::Socket::INET->new(PeerAddr => "$hostname",
                              PeerPort => "$port",
                              Proto    => 'tcp')
or die "can't connect to port $port on $hostname: $!";

или что-то подобное.

Посмотрите, куда вас это приведет. По крайней мере, вы будете знать, правильно ли подключается сокет.

2 голосов
/ 14 апреля 2020

Внимание: OP

Предложение: использование ha sh упрощает ввод текста и делает код более читабельным

#!/usr/bin/perl
use strict;
use warnings;
use 5.010;

use IO::Socket;
use Getopt::Long qw(GetOptions);
use Data::Dumper;

my %unit;
my @keys = qw(host port source name value part ptype module);
my @threshold = ("1000000");

# Defaults to avoid typing parameters
%unit = (
            host    => 'igloz118',
            port    => '2010',
            source  => 'APG_HEALTH',
            name    => 'RawValueCount',
            value   => '1000002',
            part    => 'APG',
            ptype   => 'APG-Frontend',
            module  => 'connecting',
            devtype => 'Host', 
            group   => 'group', 
            dname   => '.lss.emc.com'
        );

GetOptions(
            'host|h=s'      => \$unit{host},
            'port|p=s'      => \$unit{port},
            'source|s=s'    => \$unit{source},
            'name|n=s'      => \$unit{name},
            'value|v=s'     => \$unit{value},
            'part|p=s'      => \$unit{part},
            'ptype|pt=s'    => \$unit{ptype},
            'module|m=s'    => \$unit{module}
        ) or die "Usage: $0 --n NAME\n";

$unit{device} = $unit{host}.$unit{dname};

say '::: Parameters :::::';
printf "%-8s = %s\n", $_, $unit{$_} for @keys;
say '::::::::::::::::::::';

my $sock = IO::Socket::INET->new(
                                    PeerAddr => $unit{hostname},
                                    PeerPort => $unit{port},
                                    Proto    => 'tcp'
        ) or die "can't connect to port $unit{port} on $unit{host}: $!";;

@keys = qw/group variable value device devtype module part parttype name threshold source/;

for (my $i = 0; $i <=0 ; $i++) {
    my($timestamp,$raw);
    $timestamp = time;
    $unit{threshold} = $threshold[$i];
    $unit{variable}  = join '.', @unit{qw/source device part name/};
    $raw = join "\t", ( '+r', $timestamp, @unit{@keys} );

    print "$raw";
    print $sock "$raw";
}

close($sock);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...