|
Тема |
Брой прилагания на regexp substitutuion |
|
Автор | Perl newbie (Нерегистриран) | |
Публикувано | 17.02.05 10:01 |
|
|
Здравейте,
Абсолютен новак съм с Perl, това е първата ми програма. Програмата трябва да работи върху стрингове (които са файлови имена, но това няма значение). Всеки стринг в себе си има 1 или повече точки "." . Програмата трябва да замества всички точки без най-дясната с подчертавки "_" (и след това да променя името на файла с новополученото). Решението, което измислих след ровене по мрежата, е
## begin here
opendir DH, "." or die "Cannot open the current directory!\n";
my $i;
my $num;
my $old;
while ( $old = $_ = readdir(DH) )
{
next if $_ eq "." or $_ eq "..";
$num = tr/[.]/[.]/;
next if $num <= 1;
$num --;
$i = 1;
while ( $i <= $num )
{
s/[.]/_/;
$i ++;
}
rename $old, $_ ;
}
## end here
Това работи, но не ми харесва. Вътрешният цикъл "while ( $i <= $num )" сканира от началото на стринга при всяка итерация, за да замени всяка следваща точка, и така сканира части, които вече са били прегледани. Не че има видимо забавяне, но би трябвало до може да се направи по-добре.
Въпросът ми е дали няма някакъв модификатор за брой изпълнения на субституцията, нещо като (измислям си синтаксис)
s/[.]/_/t{i}
където "t{i}" указва субституцията да се направи точно i пъти.
|
| |
|
|
|