Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl打开名为变量的文件_Perl - Fatal编程技术网

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
    ,而是使用一个文件。这样就不需要再做了
下面是该示例的清理版本,尽管最后一行可能也是一个bug

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