Perl打开文件,名称中包含变量

时间:2014-06-26 12:42:09

标签: 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;
  open( my $input_fh, '<', $file) || die "Can't open $file: $!";
  print $input_fh;
}

它将返回:

Can't open /opt/clients/cli8832/ERRORi/2014-06-25/file.564159972s
: No such file or directory at ./my.pl line 12.

但如果我做ls /opt/clients/cli8832/ERRORi/2014-06-25/file.564159972s就可以了

2 个答案:

答案 0 :(得分:8)

您的$file变量包含尾随换行符,而实际文件名则不包含。

你应该chomp出来。

答案 1 :(得分:2)

这是一个很难学习的榜样。

接下来是该示例的清理版本,尽管最后一行可能也是一个错误。

#!/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;
}