2014-10-20 3 views
0

Perl script читает url из файла конфигурации. В файлах конфигурационных файлов хранится как URL = http://example.com. Как я могу получить только имя сайта. Я пробовалКак вызвать оболочку из скрипта perl

open(my $fh, "cut -d= -f2 'webreader.conf'"); 

Но это не работает.

Пожалуйста, помогите!

+3

Вы передаете команду оболочки в качестве пути к файлу ... – m0skit0

+2

Лично я бы сказал «не надо». Существует не так много причин, чтобы попытаться сделать что-то вроде 'cut' изнутри perl. – Sobrique

ответ

5

Вы должны указать с читальными трубами -|, что далее следует команда, которая получает раздвоенную,

open(my $fh, "-|", "cut -d= -f2 'webreader.conf'") or die $!; 

print <$fh>; # print output from command 

Лучше подход будет читать файл непосредственно Perl,

open(my $fh, "<", "webreader.conf") or die $!; 
while (<$fh>) { 
    chomp; 
    my @F = split /=/; 
    print @F > 1 ? "$F[1]\n" : "$_\n"; 
} 
+0

Спасибо большое! Оно работает! – ayunt

0

Может быть что-то вроде этого ?

$ cat urls.txt 
URL=http://example.com 
URL=http://example2.com 
URL=http://exampleXXX.com 

$ ./urls.pl 
http://example.com 
http://example2.com 
http://exampleXXX.com 

$ cat urls.pl 
#!/usr/bin/perl 

$file='urls.txt'; 
open(X, $file) or die("Could not open file."); 

while (<X>) { 
    chomp; 
    s/URL=//g; 
    print "$_\n"; 
} 
close (X); 
+2

Вы не сообщаете '$!', Когда умираете, если файл открывается с ошибкой, вы не открываете три аргумента, см. [Perldoc open] (http://perldoc.perl.org/functions/open.html), no 'использовать строгую; используйте предупреждения; ' –

+1

Помимо вопросов, упомянутых @ Dr.Avalanche, вы также должны использовать лексические дескрипторы файлов. – dgw