используя ~~ правильно - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь разобрать достаточно простой файл пар полей и значений.Поэтому некоторые поля меня не интересуют, и я хочу пропустить

Так что в моем коде "play" у меня была такая статическая вещь: следующая, если $ field = ~ m / fieldToIgnore1 | fieldToIgnore2 /;

... затем я расширил этот массив и все еще счастлив

print "== using ~~ ==\n";
foreach my $field (@fields) {
  next if $field ~~ @foni;
  print "$field\n";
}

(fnoi == поля, не представляющие интереса)

Но когда я перенесу это обратно в свой не-установка игры не работает.Теперь в пьесе я просто зацикливался на

my @fields = ("field1", "field2");
my @foni = ("fieldToIgnore1", "fieldToIgnore1");

. В своем собственном коде я перебираю каждую строку и вынимаю строки, которые установлены как строки значения поля, а затем раздвигаю поле в скаляр... следовательно, почему я подумал, что это будет той же идеей, что и мой игровой код - но это не похоже на

while ( <$infile> ) {

  if ( /^PUBLISH:/ ) {

    ( $symbol, $record_type ) = ( $1, $2 );
    print "symbol is: [$symbol]\n"; 

  } else {
    my ( $field, $value ) = split(/\|/);
    next unless $value;

    print "field is: [$field]\n";
    print "value is: [$value]\n";

    $field =~ s/^\s+|\s+$//g;
    $value =~ s/^\s+|\s+$//g;

    print "... field is: [$field]\n";
    print "... value is: [$value]\n";

    ## ADD FIELD SKIPPING LOGIC HERE  

1 Ответ

0 голосов
/ 25 мая 2018

Вы можете построить шаблон регулярного выражения из вашего массива, например,

my $re = join '|', @foni;
$re    = qr/$re/;                  # Compile the regex

for my $field (@fields) {
    next if $field =~ $re;
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...