Perl - 读取目录中扩展名为" .css"的所有文件。

时间:2015-01-28 08:11:50

标签: perl search dir

我计划将Perl文件转换为可执行文件,以便在运行可执行文件时,它应检测当前目录中的所有*.css文件并抛出输出。

有办法做到这一点吗?我有一个写下面的程序,它会抛出一条错误信息。你能帮我调整一下吗?

因为我正在努力学习Perl,请耐心等待。要读取的目录是bin

#!/usr/bin/perl

my @files;
opendir(bin, $Directoryname) or die "cannot open directory $Directoryname";
@files = grep(/\.css$/, readdir(bin));

# my $regex = qr/
# (?=.*font-size) &&
# (?!.*%)
# /ix;

foreach $file (@files) {

  open my $handle, '<', $file or die "could not open '$file': $!";

  while (my $line = <$handle>) {

    if ($line =~ /font-size/) {
      if ($line !~ /%/) {
        print "\n Forced Font is detected. -- $line\n";
      }
      else {
        print "\n Font is specified in % -- $line \n";
      }
    }

    if ($line =~ /line-height/) {
      print "\n Forced Line-height is detected. \n";
    }

    if ($line =~ /position:absolute/) {
      print "\n position:absolute is detected. \n";
    }
  }
}

close(txt);

这是输出:

cannot open directory at C:\Perl64\bin\sample1.pl line 4. 

4 个答案:

答案 0 :(得分:3)

变量$Directoryname没有与之关联的值。

你应该用

之类的东西来设置它
$Directoryname = 'bin';

那就是说,为了找到所有 css 文件,我会使用glob

my @files = glob('*.css');

答案 1 :(得分:2)

看起来$Directoryname是空白还是未定义在哪里为其分配值?

在脚本的开头添加use strict;,以查看您遇到其他问题的位置。

答案 2 :(得分:2)

检查opendir/readir的文档以及如何使用它们

use strict;
use warnings;

my $Directoryname = "bin";

opendir(my $dir, $Directoryname) or die "$! $Directoryname";
my @files = grep(/\.css$/, readdir($dir));
# ..

答案 3 :(得分:0)

谢谢你们!我解决了这个问题...通过readir / opendir并学会了如何编写代码!