我的文件包含:
AMQ8409: Display Queue details.
QUEUE(SYSTEM.DATATYPE.REPLY.QUEUE) TYPE(QLOCAL)
ACCTQ(QMGR) ALTDATE(2016-08-01)
ALTTIME(18.33.20) BOQNAME( )
AMQ8409: Display Queue details.
QUEUE(SYSTEM.DATATYPE.REQUEST.QUEUE) TYPE(QLOCAL)
ACCTQ(QMGR) ALTDATE(2016-08-01)
ALTTIME(18.32.37) BOQNAME( )
AMQ8409: Display Queue details.
QUEUE(SYSTEM.MESSAGE.ASSOCIATION.QUEUE)
TYPE(QLOCAL) ACCTQ(QMGR)
ALTDATE(2016-08-01) ALTTIME(18.32.37)
AMQ8409: Display Queue details.
QUEUE(SYSTEM.PENDING.DATATYPE.REPLY) TYPE(QLOCAL)
ACCTQ(QMGR) ALTDATE(2016-08-01)
ALTTIME(18.33.20) BOQNAME( )
我想从QUEUE选项中提取数据,假设输出如下,
SYSTEM.DATATYPE.REPLY.QUEUE
SYSTEM.DATATYPE.REQUEST.QUEUE
SYSTEM.MESSAGE.ASSOCIATION.QUEUE
SYSTEM.PENDING.DATATYPE.REPLY
我编写了一个代码来获取此输出,
use warnings;
use strict;
open (CHS_OUT, "cat test.txt|");
while (<CHS_OUT>) {
my ($QName) = /QUEUE\(([^()]+)\)/;
chomp($QName);
print "$QName \n";
}
然而,收到以下警告,
在连接(。)或字符串中使用未初始化的值$ QName test_str.pl第19行,第1行.SYSTEM.DATATYPE.REPLY.QUEUE 在连接(。)或字符串中使用未初始化的值$ QName test_str.pl第19行,第3行。使用未初始化的值 串联(。)中的$ QName或test_str.pl第19行的字符串, 第4行。在连接中使用未初始化的值$ QName (。)或test_str.pl第19行,第5行的字符串。使用 uninitialized值$ QName连接(。)或字符串at test_str.pl第19行,第6行.SYSTEM.DATATYPE.REQUEST.QUEUE 在连接(。)或字符串中使用未初始化的值$ QName test_str.pl第19行,第8行。使用未初始化的值 串联(。)中的$ QName或test_str.pl第19行的字符串, 第9行。在连接中使用未初始化的值$ QName (。)或test_str.pl第19行,第10行的字符串 uninitialized值$ QName连接(。)或字符串at test_str.pl第19行,第11行。
SYSTEM.MESSAGE.ASSOCIATION.QUEUE使用未初始化的值$ QName in 连接(。)或字符串在test_str.pl第19行,第13行。 在连接(。)或字符串中使用未初始化的值$ QName test_str.pl第19行,第14行。使用未初始化的值 串联(。)中的$ QName或test_str.pl第19行的字符串, 第15行。使用未初始化的值$ QName in 连接(。)或字符串在test_str.pl第19行,第16行。 SYSTEM.PENDING.DATATYPE.REPLY在中使用未初始化的值$ QName 在test_str.pl第19行第18行连接(。)或字符串。 在连接(。)或字符串中使用未初始化的值$ QName test_str.pl第19行,第19行。
如果我在代码中移除了use strict
和use warnings
,它就会成功,但是值下方有多个空格,输出如下,
SYSTEM.DATATYPE.REPLY.QUEUE
SYSTEM.DATATYPE.REQUEST.QUEUE
SYSTEM.MESSAGE.ASSOCIATION.QUEUE
SYSTEM.PENDING.DATATYPE.REPLY
这个输出不是我想要的,因为它在值下面有多个空白行,这个空格perl假设为undef值。
我想输出如下,每行没有空格,
SYSTEM.DATATYPE.REPLY.QUEUE
SYSTEM.DATATYPE.REQUEST.QUEUE
SYSTEM.MESSAGE.ASSOCIATION.QUEUE
SYSTEM.PENDING.DATATYPE.REPLY
我是否有可能使用next
使perl忽略处理undef值?
答案 0 :(得分:0)
对于不包含“Queue(”)的每一行,都会得到这个未定义的消息。 所以你必须检查一下:
while (<CHS_OUT>) {
my ($QName) = /QUEUE\(([^()]+)\)/;
if ($QName){
print "$QName \n";
}
}