Пытаюсь разбить пременную:foreach(@heads){
if($html=~/(.*)$_(.*)/){
...}
}Перл просто перестает отзываться. Может ли это быть из-за того что $_ может встречаться несколько раз в разных местах $html? Можно ли с этим что-нибудь сделать?
#!/usr/bin/perl@heads = ("sdfsdfsdf sd fsdf"," sfdfs sdf $_ ffgdfgd"," drryry $_ dfggf$_");
foreach(@heads){
if($html=~/(.*)$_(.*)/){
print $_;
}
}Если бы еще понять что нужно из этого добиться, но вот я твой пример сделал типа отдельной программкой - ничего не зависает, хотя ничего и не делает :)
Опиши - что оно _должно_ сделать, вместе что-нибудь придумаем. У тебя в переменной $_ в цикле находится целая строка, и что ты этим регулярным выражением хотел добиться?
Тяжело было сформулировать проблему. Задача состоит в том что дана длинная строка $html в ней по несколько раз встречаются каждый из элементов массива @heads. Необходимо разбить эту переменную так чтобы получилось два массива: в первом номера элементов массива @heads, в том порядке в котором они встречаются в переменной $html, во втором соответственно то, что шло между этими элементами. Приблизительно так.
>Тяжело было сформулировать проблему. Задача состоит в том что дана длинная строка
>$html в ней по несколько раз встречаются каждый из элементов массива
>@heads. Необходимо разбить эту переменную так чтобы получилось два массива: в
>первом номера элементов массива @heads, в том порядке в котором они
>встречаются в переменной $html, во втором соответственно то, что шло между
>этими элементами. Приблизительно так.
Лучше показать пример того чего надо... (сложно представить ситуацию когда нужно в рез-те получить 2 указанных массива)$html = 'aaaabbbbccccaaaadddeeeeddddffff';
@head = ('aaaa','dddd');$r = join ('|',@head );
@rest = split( $r, #html); # в этом массиве соберется все чего нет в @head
while ($html =~ s/($r)//) { push(@main,$1) }
# в массиве @main соберутся все значения exist in $html and in @head
>>Тяжело было сформулировать проблему. Задача состоит в том что дана длинная строка
>>$html в ней по несколько раз встречаются каждый из элементов массива
>>@heads. Необходимо разбить эту переменную так чтобы получилось два массива: в
>>первом номера элементов массива @heads, в том порядке в котором они
>>встречаются в переменной $html, во втором соответственно то, что шло между
>>этими элементами. Приблизительно так.
>Лучше показать пример того чего надо... (сложно представить ситуацию когда нужно в
>рез-те получить 2 указанных массива)
>
>$html = 'aaaabbbbccccaaaadddeeeeddddffff';
>@head = ('aaaa','dddd');
>
>$r = join ('|',@head );
>@rest = split( $r, #html); # в этом массиве соберется все чего
>нет в @head
>while ($html =~ s/($r)//) { push(@main,$1) }
># в массиве @main соберутся все значения exist in $html and in
>@head