Forum Webscript.Ru

Программирование => Perl => Тема начата: andrez от 17 Июня 2004, 14:01:18

Название: можно ли упростить?
Отправлено: andrez от 17 Июня 2004, 14:01:18
if (substr($str,0,1)=~/\\./) {$str=~ s/.{1}//;}
       else{ if (substr($str,1,1)=~/\\./) {$str=~ s/.{2}//;}
   else {$str=\'--\';} }


чтоб бы чтонить такого вида

if (substr($htp,0,1)=~/\\./ or substr($htp,1,1)=~/\\./)
 { и чтоб если выполнилось правое условие делай то-то, если левое делай другое}

else  else {$str=\'--\';}

Такое возможно в Perl?  :)
Название: можно ли упростить?
Отправлено: Green Kakadu от 17 Июня 2004, 14:27:41
а так:
(substr($str,0,1)=~/\\./) ? ($str=~ s/.{1}//)  : ((substr($str,1,1)=~/\\./)? ($str=~ s/.{2}//)  :  ($str=\'--\'));

[проверил -работает]
Название: можно ли упростить?
Отправлено: vladsu от 17 Июня 2004, 15:10:28
Не очень понятна задача, но я бы сделал без регекспов


if ( substr($str,0,1) eq \'.\' and substr($str,1,1) eq \'.\') {
     substr($str,0,2) = \'\';
} elsif ( substr($str,0,1) eq \'.\' ) {
     substr($str,0,1) = \'\';
} else {
     $str = \'--\';
}


Какой должен быть результат если
my $str = \'..lala\';
и если
my $str = \'.lala\';
?
Название: можно ли упростить?
Отправлено: andrez от 17 Июня 2004, 15:24:41
Цитировать
vladsu:
my $str = \'..lala\';

такое просто невозожно, т.к в строке всего 4 символа, а точка либо 1, либо 2
Название: можно ли упростить?
Отправлено: commander от 17 Июня 2004, 15:25:18
vladsu
:) узнаю знакомый почерк! :)

Цитировать
но не забываем что регексы медленные

:)
Название: можно ли упростить?
Отправлено: vladsu от 17 Июня 2004, 15:30:05
Цитировать
andrez:
такое просто невозожно, т.к в строке всего 4 символа, а точка либо 1, либо 2

Хорошо, тогда какой должен быть результат если
my $str = \'.lal\';
или
my $str = \'l.al\';
или
my $str = \'..al\';
?
Название: можно ли упростить?
Отправлено: andrez от 17 Июня 2004, 15:34:47
Цитировать
vladsu:
my $str = \'.lal\'

результат $str=\'lal\';
Цитировать
vladsu:
my $str = \'l.al\'

результат $str = \'al\';

Цитировать
vladsu:
my $str = \'..al\';

такое тоже не возможно, т.к точка всего одна и она либо есть, либо ее нет!
Название: можно ли упростить?
Отправлено: vladsu от 17 Июня 2004, 16:15:10
В таком случае

#my $str = \'.lal\';
#my $str = \'lala\';
my $str = \'l.al\';

if ( index($str,\'.\') == -1 ) {
     $str = \'--\';
} else {
     substr($str,0,index($str,\'.\')+1) = \'\';
}

print $str;
Название: можно ли упростить?
Отправлено: andrez от 17 Июня 2004, 16:17:12
ок, большое спасибо
Название: можно ли упростить?
Отправлено: Phoinix от 17 Июня 2004, 16:18:18
andrez
Примерно так:

unless ($str =~s /(^\\.([^\\.].{2})$)|(^.{1}\\.(.{2})$)/$2$4/) {$str = \'--\'}

P.S. только при условии что $str состоит из 4 символов, иначе \'--\'
[я тоже проверил, работает ;)]
Название: можно ли упростить?
Отправлено: Green Kakadu от 17 Июня 2004, 16:23:30
я свой вариант подправил ,хотя из-за таких "упрощений" код становится не очень читабельным :) из-за чего многим и не нравится perl