我正在使用perl解析崩溃日志,我想提取回溯组件。我使用以下命令获取日志文件:
$log = `adb shell 'ls -d ./tombstones/*' |grep tombstone_ | tr '\r' ' ' | tail -n1 | xargs adb shell cat`;
(我不熟悉perl,你可以看到)
我想扫描生成的变量(log)以获取回溯部分。这些部分存在于文本:“backtrace”和以下空行之间。
我的问题是,如何将触发器操作符应用于局部变量,就像它是文件输入一样?
答案 0 :(得分:1)
你需要使用触发器操作器吗?正则表达式怎么样?
@backtrace_sections = $log =~ /(^backtrace.*?)\n\n/gm;
答案 1 :(得分:1)
我认为你想要的是构造
的等同物while (<>) {
if (m/backtrace/ .. m/^$/) {
# processing
}
}
我认为有两种方法可以做到这一点:
在数组上下文中使用反引号运算符:
my @lines = qx{$your_command};
for (@lines) {
if (m/backtrace/ .. m/^$/) {
# process
}
}
使用open
打开文件:
open my $fh, '-|', qq{$your_command} or die "Can't open command: $!";
while (<$fh>) {
if (m/backtrace/ .. m/^$/) {
# process
}
}
close $fh or die "close failed: $! $?";
这样做会产生很好的效果,您无需将整个输出读入内存。