$value = $list[1] ~ s/\D//g;
ошибка синтаксиса в try1.pl линии 53, возле "] ~"Что не так с этим кодом Perl?
Выполнение try1.pl прервана из-за ошибки компиляции.
Я пытаюсь извлечь цифры из второго элемента @list
, и хранить его в $value
.
$value = $list[1] ~ s/\D//g;
ошибка синтаксиса в try1.pl линии 53, возле "] ~"Что не так с этим кодом Perl?
Выполнение try1.pl прервана из-за ошибки компиляции.
Я пытаюсь извлечь цифры из второго элемента @list
, и хранить его в $value
.
Вы имеете в виду = ~, а не ~. ~ является унитарным поразрядным оператором отрицания.
Несколько способов сделать это:
($value) = $list[1] =~ /(\d+)/;
Оба набора скобок имеют важное значение; только если есть скобки в скобках, операция совпадения возвращает фактическое содержимое, а не только показатель успеха, а затем только в контексте списка (предоставляется оператором присвоения списка ()=
).
Или общий идиом копии, а затем изменить:
($value = $list[1]) =~ s/\D//;
Возможно, вам нужен оператор =~
?
P.S. обратите внимание, что $value
не получит назначенной результирующей строки (сама строка будет изменена на месте). $value
получит присвоение числа замен, которые были сделаны
И хотел \d
igits не является \D
igits. И есть лишний оператор s/
ubstitute, где совпадение имеет больше смысла.
if ($list[1] =~ /(\d+)/) {
$value = $1;
}
Вы сказали, что в комментариях, которые пытаются избавиться от не-цифр. Похоже, вы пытаетесь сохранить старое значение и получить измененное значение в новой переменной. Идиома Perl для этого есть:
(my $new = $old) =~ s/\D//g;
благодаря @ysth. это так непохоже на C! – Lazer
Собственно, это очень похоже на C. Оператор, которого вы использовали, не делает в C то, что вы пытались сделать. :) –