我正在读取日志文件的内容,在行上执行正则表达式并将结果放入数组中,但由于某种原因没有输出。
use strict;
use warnings;
my $LOGFILE = "log.file";
my $OUTFILE = "out.file";
open(LOG, "$LOGFILE") or die ("Could not open $LOGFILE: $!\n");
open(TMP, ">", "$OUTFILE") or die ("Could not open $OUTFILE: $!\n");
my @data = (<LOG> =~ /<messageBody>(.*?)<\/messageBody>/sg);
print TMP "This is a test line. \n";
foreach (@data){
print "@data\n";
print "\n=======================\n";
}
close TMP;
close LOG;
我的输出是一个文件(out.file),唯一的内容是&#34;这是一个测试线。&#34;我知道正则表达式有效,因为我在提示符下尝试了: -lne&#39; BEGIN {undef $ /} while(/(.*?)</messageBody>/sg) {print $ 1} log.file&gt; TEST.FILE
我做错了什么?
答案 0 :(得分:0)
如果您想打印数据的项目,那么您应该这样做:
foreach $item (@data){
print TMP "$item\n";
print TMP "\n=======================\n";
}
$item
将循环遍历所有数组项,并将以TMP文件
答案 1 :(得分:0)
您的数据可能跨越线条。
因此,在使用正则表达式之前,你需要啜饮整个事物:
my $logdata = do {local $/; <LOG>};
my @data = $logdata =~ m{<messageBody>(.*?)</messageBody>}sg;