2012-09-28 62 views
4

如何在Perl文件中寫入當前時間戳?如何在Perl文件中寫入當前時間戳?

我已經創建了一個名爲myperl.pl的文件,它將打印當前的時間戳。該文件如下:

#!/usr/local/bin/perl 
@timeData = localtime(time); 
print "@timeData\n"; 

現在我試圖將此文件的輸出重定向到另一個文本文件。該腳本如下:

#!/usr/local/bin/perl 
@myscript = "/usr/bin/myperl.pl"; 
@myfile = "/usr/bin/output_for_myperl.txt"; 
perl "myscript" > "myfile\n"; 

雖然運行此我得到以下錯誤:

perl sample_perl_script.pl
String found where operator expected at sample_perl_script.pl line 4, near "perl "myscript""
(Do you need to predeclare perl?)
syntax error at sample_perl_script.pl line 4, near "perl "myscript""
Execution of sample_perl_script.pl aborted due to compilation errors.

回答

5

你需要一個文件句柄寫入文件:

#!/usr/local/bin/perl 

use strict; 
use warnings; 

my $timestamp = localtime(time); 

open my $fh, '>', '/tmp/file' 
    or die "Can't create /tmp/file: $!\n"; 

print $fh $timestamp; 

close $fh; 

有些文檔: open,Leaning Perl

另一種解決方案是腳本witho ut文件句柄,只是一個打印,然後在命令行上:

./script.pl > new_date_file 
+0

謝謝編輯我的錯誤;) (錯誤的URL) 斜塔的Perl:池上增加。 –

+0

也改變它在標量上下文中調用'localtime'(因爲程序輸出了一些無用的東西),並在'open'中添加了一個錯誤檢查。 – ikegami

+1

「Leaning Perl」聽起來像是一本頗爲歪曲的書。 – TLP

23

另一個提示。如果你想控制時間戳的格式,我通常會像下面這樣引入一個子程序。這將返回一個格式爲「20120928 08:35:12」的標量。

sub getLoggingTime { 

    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); 
    my $nice_timestamp = sprintf ("%04d%02d%02d %02d:%02d:%02d", 
            $year+1900,$mon+1,$mday,$hour,$min,$sec); 
    return $nice_timestamp; 
} 

然後更改您的代碼:

my $timestamp = getLoggingTime(); 
+0

這個遊戲當我最近嘗試時,我的日期字符串是「19000100 00:00:25921516」。這是因爲這是一箇舊的答案,不再適用? – Brady

+1

@Brady:按照預期在20151012 22:13:39之間運行(win32上的perl 5.18.2) – zb226