一些提示:
- 始终在脚本顶部添加
use strict;
和。use warnings;
- 由于您正在处理读取和写入文件,因此您还应该添加
use autodie;
. 如果您无法打开文件或无法写入打开的文件,这将自动终止您的程序。
- 当 Perl 可能无需调用 OS 命令就可以完全按照您的意愿行事时,请不要使用 OS 命令。
- 子例程通常接受参数并返回某种值。在您的情况下,让您的
test
子例程返回一些内容以写入日志。或者,只创建一个写入日志的日志子例程,并让您的测试子例程调用它。
在这里,我正在反转您的子例程调用。我创建了一个write_to_log
子程序来处理我的子程序调用。我write_to_log
添加日期/时间戳并写下我的信息。我的各种子程序现在只需要write_to_log
我。
请注意,我的所有子例程都返回某种值。该say
命令(以及print
)在成功时返回非零值,0
在失败时返回 a。我可以用它来测试我对子程序的调用是否有效。
use strict;
use warnings;
use autodie;
use features qw(say); #Allows you to use `say` instead of `print:
my $log_file = "/usr/bin/log.txt"; #You have write permission to this directory?
open my $log_fh, ">", $log_file;
my test ( $log_fh ) or die qq(Can't write to the log); #Pass the file handle to log
my test2 ( $log_fh ) or die qq(Can't write to the log);
close $log_fh;
sub test {
return write_to_log ( $log_fh, "Hello World!" );
}
sub test2 {
return write_to_log ( $log_fh, "Goodbye World!" );
}
sub write_to_log {
my $file_handle = shift;
my $message = shift;
use Time::Piece;
my $time = localtime->cdate;
return say {$file_handle} "$time: $message";
}
这是一个网页,列出了学习现代 Perl的好书以及在这些书中寻找的内容。如果您开始学习 Perl,请使用其中一本书。