【问题标题】:Perl script error Can't use an undefined value as a symbol reference at ./sendEvent.pl line 66Perl 脚本错误 Can't use an undefined value as a symbol reference at ./sendEvent.pl 第 66 行
【发布时间】:2020-04-28 16:38:40
【问题描述】:

大家好,我是 perl 脚本的新手,下面是我的 perl 脚本

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

我收到了错误 不能在 ./sendEvent.pl 第 66 行使用未定义的值作为符号引用。

谁能告诉我是什么问题?

【问题讨论】:

  • print $sock "$raw" 看起来不对。
  • 实际上,假设 $sock 已打开,它可以打印到文件句柄。
  • 上次编辑后,这个问题没有意义。例如:"Can't use an undefined value as a symbol reference at ./sendEvent.pl line 66" sendEvent.pl 是什么?请回滚到以前的版本

标签: perl


【解决方案1】:

您的套接字似乎没有连接,因为那是生成未定义引用的地方。 尝试确保使用 IO::Socket 调用打开您的套接字...

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

或类似的。

看看你会得到什么。至少你会知道套接字是否连接正确。

【讨论】:

  • 非常感谢您的快速回复!!!!!!。是的,你是对的,这可能是原因,所以我正在重新启动服务器并检查它是否有效。目前,当我使用您提到的更改执行脚本时,我得到以下输出 - “无法连接到 lgloz118 上的端口 2010:无法连接,因为目标机器主动拒绝它。在 ./sendEvent.pl 第 31 行。” .工作后会更新.....
【解决方案2】:

收件人:OP

建议:使用散列可以简化输入并使代码更具可读性

#!/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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-11
    • 2022-09-27
    • 2022-12-31
    • 2016-01-05
    • 2023-03-18
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多