Возвращаемые значения для сопоставления строк - PullRequest
0 голосов
/ 07 апреля 2011

Притворись, у меня есть код в awk:

str_1 = "abc123defg";
match(str_1, /[0-9]+/);
num_1 = substr(str_1, RSTART, RLENGTH);

Тогда num_1 будет «123». Что такое Perl-версия той же задачи?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 07 апреля 2011

Я бы перевел это на:

my $num_1 = ($str_1 =~ /(\d+)/)[0];
3 голосов
/ 08 апреля 2011

Я бы обычно делал что-то вроде

my ($num_1) = $str_1 =~ /(\d+)/;

или

my $num_1;
if ($str_1 =~ /(\d+)/) {
    $num_1 = $1;
}

В шаблонах Perl \d эквивалентно [0-9] для строк ASCII.

1 голос
/ 07 апреля 2011

Это может быть:

$str="abc123defg";
$str =~ /[0-9]+/;
$num_1 = $&;

Ваш awk напрямую переводится на:

$str="abc123defg";
$str =~ /[0-9]+/;
$num_1 = substr($str, $-[0], $+[0]-$-[0]);

Что можно записать как:

use English;

$str="abc123defg";
$str =~ /[0-9]+/;
$num_1 = substr($str, $LAST_MATCH_START[0], $LAST_MATCH_END[0]-$LAST_MATCH_START[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...