URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 30316
[ Назад ]

Исходное сообщение
"Как в Perl-скрипте получить тело письма!! "

Отправлено Anubis , 27-Май-03 13:39 
Я все перепробовал.Ничего не получается.
При отработке такого скрипта:
open(LG,">>/etc/test/test_sms");
while ($var=<stdin>){
  if ($var eq "\n")
  {
    $flag="readbody";
  }
  if ($flag eq "readbody")
  {
    push (@body, $var);
  }
print LG $var;
}
print LG @body;
close(LG);
ДАже файл не создается!!
Такое ощущение что stdin вобще не читается.
Почта точно перенаправляется на скрипт. Она точно не остается в ящике
пользователя.

Помогите!! Я уже не знаю за что братся!!Может дало в настройках FreeBSD?


Содержание

Сообщения в этом обсуждении
"Как в Perl-скрипте получить тело письма!! "
Отправлено DogEater , 27-Май-03 13:56 
>Я все перепробовал.Ничего не получается.
>При отработке такого скрипта:
>open(LG,">>/etc/test/test_sms");
>while ($var=<stdin>){
>  if ($var eq "\n")
>  {
>    $flag="readbody";
>  }
>  if ($flag eq "readbody")
>  {
>    push (@body, $var);
>  }
>print LG $var;
>}
>print LG @body;
>close(LG);
>ДАже файл не создается!!
>Такое ощущение что stdin вобще не читается.
>Почта точно перенаправляется на скрипт. Она точно не остается в ящике
>пользователя.
>
>Помогите!! Я уже не знаю за что братся!!Может дало в настройках FreeBSD?
>

попробуй: cat какое_нибудь_письмо | твой_скрипт

Кстати, зачем в /etc писать? Есть же /tmp или /home/youraccount наконец.


"Как в Perl-скрипте получить тело письма!! "
Отправлено админ , 27-Май-03 14:56 
>>Я все перепробовал.Ничего не получается.
>>При отработке такого скрипта:
>>open(LG,">>/etc/test/test_sms");
>>while ($var=<stdin>){
>>  if ($var eq "\n")
>>  {
>>    $flag="readbody";
>>  }
>>  if ($flag eq "readbody")
>>  {
>>    push (@body, $var);
>>  }
>>print LG $var;
>>}
>>print LG @body;
>>close(LG);
>>ДАже файл не создается!!
>>Такое ощущение что stdin вобще не читается.
>>Почта точно перенаправляется на скрипт. Она точно не остается в ящике
>>пользователя.
>>
>>Помогите!! Я уже не знаю за что братся!!Может дало в настройках FreeBSD?
>>
>
>попробуй: cat какое_нибудь_письмо | твой_скрипт
>
>Кстати, зачем в /etc писать? Есть же /tmp или /home/youraccount наконец.

test.pl

#/usr/bin/perl
stop: while(<>){last stop if /^\n/;}while(<>){print;}exit 0;

cat что-нибудь | test >> куда-нибудь

Зы: не проверял


"Как в Perl-скрипте получить тело письма!! "
Отправлено Anubis , 27-Май-03 15:11 
>попробуй: cat какое_нибудь_письмо | твой_скрипт
>
>Кстати, зачем в /etc писать? Есть же /tmp или /home/youraccount наконец.


Попробовал. Пишет собака вот что:
Use of uninitialized value at ./al.pl line такаято, <STDIN> chunk такойто.

Чего делать то с этим?Как это лечить?


"Как в Perl-скрипте получить тело письма!! "
Отправлено poor bugger , 27-Май-03 15:06 
open(LG,">/tmp/test_sms") || die$!;
while(<>)
{
   next if /^\n/;
   print LG || die$!;
}
close(LG) || die$!;

"Как в Perl-скрипте получить тело письма!! "
Отправлено poor bugger , 27-Май-03 15:08 
мой всяко круче

"Как в Perl-скрипте получить тело письма!! "
Отправлено poor bugger , 27-Май-03 15:20 
не, вот так:

open(LG,">/tmp/test_sms") || die$!;
while(<>)
{
   last if /^\n/;
}
print LG while(<>);
close(LG) || die$!;


"Как в Perl-скрипте получить тело письма!! "
Отправлено DogEater , 27-Май-03 16:47 
не круче а изящнее :-)

"Как в Perl-скрипте получить тело письма!! "
Отправлено админ , 27-Май-03 17:09 
>не круче а изящнее :-)

open(LG,">/tmp/test_sms") || die$!;

А что будет, если несколько процессов будут одновременно писать в это файл ?



"Как в Perl-скрипте получить тело письма!! "
Отправлено DogEater , 27-Май-03 17:12 
>>не круче а изящнее :-)
>
>open(LG,">/tmp/test_sms") || die$!;
>
>А что будет, если несколько процессов будут одновременно писать в это файл
>?

реализовать через lock файл