Что не так с этим кодом Perl? - PullRequest
       1

Что не так с этим кодом Perl?

0 голосов
/ 27 августа 2010
$value = $list[1] ~ s/\D//g;

синтаксическая ошибка в строке 53 try1.pl, рядом с "] ~"

Выполнение try1.pl прервано из-за ошибок компиляции.

Iя пытаюсь извлечь цифры из второго элемента @list и сохранить его в $value.

Ответы [ 4 ]

7 голосов
/ 27 августа 2010

Вы имеете в виду = ~, а не ~.~ является унитарным побитовым оператором отрицания.

Пара способов сделать это:

($value) = $list[1] =~ /(\d+)/;

Оба набора паренов важны;только в случае захвата скобок операция сопоставления возвращает фактическое содержимое, а не просто указание на успех, и только в контексте списка (предоставляется оператором list-assign ()=).

Или общая идиомаскопировать, а затем изменить:

($value = $list[1]) =~ s/\D//;
1 голос
/ 27 августа 2010

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

 ( my $new = $old ) =~ s/\D//g;
1 голос
/ 27 августа 2010

может быть, вы хотели оператора =~?

P.S. обратите внимание, что $value не получит назначенную результирующую строку (сама строка изменяется на месте). $value будет присвоено количество выполненных замен

0 голосов
/ 27 августа 2010

И хотел \d igits не non-\D igits. И есть лишний оператор s/ ubstitute, где совпадение имеет больше смысла.

if ($list[1] =~ /(\d+)/) {
    $value = $1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...