Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Външни команди и Oneliners
  1. Външни команди и Oneliners
     
Автор  eminem (05.02.2005 14:32)  съобщение до автора
Погледнат  3124 пъти  добави към любими
Оценка  добави коментар
Гласове  --  изпрати на приятел
Коментари  (0)  абонирай се за Perl
    Страница 1 / 1

 



Външни команди

Exec
Exec спира работата на скрипта Ви и стартира каквото сте му посочили. Ако не може да стартира външния процес, връща код за грешка. Не работи както трябва под Perl за Win32.
System
Стартира външна команда, която се изпълнява заедно със скрипта. Винаги връща отговор, който се попълва във $?. Това означава, че Вие може да тествате, дали програмата Ви работи. Всъщност Вие тествате да видите дали тя може да бъде стартирана, какво прави, когато е стартирана и каквото прави е извън ваш контрол, ако използвате system.
С примера по-долу ще илюстрирам system в дейстие. Стартирайте 'vol' от командния ред първо ако не сте запознат с нея за да видите резултата от нея. След това стартирайте 'vole' командата.
CODE
1
2
3
4
5
6
7
system("vole");

print "nnResult: $?nn";

system("vol");

print "nnResult: $?nn";

Както виждате, успешно системно извикване връща като резултат 0. Неуспешното връща число което е необходимо да разделите на 256 за да намерите истинската върната стойност. Също така забележете, че може да видите и изхода от командата.
Backticks
Между използването на `` и system и exec има разлики. Те също стартират външни процеси, но връщат изхода от процеса. След това Вие може да правите каквото си поизкате с изходната информация.
CODE
1
2
3
4
5
6
7
8
9
10
11
$volume=`vol`;

print "The contents of the variable $volume are:nn";

print $volume;

print "nWe shall regexise this variable thus :nn";

$volume=~m#Volume in drive w is (.*)#;

print "$1n";
Както виждате, командата vol се изпълнява. След това извеждаме на екрана изхода на командата. След това с малък регулярен израз извеждаме името на устройството, на което те.

Кога да се използват системни извиквания
Преди да почнете да използвате външни команди в скрипта си за извикване на net команди, обърнете внимание, че вече има написани отлични модули, които вършат отлична работа, и че всяко стартиране на външна команда забавя скрипта ви. Също така по-добре използвайте readdir, а не `dir` - по-бързо и ефикасно е, това се отнася за всички команди които вътрешни за Perl. Също така се гарантира, че при използването само на вътрешни команди, скрипта ще се изпълнява на 99,99% от всички съществуващи ОС, докато ако използвате външни команди това няма да е така.
Стартиране на процес
Проблема с backticks е че трябва да се изчака целия процес да завърши и тогава да анализирате и обработвате информацията. Това е голям проблем, ако кодът, който се връща е голям или процеса е бавен. можем да стартираме процес и през канал (pipe) да обработваме информацията, също както го правим с файл. Кодат по-долу е същия като отварянето на файл с две разлики:
•    Използваме външна команда, а не име на файл.
•    Канала е |, който следва името на командата.
CODE
1
2
3
4
open TRIN, "dir [quote];
while (<TRIN>) {
print
"$. $_";
}
Забележете, че | означава че информацията ще буде получена от външен процес. Също така Вие може да подавате информация на външни команди, ако | е първия символ.
Oneliners (Скриптове от командния ред)
Малък пример
Perl код може да се изпълнява директно и от командния ред. За пример:
CODE
1
perl -e"for (55..75) { print chr($_) }"
Флагът -e показва на Perl, че следват команди. Командите трябва да са в двойни кавички, не единични като в Unix. Командата в този пример извежда ASCII стойностите за номерата от 55 до 75.
Достъп до файлове
Следващия пример е установена практика за писане на команда за търсене на стринг в даден файл.
CODE
1
perl -e"while (<>) {print if /^[bv]/i}" shop.txt
while (<>) конструкцията ще отвори, всичко което е в @ARGV . В този случай, имаме файла shop.txt , който ще бъде отворен и ще бъдат принтирани редовете започващи с 'b' или 'v'. Този резултат може да се постигне и по по-кратък начин. Стартирайте perl -h и ще видите списък с опции за командния ред. Една от тях ще използваме сега, тя е -n, която слага - while (<>) {     } - около целия код между "", посочен с опцията -e. Така че:
CODE
1
perl -ne"print if /^[bv]/i" shop.txt
прави абсолютно същото като по-горния пример



   


Ключови думи: perl програмиране oneliner скрипт


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008