функция разбиения в Perl - PullRequest
0 голосов
/ 08 марта 2010

Пожалуйста, помогите мне в следующем,
У меня

    $sub = C:\views\sght\gzad\text\hksdk\akldls\hool.java
         = C:\views\sght\bdsk\text\hksdfg\sdjks\same.java
         = C:\views\jdjk\jhah\fjd\afhlad\sitklds\hgls.jsp

Мне нужно заменить каждое "\" на "."
Мне нужно разделить $ sub таким образом, чтобы если $ sub содержит «текст», то split и одна переменная содержит более позднюю часть после текста, например:

$var1 =text.hksdk.akldls.hool.java
       text.hksdfg.sdjks.same.java

еще

$var2= views.jdjk.jhah.fjd.afhlad.sitklds.hgls.jsp

Ответы [ 2 ]

0 голосов
/ 08 марта 2010

Мне нужно заменить каждое "\" на "."

Вы можете сделать это для переменной $text с помощью: $text =~ s/\\/./g - см. perldoc perlop .

Мне нужно разделить $ sub таким образом, чтобы, если $ sub содержал «текст», тогда split и одна переменная содержала более позднюю часть после текста

Это прямое применение функции split() (см. perldoc -f split ):

my $sub = "foobarbaz";
my @split = split /(bar)/, $sub;
# $split[0] will contain "foobar"
# split[1] will contain "baz"
0 голосов
/ 08 марта 2010

Ваш оператор присваивания '$ sub =' сбивает с толку. Это скаляр путей, разделенных пробелами?

Правильно ли я считаю, что вы хотите взять пути, перечисленные в $ sub, и поместить в один список слова с текстом, а в другой - нет?

Принимая все вышеперечисленное:

my $sub = ""; # initialize this however you will.

my @paths = split(/ /, $sub); # space-separated paths to list

my (@with_text, @without);
foreach my $p (@paths){
    $p =~ s/\\/./g;              # replace \ with .
    if($p =~ /text/){
        push(@with_text, $p);
    } else{
        push(@without, $p);
    }
}

my $var1 = join(' ', @with_text); # a space-separated list of paths containing 'text'
my $var2 = join(' ', @without); # a space separated list of paths not containing 'text'
...