Как ссылаться на совпадения регулярного выражения, вычисленные в одном выражении? - PullRequest
2 голосов
/ 02 апреля 2011

Я хочу сделать что-то подобное

if(($Fifo[5]=~/T0int(\S+)/)&&($Fifo[6]=~/T0int(\S+)/)&&($1 ne $2))
{
    <Do something>
}

Как я могу ссылаться на совпадения, оцененные в двух регулярных выражениях?

Под $ 1 я подразумевал совпадение, оцененное в первом регулярном выражении, и $ 2 в следующем.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2011
my($first)  = $Fifo[5] =~ /T0int(\S+)/;
my($second) = $Fifo[6] =~ /T0int(\S+)/;

if (defined($first) && defined($second) && $first ne $second)) { ⋯ }

или более кавалерийски:

if (($Fifo[5] =~ /T0int(\S+)/)[0] ne ($Fifo[6] =~ /T0int(\S+)/)[0]) { ⋯ }

или еще более кавалерийски:

if ( (my($first,   $second) = "@Fifo[5,6]" =~ /T0int(\S+)/g ) 
      && $first && $second
      && $first ne $second)
{
    ⋯
}
0 голосов
/ 02 апреля 2011

Попробуйте что-то вроде этого:

if( ($Fifo[5] =~ (/T0int(\S+)/)) && ($Fifo[6] =~ (/T0int(\S+)/)) && ($1 ne $2) )

В основном поставьте круглые скобки вокруг регулярного выражения, чтобы сгруппировать их как $ 1, $ 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...