File :: Temp将系统命令输出到临时文件

时间:2016-04-19 08:58:51

标签: perl

我正在尝试将 tail命令的输出捕获到临时文件中。

这是我的apache access log

的示例

这是我到目前为止所尝试的内容。

#!/usr/bin/perl
use strict;
use warnings;
use File::Temp ();
use File::Temp qw/ :seekable /;

chomp($tail = `tail access.log`);

my $tmp = File::Temp->new( UNLINK => 0, SUFFIX => '.dat' );
print $tmp "Some data\n";
print "Filename is $tmp\n";

我不确定如何将$tail的输出传递给此temporoy文件。

由于

4 个答案:

答案 0 :(得分:0)

我会使用不同的方法来拖尾文件。看看File::Tail,我认为它会简化一些事情。

答案 1 :(得分:0)

听起来你需要的只是

print $tmp $tail;

但你还需要声明 $tail而你可能不应该chomp它,所以

my $tail = `tail access.log`;

答案 2 :(得分:0)

有很多方法可以做到这一点,但既然你很乐意使用模块,你也可以使用File::Tail;

use v5.12;
use warnings 'all';
use File::Tail;

my $lines_required = 10;
my $out_file = "output.txt";

open(my $out, '>', $out_file) or die "$out_file: $!\n";
my $tail = File::Tail->new("/some/log/file");
for (1 .. $lines_required)  {
    print $out $tail->read;
}
close $out;

这将占用并监视日志文件,直到它获得10个新行。如果您只想要最后10行的副本,最简单的方法是使用shell中的I / O重定向:tail /some/log/file > my_copy.txt

答案 3 :(得分:0)

经典的Perl方法是使用句柄的正确文件名吗?

struct profile *p = profiles;
double uf[ARRAY_SIZE];
int i;
double u, v, s;

for (i = 1; i <= n; i++, p++) {
    if (p->drctn)
        v = phi;
    else    v = TWOPI - phi;
    u = p->xfall*TWOPI;
    uf[i] = -(a0*cos(u + v) - a1*sin(u + v));
}