Forum Webscript.Ru

Программирование => Perl => Тема начата: AnnA от 13 Декабря 2005, 20:34:35

Название: назначение функции
Отправлено: AnnA от 13 Декабря 2005, 20:34:35
Доброго времени суток.
помогите  пож-ста уяснить чего собственно тут задумывалось:
sub line_parser($) {
my($self,$text)=(shift,shift);
$text=~s/\\x0D//g; $text=~s!\\n!!g;
my $pt = $self->{tpldir}.\'/blue.tpl\';
open(D,$pt) or die "cannot read $pt $!"; flock(D,LOCK_EX); seek(D,0,0); local $/ = \'\';
my $line=; flock(D,LOCK_UN); close(D);

my ($n,$v,$tdtxt,$e)=($text=~/§BLUE_LINE_(\\d)\\|(.*)§(.*)§LINE_END_(\\d)§/);
my ($h,$r,$w)=split(/\\|/,$v);
my %lh = ($n => [$tdtxt,$h,$r,$w]);

$line=~s!!$lh{$n}[3]!;
$line=~s!!$lh{$n}[1]!;
$line=~s!!$lh{$n}[2]!;
$line=~s!!$lh{$n}[0]!;
my %H = ($n => $line);

$text=~s!§BLUE_LINE_$n.*§(.*)§LINE_END_$n§!$H{$n}!g;

return $text;

}

и вечер уже, а я всё никак в толк не возьму.
похоже, что тыт задумывалась некая универсальность, но её нет. т.е. это работает если в передаваемой строке есть ОДНА вставка §BLUE_LINE_1|Заголовок1|какой-то текст|50%§
здесь еще какой-то текст
§LINE_END_1§

если две - полная ерунда выводится.
может недописано просто? :(
Название: назначение функции
Отправлено: arto от 13 Декабря 2005, 22:54:41
while () {
  if (m|§BLUE_LINE_(\\d+)|...m|§LINE_END_$1§|) {
    # process of data block
  }
}
Название: назначение функции
Отправлено: AnnA от 14 Декабря 2005, 19:38:02
arto разобралась. спасибо. ;)