2015-01-28 2 views
0

Я планирую преобразовать файл Perl в исполняемый файл, чтобы при запуске исполняемого файла он обнаружил все файлы *.css в текущем и выдает результат.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. 
+2

Код с отступами –

+1

Я набрал для вас код Perl. В будущем это нормально, если вы хотите наказать себя, написав плохо отформатированный код, который трудно читать, но если вы просите других о помощи в этом, пожалуйста, будьте любезны, чтобы правильно расставить его. – Borodin

ответ

2

Похоже $Directoryname является пустым или неопределенным, где вы присвоить значение для него?

Добавить use strict; в начале вашего скрипта, чтобы узнать, где у вас есть другие проблемы.

2

Проверить документы для opendir/readir и как они должны быть использованы,

use strict; 
use warnings; 

my $Directoryname = "bin"; 

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

Я сделал следующие изменения: мои @files; my $ Directoryname = '/ bin'; opendir (bin, $ Directoryname) или die "не может открыть каталог $ Directoryname"; @files = grep (/ \. Css $ /, readdir (bin)); foreach $ file (@files) { открыть мой $ handle, '<', $ file или die "не удалось открыть '$ file': $!"; \t в то время как (мой $ строка = <$handle>) { Еще перед той же самой ошибки – mohad

+0

@mohad Вы отсутствующий полный путь к файлу => 'открыть свой $ Ф.Х., "$ DirectoryName/$ файл";' –

+0

Где должен я Добавь это? Я довольно неуверен – mohad

3

переменной $Directoryname не имеют значения, связанное с ним.

Вы должны установить его с чем-то вроде

$Directoryname = 'bin'; 

Это сказало, чтобы найти все CSS файлы, я хотел бы использовать glob:

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

Спасибо, ребята! Я исправил проблему ... Прошел через readir/opendir и научился это кодировать!