Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > формы, скрипты...


Автор: r 19.2.2005, 23:12
Приветик Всем!
У меня имеется куча скриптов, в которых содержится вызов форм, их обработка, и т. д.
Причём один к примеру скрипт вываливает форму, проверяет данные уже другой, затем
вызывается третий он вываливает уже другую форму... Количество скриптов растёт, а на
фига енто мне надо?
Внимание вопрос:
Хочу как нибудь обьединить эти скрипты в один, скажем использовать их как функции,
только как мне принимать данные от клиента посредством POST к примеру?

Автор: korob2001 19.2.2005, 23:48
Цитата

Хочу как нибудь обьединить эти скрипты в один, скажем использовать их как функции,
только как мне принимать данные от клиента посредством POST к примеру?

Принимай с помощью модуля CGI, можно вообщето и в ручную, но модуль CGI надёжнее. Вот пример:
Код

#!/usr/bin/perl
use strict;
use CGI;
my $cgi = new CGI;
my $param1 = $cgi->param("param1");
print $cgi->header( -charset => 'Windows-1251' );
print $cgi->start_html;
print $cgi->b( $param1 );
print $cgi->end_html;

Удачи.

Автор: r 22.2.2005, 00:18
Простите за назойливость, код работоспособный, огромное спасибо, не могли-бы Вы
мне обьяснить эту строку:
Код

print $cgi->b( $param1 );

в частности что эта за символ-> b?

Автор: korob2001 22.2.2005, 00:32
Строка:
print $cgi->b( $param1 );
Метод b, просто оборачивает строку в тэги <B>Строка</B>, т.е. получаем на выходе строку, которая написана полужирным шрифтом.

На самом деле, можно описать всю html страничку, только при промоши модуля CGI. Не используя в программе таких записай:
print "<center><font color='#ff0000'><b>Hello, world!</b></font></center>";
гораздо красивее так:
print $cgi->center( $cgi->font( { -color => '#ff0000' }, $cgi->b("Hello, world!") ) );
Хотя, может это только моё мнение.

Автор: Guest 22.2.2005, 08:38
А я так обычно пишу
Код

$a = param('a');

Так ро моему логичнее и проще

Автор: korob2001 22.2.2005, 20:04
Цитата

Так ро моему логичнее и проще

;))))) Ну это уже кому как, мне например объектно ориентированный подход более по душе. Но можно конечно и так, только в таком случае нужно следить за пространством имён, да бы не было конфликта.

Автор: r 23.2.2005, 11:18
Всем огромное спасибо, буду про модуль искать мануал.

Автор: korob2001 23.2.2005, 19:05
Ищи здесь:
http://forum.vingrad.ru/index.php?showtopic=1167
Спасибо админу.

Автор: r 23.2.2005, 22:42
1. Там уже качал, и как описывать html теги не видел.
2. И всё равно не получил того что хотел. Вот внизу пример имеется,
получается что как не выдавай форму(с помощью CGI.pm etc...)
все равно данные обрабатывать будет другой скрипт я не прав?


<form method="POST" action="http://localhost/cgi-bin/script.pl">

...


</form>

Автор: korob2001 24.2.2005, 00:25
Вот, специально для тебя, набросал рабочий пример, простой, гостевой книги. В нём ты не увидешь ниодного HTML тэга, потому как эта программа написана на чистом CGI. Просто скопируй код ниже и сохрани его в файл с любым именем, толко расширение должно быть как у выполняемого файла, как правило .pl или .cgi. Затем можешь, не о чём не волнуясь, запустить его на выполнение через браузер и протестировать его, все необходимые, дополнительные файлы программа создаст сама. Вообще-то данный код получился немного объёмный, но это я сделал специально, что бы ты понял принцип программирования с помощью модуля CGI.pm. Особого контроля вводимой информации я не делал, так как суть была показать рабочий пример CGI.pm программы, а не её безопасность.
Вот код:
Код

#!/usr/bin/perl -w
use strict;
use CGI;
use Fcntl qw( :flock );

my $file = "messages.txt";

my $cgi = new CGI;

sub start_lock {
   open( BLOCK, ">> lock_file.sem" ) or die $!;
   flock( BLOCK, LOCK_EX );
}

sub stop_lock {
   close( BLOCK );
}

sub show_form {
   print $cgi->start_html( -title => 'Гостевая книга' ),
         $cgi->start_center,
         $cgi->start_form(),
         $cgi->table( { -width => 400,
                        -border => 1,
                        -cellpadding => 5,
                        -cellspacing => 0 },
            $cgi->Tr( [
               $cgi->td( { -align => 'center',
                           -bgcolor => '#555555',
                           -colspan => 2 },
                   $cgi->font( { -color => '#ffffff',
                                 -size => '+12' },
                       $cgi->b("Гостевая книга"),
                   ),
               ),
            ] ),
            $cgi->Tr( [
              $cgi->td( { -align => 'left' }, [
                       $cgi->b("Ваше имя:"),
                       $cgi->textfield( -name => 'name',
                                        -size => 35,
                                        -override => 1 ),
              ] ),
            ] ),
            $cgi->Tr( [
              $cgi->td( { -align => 'left' }, [
                       $cgi->b("Ваша фамилия:"),
                       $cgi->textfield( -name => 'family',
                                        -size => 35,
                                        -override => 1 ),
              ] ),
            ] ),
            $cgi->Tr( [
              $cgi->td( { -align => 'left',
                          -valign => 'top' }, [
                       $cgi->b("Сообщение:"),
                       $cgi->textarea( -name => 'mess',
                                       -rows => 5,
                                       -cols => 30,
                                       -override => 1),
              ] ),
            ] ),
            $cgi->Tr( [
              $cgi->td( { -align => 'center',
                          -bgcolor => '#555555',
                          -colspan => 2 },
                       $cgi->submit( -name => 'send',
                                     -value => 'Отправить' ),
                       $cgi->reset( -value => 'Очистить' ),
              ),
            ] ),
         ),
         $cgi->end_form(),
         $cgi->br(), $cgi->br();

         if ( -e $file ) {
              open( F, "< $file" ) or die $!;
               while ( <F> ) {
                  my( $name, $family, $mess, $tm ) = split("µ");
                  print $cgi->table( { -width => 400,
                                       -cellpadding => 5,
                                       -cellspacing => 0,
                                       -border => 1 },
                             $cgi->Tr( [
                                 $cgi->td( { -width => '100%',
                                             -align => 'left',
                                             -bgcolor => '#555555' },
                                     $cgi->b( { -style => "color: #ffffff" }, "$family $name"),
                                 ),
                             ] ),
                             $cgi->Tr( [
                                 $cgi->td( { -width => '100%',
                                             -align => 'left',
                                             -bgcolor => '#cccccc' },
                                     $cgi->b( $mess ),
                                 ),
                             ] ),
                             $cgi->Tr( [
                                 $cgi->td( { -width => '100%',
                                             -align => 'left',
                                             -bgcolor => '#555555' },
                                     $cgi->b( { -style => "color: #ffffff" }, $tm ),
                                 ),
                             ] ),
                        ),
                        $cgi->br, $cgi->br;
               }
            close( F );
         }
         print $cgi->end_center,
               $cgi->end_html;
}

sub add_mess {
   my $name = $cgi->param('name');
   my $family = $cgi->param('family');
   my $mess = $cgi->param('mess');
   my $tm = localtime;

   $mess =~ s/\n/$cgi->br/eg;

   # Делаем не большую обработку информации
   for ( $name, $family, $mess ) {
         s/^\s+//;
         s/\s+$//;
         s/\s+/ /g;
         s/µ//g;
   }

   unless ( $name or $family ) {
            $name = "пользователь";
            $family = "Анонимный";
   }

   start_lock;
   open( F, ">> $file" ) or die $!;
     print F "${name}µ${family}µ${mess}µ${tm}\n";
   close ( F );
   stop_lock;
}

print $cgi->header( -charset => 'Windows-1251' );
unless ( $cgi->param('send') eq 'Отправить' ) {
        show_form;
} else {
        add_mess;
        show_form;
}

Если возникнут вопросы, пиши сюда. Постараюсь пояснить.
Удачи.

Автор: Opik 25.2.2005, 15:03
korob2001
можешь объяснить 2 момента:
Код

  for ( $name, $family, $name ) {
        s/^\s+//;
        s/\s+$//;
        s/\s+/ /g;
        s/µ//g;
  }

и
Код

  unless ( $name or $family ) {
           $name = "пользователь";
           $family = "Анонимный";
  }

Автор: GoodBoy 25.2.2005, 15:15
Opr
Код
for ( $name, $family, $name ) {
       s/^\s+//;
       s/\s+$//;
       s/\s+/ /g;
       s/µ//g;
 }

поочередно каждая из переменных $name, $family и $name чистится от пробелов в начале, конце, последовательности из нескольких пробелов заменяются на 1 пробел, а символ µ удаляется...

хотя зачем 2 раза $name... видимо просто описка...

Код
unless ( $name or $family ) {
          $name = "пользователь";
          $family = "Анонимный";
 }

если не заданы переменные $name и $family - то им присваюваются значения.

unless ( $name or $family ) - то же самое, что и if ( !$name and !$family )

Автор: korob2001 25.2.2005, 15:34
Opr - GoodBoy уже ответил на твои вопросы, я опоздал. ;))))

GoodBoy - точно я 2 раза указал переменную $name, на самом деле я имел ввиду перменную $mess на месте второй переменной $name. Уже исправил.

Автор: Opik 26.2.2005, 16:21
А, и
Код

use Fcntl qw( :flock );

это для работы с файлами?

Автор: korob2001 26.2.2005, 16:39
Цитата

это для работы с файлами?

Да, это для того, что бы блокировать файл при открытии для записи. Используется здесь:
Код

sub start_lock {
  open( BLOCK, ">> lock_file.sem" ) or die $!;
  flock( BLOCK, LOCK_EX );
}

sub stop_lock {
  close( BLOCK );
}

если нужно заблокировать файл, делаем там:
Код

start_lock;    # Блокируем файл

# ЗДЕСЬ ОТКРЫВАЕМ ФАЙЛ
# Делаем запись
# ЗАКРЫВАЕМ ФАЙЛ

stop_lock;    # Разблокируем файл

Можно было бы сделать это и в ручную, но лично я предпочитаю юзать модуль Fcntl, тем более он входит в стандартный пакет Perl.

Автор: r 6.3.2005, 10:42
Потрясающе, что называется красота в программировании. Если конечно есть возможность дай линк, на тот мануал где ты это
прочитал про CGI.pm. У меня есть, но какой-то кривой и неполный. Сразу-же начал переписывать все скрипты по новой. Возникли вопросы. Буду задавать их постепенно.
Код

unless ( $cgi->param('send') eq 'Отправить' ) {
    fun_1;
} else {
    fun_2;
}

Этот пример кода только с одной формой, а у меня их несколько, и в зависимости от данных переданных пользователем будет вызыватся какая-то из них, как мне поочерёдно принимать данные от них? Спасибо.

Автор: korob2001 6.3.2005, 16:04
Цитата

Если конечно есть возможность дай линк, на тот мануал где ты это прочитал про CGI.pm.

Сылку я уже давал, так же читай книги по CGI программированию, особенно хочется выделить такие как:
1. Программирование на CGI.pm ( эта книга написана Линкольном Штэйном, автором модуля CGI.pm ).
2. CGI программирование на Perl (Скотт Гулич, Шишир Гундаварам, Гюнтер Бирзнекс).
3. Разработка CGI приложений на Perl ( Кевин Мельтцер, Брент Михальски ).
Цитата

Этот пример кода только с одной формой, а у меня их несколько, и в зависимости от данных переданных пользователем будет вызыватся какая-то из них, как мне поочерёдно принимать данные от них?

Даже если у каждой формы поля с одинаковыми именами, то можно присвоить разные имена для кнопок типа SUBMIT, по ним определять какая из форм была передана CGI программе.

Автор: r 6.3.2005, 18:15
Цитата(korob2001 @ 6.3.2005, 16:04)
Даже если у каждой формы поля с одинаковыми именами, то можно присвоить разные имена для кнопок типа SUBMIT, по ним определять какая из форм была передана CGI программе.

Можно с этого момента поподробнее:))), т. к. как я только не пробовал.
Код

f($cgi->param('send')){
     show_form;
}else{
     fun1;
     fun2;
}

if ( $cgi->param('query') ) {
     fun3;
} else {
     fun4;      
}

iЭтот код выводит две формы, не дожидаясь пока получу параметры по первой, запутался...

Автор: r 6.3.2005, 22:18
Нашёл перевод CGI.pm, но там пример, как получить параметры один, и совершенно не подходящий. Нужен хоть какой нибудь пример, как выдать форму и тут-же получить
данные из этой формы, и так раза три в одном скрипте. Пример который из гостевой книги непонятен:
Код

print $cgi->header( -charset => 'Windows-1251' );
unless ( $cgi->param('send') eq 'Отправить' ) {
       show_form;
} else {
       add_mess;
       show_form;
}


Я тут кое-что придумал правда где-то ошибка...
Код

unless( my $par_1=$cgi->param()){
if($par eq 'send'){
show_form2;
}elsif($par eq 'query'){
show_form3;
}
show_form1;
}

Автор: korob2001 6.3.2005, 22:35
Насколько я поня, у тебя есть несколько форм на одной странице. Ты хочешь узнать какая из форм была передана, для этого присваиваешь разные имена кнопкам SUBMIT. Например имя этой кнопки для первой формы такое name => "form1", для кнопки второй формы name => "form".

Теперь можно определить, какая из форм была переданна, таким условием.

Код

if ( $cgi->param('form1') eq 'Отправить' ) {
    # Делаем что-то с данными полученными от первой формы
} elsif ( $cgi->param('form2') eq 'Отправить' ) {
    # Делаем что-то с данными полученными от второй формы
} else {
    # Этот блок выполним в том случае, если никаких данных не было передано.
}

Можно было бы сделать и такую проверку:
Код

if ( defined $cgi->param('form1') ) {
    # Делаем что-то с данными полученными от первой формы
} elsif ( defined $cgi->param('form2') ) {
    # Делаем что-то с данными полученными от второй формы
} else {
    # Этот блок выполним в том случае, если никаких данных не было передано.
}

Удачи.

Автор: r 7.3.2005, 20:17
Да, всё заработало, спасибо. Вопросы ещё остались. Первое, странно как-то у тебя блокируются файлы, где-то читал что блокировать надо дескриптор файла. Второе
раньше когда я не знал что такое CGI.pm у меня был такой код:

Код

open(FL,'<../www/file.txt')|| die "file.txt ERORR!!!\n";
while(<FL>){
print "<a href='/script.pl'>";
print;
print "</a><br>";
}
close(FL);


То есть открывал файл и выводил всё содержимое в броузер причем как видишь создавал линки на это содержимое с указанием скрипта который это обрабатывал. Теперь пытаясь обьединить все скрипты в один ума не приложу как это переписать. Скрипт просто сохранял текст линка в файл. Спасибо.

Автор: korob2001 8.3.2005, 00:01
Цитата

Да, всё заработало, спасибо. Вопросы ещё остались. Первое, странно как-то у тебя блокируются файлы, где-то читал что блокировать надо дескриптор файла.

Всё верно, это когда блокируешь файлы в ручную. Я пользуюсь стандартным модулем Fcntl и нахожу этот способ более удобным. А вообще-то это дело вкуса. Как этот способ работает, я уже описывал ранее, в этой же теме.
Цитата

open(FL,'<../www/file.txt')|| die "file.txt ERORR!!!\n";
while(<FL>){
print "<a href='/script.pl'>";
print;
print "</a><br>";
}
close(FL);

Я не дома, потому нижеприведённый код не тестировал, но он не сильно большой, потому думаю ошибок не будет.
Код

open(FL,'<../www/file.txt')|| die "file.txt ERORR!!!\n";
while ( <FL> ) {
    print $cgi->a( { -href => '/script.pl' }, $_ ), $cgi->br;
}
close( FL );

Удачи.

PS: возникнут трудности, пиши. И ещё:
При вставке кода, пользуйся кнопкой "Код". Предидущие посты я подправил, но как ты наверное понимаешь, я не буду делать это за тебя, постоянно. Все последующие сообщения в которых будет вставлен код без подсветки, будут удаляться. Облегчи труд всех участников, хотя бы этим.

Автор: Guest 8.3.2005, 10:50
Привет korob2001, ты неправильно понял, смысл не в том как вставить линк. А в том что теряется идея обьединить все скрипты в один получается все равно вот так:
Код

<form action='http://localhost/cgi-bin/script.pl' method='POST'>
...
</form>

и вызывается другой скрипт, и не важно, сделано как линк или через форму.
Но это не важно, подумаешь будет два скрипта раз CGI.pm не совершенен.

Теперь другой вопрос вот html:
Код

<table width="100%" cellspacing="0" cellpadding="2" border="1">
 <tr><!-- Row 1 -->
   <td bgcolor="#0000FF">&nbsp;</td>
   <td bgcolor="#FF0000">&nbsp;</td>
   <td bgcolor="#0000FF">&nbsp;</td>
   <td bgcolor="#FF0000">&nbsp;</td>
 </tr>
 <tr><!-- Row 2 -->
   <td bgcolor="#FF0000">&nbsp;</td>
   <td bgcolor="#0000FF">&nbsp;</td>
   <td bgcolor="#FF0000">&nbsp;</td>
   <td bgcolor="#0000FF">&nbsp;</td>
 </tr>

</table>


А вот как с помощью CGI.pm:
Код

#!C:/Perl/bin/perl -w
use CGI;
my $cgi = new CGI;

sub show_form{
print $cgi->table( { -width => 400, -height => 400, -border => 1, -cellpadding => 5, -cellspacing => 0 }, ),
$cgi->Tr( [
$cgi->td( { -align => 'center', -bgcolor => 'blue',  -colspan => 2 },),
$cgi->td( { -align => 'center',  -bgcolor => 'red', -colspan => 2 },),
$cgi->td( { -align => 'center', -bgcolor => 'blue',  -colspan => 2 },),
$cgi->td( { -align => 'center',  -bgcolor => 'red', -colspan => 2 },),
  ] ),
$cgi->Tr( [
$cgi->td( { -align => 'center', -bgcolor => 'blue',  -colspan => 2 },),
$cgi->td( { -align => 'center',  -bgcolor => 'red', -colspan => 2 },),
$cgi->td( { -align => 'center', -bgcolor => 'blue',  -colspan => 2 },),
$cgi->td( { -align => 'center',  -bgcolor => 'red', -colspan => 2 },),
  ] ),

};


print $cgi->header( -charset => 'Windows-1251' );
print $cgi->start_html;
show_form;
print $cgi->end_html;


совершенно разное отображение, количество столбцов разное. Спасибо.

Автор: r 8.3.2005, 14:37
Цитата(Guest @ 8.3.2005, 10:50)
Но это не важно, подумаешь будет два скрипта раз CGI.pm не совершенен.

Виноват маэстро, простите, кривые руки.

Код

print $cgi->a( { -href => "script.pl?name='$_'"}, $_ ), $cgi->br;


Вот что мне надо было. Правда вот эти штуки остались ' ' вокруг текста в файле, ну это мелочи. Ну и здесь подправил:

Код

print $cgi->header( -charset => 'Windows-1251' );
if ( defined $cgi->param('form1') ) {
form1;
zak_vin;
} elsif ( defined $cgi->param('form2') ) {
form2;
}if ( defined $cgi->param(m/\sform3/) ) {
form3;
}else {
show_form;
};


А по таблицам вопрос не закрыт. Спасибо.

Автор: korob2001 9.3.2005, 04:01
Цитата

Вот что мне надо было. Правда вот эти штуки остались ' ' вокруг текста в файле, ну это мелочи.

Это само собой разумеется, убери эти символы из своего кода. Другими словами, просто замени эту строку:
Код

print $cgi->a( { -href => "script.pl?name='$_'"}, $_ ), $cgi->br;

на такую
Код

print $cgi->a( { -href => "script.pl?name=$_"}, $_ ), $cgi->br;

И найди отличие, тогда всё станет на свои места.
Цитата

А по таблицам вопрос не закрыт. Спасибо.

Не знаю на сколько правильно я тебя понял, постараюсь пояснить на примере:
Код

#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;

# В следующем массиве укажи все нужные цвета, они будут чередоваться
my @colors = qw( red blue green yellow darkviolet );

# Следуюцая подпрограмма будет при каждом её вызове,
# по очереди, менять цвет  на следующий по индексу и
# возвращать тот цет, который она заменила.
sub change_color {
   my $color = shift @colors;
   # Работаем со стёком
   push( @colors, $color );
   return \$color;
}

print $cgi->header( -charset => "Windows-1251" );
print $cgi->start_html( -title => "Change Colors" ),
     $cgi->start_table( -border => 1 ),
     $cgi->start_Tr;

for my $num ( 0..99 ) {
     print $cgi->end_Tr, $cgi->start_Tr unless ($num % 10);
     print $cgi->td( { -width => 100,
                       -bgcolor => ${ change_color() },
                       -align => "center" } , "Ячейка номер $num" );
}

print $cgi->end_Tr,
     $cgi->end_table,
     $cgi->end_html;

Если хочешь выводить только 2 цвета, просто удали не нужные цвета из массива @colors и добавь дополнительный вызов функции в условной конструкции unless. Таким образом:
Код

#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;

# В следующем массиве укажи все нужные цвета, они будут чередоваться
my @colors = qw( red blue );

# Следуюцая подпрограмма будет при каждом её вызове,
# по очереди, менять цвет  на следующий по индексу.
sub change_color {
   my $color = shift @colors;
   # Работаем со стёком
   push( @colors, $color );
   return \$color;
}

print $cgi->header( -charset => "Windows-1251" );
print $cgi->start_html,
     $cgi->start_table( -border => 1 ),
     $cgi->start_Tr;

for my $num ( 0..99 ) {
     unless ($num % 10) {
              change_color;
              print $cgi->end_Tr, $cgi->start_Tr;
     }
     print $cgi->td( { -width => 100,
                       -bgcolor => ${ change_color() },
                       -align => "center" } , "Ячейка номер $num" );
}

print $cgi->end_Tr,
     $cgi->end_table,
     $cgi->end_html;

Для чего мы добавили дополнительный вызов функции в unless, догадайся сам. Поэксперементируй с этим кодом, поробуй не добавлять вызов change_color, пробуй изменить условие в цикле и т.п.
Удачи.

Автор: r 13.3.2005, 19:23
Привет Всем, особенно Комодераторам, последний пример был супер, не в плане цвета, а как пример, я переписал все формы!!!!!!! Думаю поискать книгу в инете, про этот чудный модуль CGI.pm, а то в нашем городке об этой книге никто даже не слышал, кто нибудь если знает хороший магазин пишите сюда. Ну и ещё есть вопросик, никак не могу убрать из строки первый символ может это из-за кирилицы. Спасибо.

Автор: korob2001 13.3.2005, 22:57
Допустим есть такая строка "тпривет, мир!", на выходе мы хотим видеть её, в таком виде "Привет, мир!".
Код

#!/usr/bin/perl -w
use strict;
my $str = "тпривет, мир!";
$str = substr( $str, 1 );
print $str;

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

#!/usr/bin/perl -w
use strict;
my $str = "тпривет, мир!";
$str = ucfirst( substr( $str, 1 ) );
print $str;

Заметь, что ничего не изменилось, строка так и осталась такой "привет, мир!". Причина в том, что некоторые функции Perl не всегда верно работают с символами кирилицы и теми языками где имспользуются диактрические знаки. Нам просто нужно подключить прагму use locale, она даёт компилятору команду использовать национальные установки из POSIX, её можно так же и отменить, таким способом no locale. Подправим вышеприведённый код:
Код

#!/usr/bin/perl -w
use strict;
use locale;
my $str = "тпривет, мир!";
$str = ucfirst( substr( $str, 1 ) );
print $str;

Теперь строка будет выглядеть так "Привет, мир!".
Вот так можно добиться того же эффекта, с помощью эскейп-последовательностей:
Код

#!/usr/bin/perl -w
use strict;
use locale;
print "\uпривет, мир!\n";
# или так
print "\Uп\Lривет, мир!\n";

Но это, на мой взляд не самый удобный способ, куда удобнее работать с функцией ucfirst(), хотя это тебе решать, как ты будешь обрабатывать строку.

Удачи.

Автор: r 13.3.2005, 23:47
Спасибо, буду пробовать. Зайду если что.

Автор: r 23.3.2005, 22:51
Привет Всем Постояльцам, тут вот закавыка вышла, первый символ я удалил, все нормально, а проблема вот в чем: у меня есть список у которого строки пронумерованы и когда необходимо удалить одну цифру это работает, но когда надо удалить например вот такое число: 1236?
С регулярными выражениями никак не подружусь. Спасибо.

P.s. У Вас ошибка на странице выскакивает. smile

Автор: korob2001 23.3.2005, 23:13
Цитата

Привет Всем Постояльцам, тут вот закавыка вышла, первый символ я удалил, все нормально, а проблема вот в чем: у меня есть список у которого строки пронумерованы и когда необходимо удалить одну цифру это работает, но когда надо удалить например вот такое число: 1236?
С регулярными выражениями никак не подружусь. Спасибо.

Код

#!/usr/bin/perl -w
use strict;
my $str = "1225 Просто текст";
$str =~ s/^\s*?\d+\s*//;
print $str;

Этот код немного излишен, такак его цель удалить не просто цифру в начале строки, а ещё и символы пробела если таковые есть.

Удачи

Автор: r 23.3.2005, 23:35
Спасибо, пашет. Когда-же я таким вумным стану? smile

Автор: korob2001 23.3.2005, 23:41
Цитата

Спасибо, пашет. Когда-же я таким вумным стану?

Следуй заветам Ильича. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)