我尝试使用 perl 代码从下面的命令存储信息,
dis ql(*) all'|runmqsc MQ_NAME
假设该命令的输出如下:
AMQ8409: Display Queue details.
QUEUE(SYSTEM.RETAINED.PUB.QUEUE) TYPE(QLOCAL)
ACCTQ(QMGR) ALTDATE(2016-08-01)
ALTTIME(18.33.20) BOQNAME( )
CLWLPRTY(0) CLWLRANK(0)
CLWLUSEQ(QMGR) CRDATE(2016-08-01)
CRTIME(18.32.37) CURDEPTH(2)
MAXDEPTH(999999999) MAXMSGL(104857600)
AMQ8409: Display Queue details.
QUEUE(SYSTEM.SELECTION.EVALUATION.QUEUE)
TYPE(QLOCAL) ACCTQ(QMGR)
ALTDATE(2016-08-01) ALTTIME(18.33.20)
BOQNAME( ) BOTHRESH(0)
CLWLRANK(0) CLWLUSEQ(QMGR)
CRDATE(2016-08-01) CRTIME(18.32.37)
CURDEPTH(0) CUSTOM( )
IPPROCS(0) MAXDEPTH(999999999)
AMQ8409: Display Queue details.
QUEUE(SYSTEM.SELECTION.VALIDATION.QUEUE)
TYPE(QLOCAL) ACCTQ(QMGR)
ALTDATE(2016-08-01) ALTTIME(18.33.20)
BOQNAME( ) BOTHRESH(0)
CLWLRANK(0) CLWLUSEQ(QMGR)
CRDATE(2016-08-01) CRTIME(18.32.37)
CURDEPTH(0) CUSTOM( )
IPPROCS(0) MAXDEPTH(999999999)
因此,对于每个输出(我们可以看到有 3 个),我编写了一段代码来存储每个 MQ 队列名称的 QUEUE、CURDEPTH 和 MAXDEPTH 信息。
我的代码如下,
#!/usr/bin/perl
use warnings;
use strict;
my %QM;
my $qm = 'MQ_NAME';
open (CHS_OUT, "echo 'dis ql(*) all'|runmqsc $qm|");
while (<CHS_OUT>) {
my ($QUEUE, $QName) = / ( QUEUE ) \( ( [^)]+ ) /x;
if ( my ($item, $value)
= / ( CURDEPTH | MAXDEPTH ) \( ( [^)]+ ) /x )
{
$QM{$QName}{$item} = $value;
}
}
foreach my $Que (sort keys %QM) {
foreach my $v (keys %{ $QM{$Que} }) {
print "$Que : $v = $QM{$Que}{$v} \n";
}
}
我已经尝试将 $QName 设置为全局,但仍然无济于事,此代码仍然存在错误。
我的代码的输出:
Use of uninitialized value $QName in hash element at mq_queue_5.pl line 25, <CHS_OUT> line 7353.
Use of uninitialized value $QName in hash element at mq_queue_5.pl line 25, <CHS_OUT> line 7361.
Use of uninitialized value $QName in hash element at mq_queue_5.pl line 25, <CHS_OUT> line 7384.
Use of uninitialized value $QName in hash element at mq_queue_5.pl line 25, <CHS_OUT> line 7392.
: CURDEPTH = 0
: MAXDEPTH = 999999999
我已经坚持了好几天了,已经做了很多改变,但仍然没有帮助。