Perl打开名为变量的文件
为什么这个例子不起作用Perl打开名为变量的文件,perl,Perl,为什么这个例子不起作用 #!/usr/bin/perl use POSIX qw(strftime); use Time::Local; my $date = strftime "%Y-%m-%d", localtime; my $command = "ls clients/*/ERRORi/" . $date . "/*s"; @result = `$command`; foreach $group (@result) { my $file = '/opt/' . $group;
#!/usr/bin/perl
use POSIX qw(strftime);
use Time::Local;
my $date = strftime "%Y-%m-%d", localtime;
my $command = "ls clients/*/ERRORi/" . $date . "/*s";
@result = `$command`;
foreach $group (@result) {
my $file = '/opt/' . $group;
open( my $input_fh, '<', $file) || die "Can't open $file: $!";
print $input_fh;
}
但是如果我使用
ls/opt/clients/cli8832/ERRORi/2014-06-25/file.564159972s
它可以工作您的$file
变量包含一个尾随换行符,而您的实际文件名不包含
你应该把它吃出来。这是一个值得学习的糟糕的例子
- 在每个perl脚本中包括和
- 在进行文件处理时包括
- 最后,不要使用
,而是使用一个文件。这样就不需要再做了ls
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
use POSIX qw(strftime);
use Time::Local;
my $date = strftime "%Y-%m-%d", localtime;
for my $group (glob "clients/*/ERRORi/$date/*s") {
my $file = '/opt/' . $group;
open my $input_fh, '<', $file;
print $input_fh;
}
#/usr/bin/perl
严格使用;
使用警告;
使用自动模具;
使用POSIXQW(strftime);
使用时间::本地;
my$date=strftime“%Y-%m-%d”,本地时间;
对于我的$group(glob“clients/*/ERRORi/$date/*s”){
my$file='/opt/'.$group;
打开我的$input\u fh,'错误消息的格式是一个很好的线索。您的$文件中有一个新行。
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
use POSIX qw(strftime);
use Time::Local;
my $date = strftime "%Y-%m-%d", localtime;
for my $group (glob "clients/*/ERRORi/$date/*s") {
my $file = '/opt/' . $group;
open my $input_fh, '<', $file;
print $input_fh;
}