sub src_line_info { # see below for values for $addr2line, $exec, $cmd my ($addr2line, $exec) = @_; my ($cmd) = "xargs $addr2line -e $exec"; my ($tmpfile) = tmpnam(); my (@a2loutput); open(ADDRS, ">$tmpfile") or die "open($tmpfile) failed: $!\n"; foreach my $ra (@trace_addrs) { print ADDRS "$ra->[TADDR_ADDRESS]\n"; } close(ADDRS); $cmd = "$cmd < $tmpfile |"; open(LINES, $cmd) or die "open($cmd) failed: $!\n"; while () { chomp(); push(@a2loutput, [split(/:/, $_)]); } close(LINES); . . . }