LINUX.ORG.RU

помогите с perl


0

0

имею следующий код

sub compare_links{
  $_[0] =~ /.*d=(\d{7}).*/;
  my $l1 = $1
    
  $_[1] =~ /.*d=(\d{7}).*/;
  my $l2 = $1;
  if ($l1 = $l2)
       { print "Compared: $l1 \n\t$l2 - equals\n";
	 return 1; }
  else { print "Compared: $l1 \n\t$l2 - not!equals\n";  
	 return 0; }
}

и получаю в $l1 и $l2 одно и тоже значение, $_[0] $_[1] - разнятся только 7ю цифрами, которые мне собственно и нужны

переписал так:

sub get_msgid{
  $_[0] =~ /.*msgid=(\d{7}).*/;
  return $1;
}

sub compare_links{
    
  my $l1 = get_msgid $_[0];
  print "_[0] - $_[0] \n";
  
  my $l2 = get_msgid $_[1];
  print "_[1] - $_[1] \n";
  
  if ($l1 = $l2)
       { print "Compared: $l1 \n\t$l2 - equals\n";
	 return 1; }
  else { print "Compared: $l1 \n\t$l2 - not!equals\n";  
	 return 0; }
}

эффект тот же, помогите плиз, я даж незнаю, куда мне копать с таким
anonymous

>if ($l1 = $l2)
        ^^^
если сравнивать числа
if ($l1 == $l2)
или если ср. строки
if ("$l1" eq "$l2")

sdio ★★★★★
()

Уже нашли, ну ладно. Но, вообще-то, код кошмарненький... :(

use List::Util qw/reduce/;

sub all_links_equal {
    return reduce {($a && $b && $a == $b) ? $a : undef}
        map { /.*d=(\d{7}).*/ ? $1 : undef }
            @_;  
}

anonymous
()
Ответ на: комментарий от anonymous

ну это просто первое, что я пишу на перле и про map и reduce незнал, спасибо

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.