Xpoint
   [напомнить пароль]

Обработка строк

Метки: [без меток]
2008-07-30 01:18:49 [обр] Andrej[досье]
$textcoder = 'Жыл был добрый Лис.';
&list if $textcoder =~ /добрый/;
Задача, найти и вместо слова "добрый" запустить &list; (&list; выводит несколько цифр).
Проблема именно в моем примере &list выводится в начале предложения, хотя должен выводится в середине вместо слова "добрый". Подскажите пожалуйста как это сделать.
спустя 2 часа 10 минут [обр] Роман Чемисов(56/327)[досье]
Andrej[досье]
В Вашем примере просто запускается list() по условию. Никакой связи между $textcoder и list() нет.
Возможный вариант решения:
my $textcoder = 'Жыл был добрый Лис.';
list(\$textcoder) if $textcoder =~ /добрый/;

sub list {
    my ($text) = @_;

    ${$text} =~ s/ЧТО-ТО/НА_ЧТО-ТО/;
}
спустя 4 часа 28 минут [обр] Алексей В. Иванов(100/2861)[досье]
Если я правильно понял, то смысл в замене слов на результат функции?
Для этого есть s/.../.../e
my $textcoder = 'Жыл был добрый Лис.';
$textcoder =~ s/добрый/list()/gei;
print $textcoder;
спустя 2 часа 24 минуты [обр] Andrej[досье]
Алексей да, нужно заменить слово на результат функции. Но в вашем примере, "добрый" заменяется на "1". А результат функции выводится в начало $textcoder. Хотя результат функции должен быть вместо "добрый".
спустя 2 часа 41 минуту [обр] Алексей Севрюков(198/1280)[досье]
Andrej[досье] Пример Алексея верный. Смотрите еще раз и внимательнее. И покажите Вашу функцию list.
спустя 15 минут [обр] Andrej[досье]
Вот:
sub list {
print "<table>";
for(my $i=0; $i<=$#playlist; $i++){
my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat(@playlist[$i]);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($mtime-14400);
$year += 1900;
my $vrfil = sprintf ("%.2ld/%.2ld/$year",$mday,$mon+1);
my $ids = sprintf ("%.2ld%.2ld%.2ld",$hour,$min,$sec);
$size=substr($size, 0, -6);
@playlist[$i] =~ s/\/home\/andrej\/music\///g;
@playlist[$i] =~ s/.mp3//g;
if ($size > 0 ) { print "<tr><td>$vrfil $size\Mb @playlist[$i]</td><td></td></tr>\n"; }
}
print "</table>";
}
спустя 3 минуты [обр] Алексей Севрюков(198/1280)[досье]
Andrej[досье] 5 баллов. Вы наверно вообще не понимаете что и зачем делаете.
sub list {

my $r="<table>";
for(my $i=0; $i<=$#playlist; $i++){
my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat(@playlist[$i]);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($mtime-14400);
$year += 1900;
my $vrfil = sprintf ("%.2ld/%.2ld/$year",$mday,$mon+1);
my $ids = sprintf ("%.2ld%.2ld%.2ld",$hour,$min,$sec);
$size=substr($size, 0, -6);
@playlist[$i] =~ s/\/home\/andrej\/music\///g;
@playlist[$i] =~ s/.mp3//g;
if ($size > 0 ) { $r.="<tr><td>$vrfil $size\Mb @playlist[$i]</td><td></td></tr>\n"; }
}
$r.="</table>";
return $r;
}
спустя 15 минут [обр] Andrej[досье]
Спасибо, разобрался.
спустя 8 минут [обр] Алексей Севрюков(198/1280)[досье]
Andrej[досье] Вы поняли почему нужно делать именно так, а не через print?
спустя 13 минут [обр] Andrej[досье]
Нет ;) Но все заработало.
спустя 3 минуты [обр] Алексей Севрюков(198/1280)[досье]
Andrej[досье] А пишите, что разобрались. Ладно, проехали. Не хотите Вы изучать язык, так что объяснять бесполезно.
Powered by POEM™ Engine Copyright © 2002-2005