[image]

Как установить и начать работать с Perl

 
RU <=KRoN= [Автогенерация]> #05.03.2002 20:32
+
-
edit
 
Комментарии и обсуждения страницы Как установить Perl и начать с ним работать.

Убедительная просьба писать сюда только по теме, касающейся данной страницы!
 
RU <RSS from CasioPV> #06.03.2002 04:34
+
-
edit
 
Чем отличается "старый перл без наворотов"?
Если он меньше, и его можно без проблем заменить на "полный", однозначно просим его выложить.
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
Да, есть ActivePerl 5.2.2 весом около 5.5Мб.
Обычный exe-шник.
Сегодня днём выложу (диск на работе лежит).
В принципе, у него может не хватать каких-то хитрых библиотек. Но если это так, то обновить его потом, естественно, можно будет.
   
RU <mao1 from CasioPV> #06.03.2002 06:44
+
-
edit
 
Какую литературу по Perl стоит почитать для начала (на русском), шоб "легко и доступно"?
 
RU <mao1 from CasioPV> #06.03.2002 06:48
+
-
edit
 
Какую литературу по Perl стоит почитать для начала (на русском), шоб "легко и доступно"?
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
Perl 5.2.2 можно скачать с любой из ссылок отсюда:


По поводу литературы по Perl для начинающих - мне как-то ничего не попадалось, с чего легко бы было начать "с нуля". Так что сам попробую восполнить :) А если уже есть хоть небольшой опыт, то можно порыться в документации на Море(!) аналитической информации - я оттуда начинал. Ну а потом можно лезть в эхоконференцию fido7.ru.perlfido7.ru.perl.cgi - для Web-программирования).
   
+
-
edit
 

Floyd

аксакал

А кто-нибудь имеет навыки в Perl?
   13.0.113.0.1

Floyd

аксакал

Floyd> А кто-нибудь имеет навыки в Perl?

Упс, тема на столько старая что даже находится непонятно где.
   13.0.113.0.1

stas27

модератор
★★★
Floyd> А кто-нибудь имеет навыки в Perl?

Немножко я (в принципе он единственный язык, на котором я скриптю, но программки не слишком сложные делать нужно cамому - для сложных есть студенты и постдоки :F)
   13.0.113.0.1

Floyd

аксакал

stas27> Немножко я (в принципе он единственный язык, на котором я скриптю, но программки не слишком сложные делать нужно cамому - для сложных есть студенты и постдоки :F)

Привет, Стас.

Вопрос больше по WEB тематике. У меня почему-то в cgi скрипте не отрабатывает вызов system (), который должен запускать еще один скрипт.


code text
  1. #!/usr/bin/perl -w
  2. # Delete unncessary environment variables
  3. delete @ENV{'PATH', 'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
  4.  
  5. use strict;
  6. use CGI::Carp qw(fatalsToBrowser);
  7. use CGI qw/:standard/;
  8. my $query=new CGI;
  9. print header;
  10. print start_html;
  11. print h1("TEST ARDUINO WEB UI"),"\n";
  12.  
  13. my $ledon=param('ledon');
  14.  
  15. #Print out the controls
  16. print p("<a href=\"\/cgi-bin/ar.cgi?ledon=true\">LEDON</a> | <a href=\"\/cgi-bin/ar.cgi?ledon=false\">LEDOFF</a>"),"\n";
  17.  
  18. unless ( $ledon ){
  19. print p("Please select an option from the above list"),"\n";
  20. print end_html;
  21. exit;
  22. }
  23.  
  24. #Strip any non-word characters from $mute and non-digits from $volume
  25. $ledon =~ s/\W+//g;
  26. #$volume =~ s/\D+//g;
  27.  
  28.  
  29. #Do the work
  30. system ("/usr/local/bin/ledon.pl")  if ($ledon eq "true");
  31. #system ("/bin/echo 111 > /dev/pts/2")  if ($ledon eq "false");
  32. system ("/var/www/cgi-bin/ledoff.pl >/dev/null")  if ($ledon eq "false");
  33.  
  34. print end_html;
  35. exit;


Вызов system ("/usr/local/bin/ledon.pl") if ($ledon eq "true"); не исполняется, не выдавая каких-либо ошибок.
   13.0.113.0.1

stas27

модератор
★★★
...
Floyd> Вопрос больше по WEB тематике. У меня почему-то в cgi скрипте не отрабатывает вызов system (), который должен запускать еще один скрипт.
Floyd> Вызов system ("/usr/local/bin/ledon.pl") if ($ledon eq "true"); не исполняется, не выдавая каких-либо ошибок.

А без ИФа он запускается?
   13.0.113.0.1

Floyd

аксакал

stas27> А без ИФа он запускается?
Неа.
Видимо дело в банальных правах, пользователь, под которым работает Apache, не может выполнить system ().
   13.0.113.0.1
+
-
edit
 

Balancer

администратор
★★★★★
Floyd> А кто-нибудь имеет навыки в Perl?

Это к десятилетию темы? :)
   
+
-
edit
 

Balancer

администратор
★★★★★
Floyd> Видимо дело в банальных правах, пользователь, под которым работает Apache, не может выполнить system ().

Я напрочь не помню, не настраивается ли где-то в Перле дефолтовый запрет на некоторые функции. Ибо сегодня (и давно) хорошим тоном считается не разрешать HTTP-приложению выполнять системные вызовы.

Права на исполнение для юзера, под которым Апач работает у скрипта точно есть?
   
+
-
edit
 

Floyd

аксакал

Balancer> Права на исполнение для юзера, под которым Апач работает у скрипта точно есть?

А может я и ошибаюсь:

Разрешено исполнение для всех и system() возвращает 0, т.е. как бы выполнилось, но результата нет.
   13.0.113.0.1
+
-
edit
 

Balancer

администратор
★★★★★
Floyd> т.е. как бы выполнилось, но результата нет.

Ну поставь в скрипт что-то типа touch /tmp/gotcha.flag и сразу увидишь, вызвался он или нет :)
   
+
-
edit
 

Floyd

аксакал

Balancer> Ну поставь в скрипт что-то типа touch /tmp/gotcha.flag и сразу увидишь, вызвался он или нет :)

Так в том то и дело:

code text
  1. ...
  2. $status=system ("/bin/touch /tmp/222");
  3. print h1($status);
  4. ...


Код завершения (status) равен 0, но файл в /tmp не создается.
   13.0.113.0.1
+
-
edit
 

Balancer

администратор
★★★★★
Floyd> Код завершения (status) равен 0, но файл в /tmp не создается.

Тогда сложно в теории что-то подсказать. Я как-то привык подобные проблемы «пальцами» решать, не головой. Может, скрипт в chroot'е каком-нибудь?
   

stas27

модератор
★★★
stas27>> А без ИФа он запускается?
Floyd> Неа.
Floyd> Видимо дело в банальных правах, пользователь, под которым работает Apache, не может выполнить system ().

А это всё под чем - под Линуксом? Судя по вашему с Ромой диалогу, действительно похоже на конфликт прав (либо втупую прав хттпд юзера, либо загадочный (для меня) SELinux).

У меня проблем нет, но у меня и проги бегают от полноправных юзеров, а не веб демонов ;) .
   13.0.113.0.1

Floyd

аксакал

stas27> А это всё под чем - под Линуксом? Судя по вашему с Ромой диалогу, действительно похоже на конфликт прав (либо втупую прав хттпд юзера, либо загадочный (для меня) SELinux).

linux, при этом selinux не установлен. И все же дело не в правах, если файлу стоит запрет на исполнение то вызов возвращает код -1.
Вообще из поиска в сети ясно только одно что дело не в Perl, такая же история с CGI C.
   13.0.113.0.1
+
-
edit
 

Balancer

администратор
★★★★★
Floyd> Вообще из поиска в сети ясно только одно что дело не в Perl, такая же история с CGI C.

Чисто для теста попробуй system() из PHP вызвать.
   
+
-
edit
 

Floyd

аксакал

Floyd>> Вообще из поиска в сети ясно только одно что дело не в Perl, такая же история с CGI C.
Balancer> Чисто для теста попробуй system() из PHP вызвать.

С PHP тоже есть подобные проблемы, он они решаются просто:


не работают php фукции exec() system() | Unixblog.org.UA

Столкнулся с проблемой, когда при запуске php скрипта через браузер функция exec() и system() не

// unixblog.org.ua
 



Хотя может и со всем остальным так же, я думаю дело в настройках CGI
   13.0.113.0.1
+
+1
-
edit
 

Floyd

аксакал

Floyd>>> Вообще из поиска в сети ясно только одно что дело не в Perl, такая же история с CGI C.


Что бы заставить Perl выполнять "не безопасные" вызовы необходимо использовать опцию -U

-U      This UNIX-based option will let Perl do unsafe operations.

Результат отрицательный, код завершения 0, но результат нет.

Когда-то для выполнения программ с установленным SUID применялась утилита suidperl, но она отмерла с версии 5.2


Execute CGI-Perl scripts as root | The WireFrame

Execute CGI-Perl scripts as root
Posted Mon, 16/06/2008 - 15:58 by Uditha Atukorala
When Apache executes CGI-Perl scripts they are executed as the apache user. So if you want to have some system commands which can be only executed as root (e.g. iptables commands) in your CGI scripts they will not get executed.
One solution is to use setuid mode in Perl.
For this you will need the perl-suid package (in Debian) or the special Perl program called suidperl.
# aptitude install perl-suid


// Дальше — www.thewireframecommunity.com
 

   13.0.113.0.1

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru